一次ORACLE IO效能診斷案例
Oracle 診斷案例 -I/O 子系統
系統軟硬體現狀
Oracle 資料庫執行環境
Unix 主機: 2 * IBM M85
CPU : 4 個
系統記憶體: 6GB
磁碟陣列子系統: IBM SSA RAID-5
Oracle 版本: 8.1.7.1.0 32-bit
OS 版本: AIX 4.3.3-10
業務系統: ×××××業務管理系統
資料
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
2 4 897649 6717 0 7 23 437 957 0 1011 1184 164 13 7 60 19
12 9 893274 9676 0 30 0 0 0 0 1787 70898 20625 41 23 2 34
6 15 881613 18578 0 147 0 0 0 0 2035 62910 14427 37 31 1 31
1 10 880631 17850 0 13 0 0 0 0 1940 38678 10031 27 17 4 51
16 10 886848 9508 0 36 0 0 0 0 2226 48349 7778 26 16 4 54
2 14 892766 541 0 20 0 0 0 0 2331 88696 14576 43 18 1 38
15 19 895124 34 0 15 382 2007 4143 0 1878 59445 10411 26 16 2 56
1 12 883561 12427 0 28 270 1288 2735 0 1910 45451 6520 20 14 1 65
22 11 882698 11794 0 29 0 0 0 0 1856 51539 5399 21 25 4 50
9 19 879662 12982 0 17 0 0 0 0 1914 39960 7045 20 16 3 61
1 12 878367 12601 0 33 0 0 0 0 2016 30913 5410 18 10 4 68
2 14 881742 7084 0 51 0 0 0 0 2256 35721 7131 22 7 5 65
2 11 888809 0 0 25 149 975 1981 0 1893 46405 6496 22 14 6 58
1 11 877357 9894 0 27 212 631 1314 0 1636 28126 4256 16 26 2 55
3 9 880033 5315 0 25 0 0 0 0 1714 44692 5093 20 24 3 53
7 11 879638 3862 0 48 0 0 0 0 2044 62118 8235 27 28 3 42
1 9 871947 9857 0 28 0 0 0 0 1954 49887 11556 30 22 5 44
8 12 872208 7408 0 40 0 0 0 0 2132 38014 6991 22 14 4 59
1 10 879075 3815 0 14 396 2269 4650 0 1775 38587 5830 16 14 6 63
3 14 884434 4 0 24 235 1632 3575 0 1963 51640 7198 22 15 4 60
。。。 。。。
資料
Top 5 Wait Events
~~~~~~~~~~~~~~~~~ Wait % Total
Event Waits Time (cs) Wt Time
-------------------------------------------- ------------ ------------ -------
log file sync 95,588 1,675,398 58.21
db file sequential read 402,294 917,696 31.88
db file parallel write 7,780 114,321 3.97
db file scattered read 8,560 70,945 2.46
buffer busy waits 12,303 40,058 1.39
-------------------------------------------------------------
(詳細資訊參見《 2.16 如何理解 STATPACK 的報告》 .doc )
業務分析
1. 主要業務發生在每天 8 點到 22 點之間
2. 每天的事務量是 60G 左右,要求較高的資料的完整性
3. 每天有較多的 DML (主要是 INSERT 和 UPDATE 操作,幾乎沒有 DELETE 操作和大量的查詢操作。 DML 操作主要是用來更新在 B/S 結構和 C/S 結構中的業務資訊, select 操作主要是提供大量的檢索功能,業務的操作模式是每個 DML 之後就會 commit ;
4. 目前的備份方式是冷備,目前的歸檔方式是歸檔到一個本地磁碟和 RAID 上各一份
5. 目前的 Web 服務,資料庫服務, C/S 結構的伺服器都跑在 RAID5 上
資料庫效能分析
問題 1 :
由於系統存在大量的 transaction, 造成了 redo log 對磁碟的巨大 io 壓力,造成了系統大量的 IO 等待。所以,當前資料庫的主要效能瓶頸是磁碟子系統的效能問題,系統的 IO Wait 嚴重偏高,尤其是 log file sync 事件, 20 分鐘內發生 95,588 次,平均每秒發生 80 個左右,佔系統所有等待時間的將近 60% 。由於 log file sync 的產生是由於應用程式過度的 Commit 造成的,所以最好的方法是修改應用程式,採用 Batch Commit 技術,來提高系統的效能。如果由於第三方軟體的原因,導致應用程式無法進行修改,我們也可以提出一個變通的方案,即最佳化使用者磁碟子系統,提高使用者磁碟的效能,以達到減少系統的 IO 資源等待,提高系統效能的目標。
問題 2 :
還有一個系統的主要問題所在是 Oracle 的配置問題。當前系統有 6GB 的實體記憶體,但是 Oracle SGA 只是開了 600M 。這是對資源的巨大浪費。如果這個伺服器只是執行 Oracle Database , 那麼 Oracle SGA 可以調節到 3.5-4GB 。 ( 當前系統使用的是 32Bit Oracle ,建議升級到 64Bit Oracle) 。
問題 3 :
1) 另外的幾個小問題是系統地 rollback segment 數目偏少。
2) 系統地 log_buffer 偏大。
3) 系統把 redo log file 作了兩個 member, 是高可用性的一個比較好的策略,不過當前的配置是在同一個磁碟上面,似乎意義不大。 Log file switch 過於頻繁, logfile 大小偏小。
修改建議
1) 如果系統沒有配置 hacmp 作為 HA 可用性解決方案,建議把 redolog 從 hdisk2,hdisk3 所在的磁碟移動到 hdisk0,hdisk1 上面(採用 raw device )。這樣,可以大大降低系統地 IO 壓力,同時保證 redo log 的安全性。
2) 當前磁碟子系統,主要 IO 集中在 hdisk2, hdisk3 這兩個邏輯磁碟上面。為了降低系統地 IO 壓力, 建議把一部分 datafile 移到 hdisk4 磁碟上。
3) 如果有可能調節引用程式,建議使用 batch commit 技術,把下面的語句修改一下:同時注意,
Buffer Gets Executions Gets per Exec % Total Hash Value
--------------- ------------ -------------- ------- ------------
2,440,675 1,218,841 2.0 18.1 1115576732
update nlc50.z07 set z07_rec_key = :r1:i1,z07_sequence = :r2:i2,
z07_level = :r3:i3,z07_source = :r4:i4,z07_history = :r5:i5 wher
e z07_rec_key = :v1
同時注意:
Executions Rows Processed Rows per Exec Hash Value
------------ ---------------- ---------------- ------------
1,218,841 355 0.0 1115576732
update nlc50.z07 set z07_rec_key = :r1:i1,z07_sequence = :r2:i2,
z07_level = :r3:i3,z07_source = :r4:i4,z07_history = :r5:i5 wher
e z07_rec_key = :v1
程式的寫法有問題。執行那麼多次,實際上被處理的行的資料很少,就是實際上很多都是無用功。卻找成了系統的那麼多的 commit , 從而趙成了 IO 子系統的很大的壓力。
4) 調節下面的 SQL 的索引策略:
Physical Reads Executions Reads per Exec % Total Hash Value
--------------- ------------ -------------- ------- ------------
83,852 5 16,770.4 19.9 3357555463
select max(z30_rec_key_2) from nlc50.z30 where z30_rec_key_2 lik
e :v1
SQL ordered by Executions for DB: ALEPH0 Instance: aleph0 Snaps: 1 -2
-> End Executions Threshold: 100
497,348 17,371 0.0 695152841
select z98_rec_key,z98_type,z98_direction,z98_compress_type,z98_
total_map_length,z98_map_length,z98_data from nlc09.z98 where z9
8_rec_key >= :v1
340,815 93,393 0.3 3969206952
select z98_rec_key,z98_type,z98_direction,z98_compress_type,z98_
total_map_length,z98_map_length,z98_data from nlc01.z98 where z9
8_rec_key >= :v1
141,423 137,021 1.0 3698977705
select * from nlc01.z101 where z101_rec_key >= :v1
調整後效能的改善
系統 IO Wait% 降低到 10% 左右,系統 CPU 空閒可以從現在的小於 8% 增加到 30 %以上。對於使用者來講,系統主要業務響應時間明顯變快。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2777107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次Oracle診斷案例-Spfile案例Oracle
- ORACLE診斷案例Oracle
- 一次Oracle診斷案例-SGA與SwapOracle
- Oracle診斷案例-Sql_traceOracleSQL
- Oracle診斷案例-Job任務停止執行Oracle
- Oracle診斷事件列表(轉)Oracle事件
- oracle之 redo過高診斷Oracle
- 9 Oracle Data Guard 故障診斷Oracle
- 另闢蹊徑-診斷工具之 IO waitAI
- 一次SGA與Swap故障診斷
- Oracle 12.1.0.2 impdp匯入慢診斷Oracle
- 一次DG故障診斷過程分析
- oracle RAC 診斷叢集狀態命令Oracle
- 基於等待事件的效能診斷(轉)事件
- .NET Core-全域性效能診斷工具
- 一次gc buffer busy問題的診斷GC
- Oracle EBS基礎學習:Oracle EBS啟用診斷功能Oracle
- sp_sysmon效能診斷結果分析(zt)
- ORACLE 如何診斷高水位爭用(enq: HW – contention)OracleENQ
- 9. Oracle常用分析診斷工具——9.3.ADDMOracle
- 9. Oracle常用分析診斷工具——9.2. ASHOracle
- 9. Oracle常用分析診斷工具——9.1. AWROracle
- oracle一次卡頓案例(三)Oracle
- oracle一次卡頓案例(四)Oracle
- Spark效能優化:診斷記憶體的消耗Spark優化記憶體
- Part II 診斷和優化資料庫效能優化資料庫
- MySQL故障診斷常用方法手冊(含指令碼、案例)MySql指令碼
- 效能診斷利器JProfiler快速入門和最佳實踐
- 記一次使用gdb診斷gc問題全過程GC
- .記一次使用gdb診斷gc問題全過程GC
- [JVM] 應用診斷工具之Fastthread(線上診斷)JVMASTthread
- oracle 12c 新增的診斷事件的初步嘗試Oracle事件
- 【ASK_ORACLE】ORA-04030診斷方法及預防措施Oracle
- 一次IO效能問題的發現過程
- JProfiler for Mac:提升效能和診斷問題的終極工具Mac
- 網路效能監控和診斷市場指南(2020版)
- 如何使用 dotTrace 來診斷 netcore 應用的效能問題NetCore
- MySQL使用event等待事件進行資料庫效能診斷MySql事件資料庫