Oracle效能優化-資料庫CPU使用率100%
Oracle 效能優化- 資料庫伺服器 CPU 使用率 100%
問題:
凌晨1 點 40 分,監控發來告警郵件,資料庫伺服器 CPU 使用率超過 98% , 達到100% ,持續1 個多小時恢復正常;
環境說明:
DB:Oracle 11.2.0.1.0
OS:Windows Server 2012
問題分析:
收集CPU% 使用率超過 98% 時間段的 AWR 報告;
邏輯讀比平時高出很多
等待事件都是I/O 型別
CPU 使用率很高
檢視TOP SQL 發現兩條嚴重消耗效能的 SQL ;
檢視耗時SQL 執行計劃
select * from table ( dbms_xplan.display_cursor ( 'gcvs9nw6b9d8m' ));
select * from table ( dbms_xplan.display_awr ( 'gcvs9nw6b9d8m' ));
SQL 存在繫結變數,查出繫結變數,進行問題重現;
select b.name , b.datatype_string , b.value_string , b.last_captured
from dba_hist_sqlbind b
where b.sql_id = 'gcvs9nw6b9d8m'
and to_char ( last_captured , 'yyyymmdd' ) = '20181204'
order by 4 , 1 ;
繫結變數值帶入SQL 中,執行耗時 111 秒;
SELECT av.FID FACCOUNTID
FROM t_BD_AccountView AV
LEFT OUTER JOIN ( SELECT acct.FID FACCOUNTID ,
sum ( ve.FLocalAmount * ve.FEntryDC ) FDEBITLOCAL ,
sum ( ve.FLocalAmount * ( 1 - ve.FEntryDC )) FCREDITLOCAL
FROM T_GL_Voucher VCH
INNER JOIN T_GL_VoucherEntry VE
ON vch.FID = ve.FBillID
INNER JOIN t_BD_AccountView ACCT
ON (( ve.FAccountID = acct.FID AND
acct.Fcompanyid = 'ocIAAAAATtTM567U' ) AND
acct.FAccounttableId = 'ocIAAAAAfQsXaY5t' )
INNER JOIN T_BD_AccountType ACCTTYPE
ON acct.FAccountTypeID = acctType.FID
WHERE (( vch.Fcompanyid = 'ocIAAAAATtTM567U' AND
vch.fperiodid = 'ocIAAAAAx1SCOIxM' ) AND
vch.FbizStatus = 5 )
GROUP BY acct.fid ) A
ON a.FAccountID = av.FID
LEFT OUTER JOIN T_GL_AccountBalance_5L B
ON (( b.FOrgUnitID = 'ocIAAAAATtTM567U' AND b.FPeriod = '201810' ) AND
b.FAccountID = av.FID )
WHERE ((( av.Fcompanyid = 'ocIAAAAATtTM567U' AND
av.FAccounttableID = 'ocIAAAAAfQsXaY5t' ) AND av.FIsLeaf = 1 ) AND
(( NVL ( b.FDebitLocal , 0 ) <> NVL ( a.FDebitLocal , 0 )) OR
( NVL ( b.FCreditLocal , 0 ) <> NVL ( a.FCreditLocal , 0 ))));
--- 檢視正在執行 SQL 和執行時間
select v.last_call_et ,
v.username ,
v.machine ,
v.program ,
v.module ,
v.sid ,
sql.sql_text ,
sql.sql_fulltext ,
sql.sql_id ,
sql.disk_reads ,
v.event
from v$session v , v$sql sql
where v.sql_address = sql.address
and v.last_call_et > 0
and v.status = 'ACTIVE'
and v.username is not null ;
檢視SQL執行計劃
select * from table ( dbms_xplan.display_cursor ( '736262x3f3zrh' ));
檢視錶相關資訊
select count (*) from T_GL_VoucherEntry ; ---352763
select count (*) from t_BD_AccountView ; ---534724
select count (*) from T_GL_VoucherEntry a , t_BD_AccountView b where a.FAccountID = b.FID ; ---352757
select count (*) from t_BD_AccountView where Fcompanyid = 'ocIAAAAATtTM567U' ; ---1373
謂詞列選擇性較高,適合建立索引
select count (*), Fcompanyid from t_BD_AccountView group by Fcompanyid order by 1 desc ;
解決方案:
對 t_BD_AccountView 表 Fcompanyid 欄位 建立索引;
select * from user_ind_columns where table_name = 'T_BD_ACCOUNTVIEW' ;
create index i_t_BD_AccountView_Fcompanyid on t_BD_AccountView ( Fcompanyid );
再次執行SQL,耗時0.249秒,速度提升400倍
SELECT av.FID FACCOUNTID
FROM t_BD_AccountView AV
LEFT OUTER JOIN ( SELECT acct.FID FACCOUNTID ,
sum ( ve.FLocalAmount * ve.FEntryDC ) FDEBITLOCAL ,
sum ( ve.FLocalAmount * ( 1 - ve.FEntryDC )) FCREDITLOCAL
FROM T_GL_Voucher VCH
INNER JOIN T_GL_VoucherEntry VE
ON vch.FID = ve.FBillID
INNER JOIN t_BD_AccountView ACCT
ON (( ve.FAccountID = acct.FID AND
acct.Fcompanyid = 'ocIAAAAATtTM567U' ) AND
acct.FAccounttableId = 'ocIAAAAAfQsXaY5t' )
INNER JOIN T_BD_AccountType ACCTTYPE
ON acct.FAccountTypeID = acctType.FID
WHERE (( vch.Fcompanyid = 'ocIAAAAATtTM567U' AND
vch.fperiodid = 'ocIAAAAAx1SCOIxM' ) AND
vch.FbizStatus = 5 )
GROUP BY acct.fid ) A
ON a.FAccountID = av.FID
LEFT OUTER JOIN T_GL_AccountBalance_5L B
ON (( b.FOrgUnitID = 'ocIAAAAATtTM567U' AND b.FPeriod = '201810' ) AND
b.FAccountID = av.FID )
WHERE ((( av.Fcompanyid = 'ocIAAAAATtTM567U' AND
av.FAccounttableID = 'ocIAAAAAfQsXaY5t' ) AND av.FIsLeaf = 1 ) AND
(( NVL ( b.FDebitLocal , 0 ) <> NVL ( a.FDebitLocal , 0 )) OR
( NVL ( b.FCreditLocal , 0 ) <> NVL ( a.FCreditLocal , 0 ))));
select * from table ( dbms_xplan.display_cursor ( '96tw5wp0kk1z5' ));
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2675522/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 掌握Oracle資料庫效能調優方法Oracle資料庫
- 資料庫效能優化2資料庫優化
- mysql cpu 100% 滿 優化方案MySql優化
- 資料庫效能優化有哪些方式資料庫優化
- 資料庫效能優化-索引與sql相關優化資料庫優化索引SQL
- Linux CPU 效能優化指南Linux優化
- oracle 效能優化Oracle優化
- 1.2.9. 任務9:資料庫效能優化資料庫優化
- Part II 診斷和優化資料庫效能優化資料庫
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- win10磁碟使用率100%怎麼解決_win10磁碟使用率100%優化方法Win10優化
- oracle資料庫調優描述Oracle資料庫
- mysql資料庫Cpu利用率100%問題排查MySql資料庫
- 資料庫優化 - SQL優化資料庫優化SQL
- Oracle優化案例-緊急處理一條sql引起cpu使用率99%的問題(十六)Oracle優化SQL
- Spark效能優化:優化資料結構Spark優化資料結構
- 資料庫的這些效能優化,你做了嗎?資料庫優化
- 後端思維之資料庫效能優化方案後端資料庫優化
- Django資料庫效能優化之 - 使用Python集合操作Django資料庫優化Python
- 資料庫優化資料庫優化
- Oracle資料庫 11.2.0.4 EMON程式持續消耗CPUOracle資料庫
- Linux 效能優化之 CPU 篇 ----- 套路篇Linux優化
- PG資料庫伺服器的CPU使用率突然升高該如何分析資料庫伺服器
- 效能優化之資料庫篇5-分庫分表與資料遷移優化資料庫
- 資料庫效能優化之冗餘欄位的作用資料庫優化
- 效能優化資料庫篇-從單機到叢集優化資料庫
- 伺服器做了兩個優化 CPU 使用率減低 40%伺服器優化
- Oracle CPU使用率過高問題處理Oracle
- 最新IP資料庫 儲存優化 查詢效能優化 每秒解析上千萬資料庫優化
- HBase資料庫效能調優OW資料庫
- Oracle 效能優化-expdp備份速度優化02Oracle優化
- Oracle 效能優化-expdp備份速度優化03Oracle優化
- Google Chrome發現新Bug CPU使用率飆升至100%GoChrome
- 使用資源管理器優化Oracle效能AQ優化Oracle
- 資料庫優化SQL資料庫優化SQL