巧用DBA_HIST_EVENT_HISTOGRAM定位GPFS寫緩慢問題
1問題
9月1日接監控告警,8月份批次生成檔案緩慢,沒有在視窗內完成。
2分析
生成批次檔案的邏輯很簡單,針對一個查詢語句進行迴圈,依次使用utl_file.put_line寫入檔案(檔案在叢集檔案系統GPFS上)。
查詢SQL執行計劃,未發現異常。
查詢gv$active_session_history,發現會話等待事件集中在“utl_file I/O”上:
sql_id |
wait_class |
event |
count |
5nddq6b1a4bbu |
User I/O |
utl_file I/O |
22708 |
5nddq6b1a4bbu |
|
|
391 |
75m4xybvbvj7y |
Concurrency |
os thread startup |
3 |
75m4xybvbvj7y |
|
|
735 |
|
Other |
enq: PS - contention |
4 |
查詢dba_hist_event_histogram中對應的utl_file I/O等待事件等待時間分佈如下:
SNAP_ID |
INSTANCE_NUMBER |
EVENT_NAME |
WAIT_TIME_MILLI |
WAIT_COUNT |
80837 |
1 |
utl_file I/O |
1 |
608614205 |
80837 |
1 |
utl_file I/O |
2 |
123584 |
80837 |
1 |
utl_file I/O |
4 |
970730 |
80837 |
1 |
utl_file I/O |
8 |
25320 |
80837 |
1 |
utl_file I/O |
16 |
363 |
80837 |
1 |
utl_file I/O |
32 |
90 |
80837 |
1 |
utl_file I/O |
64 |
16 |
80837 |
1 |
utl_file I/O |
128 |
56 |
80837 |
1 |
utl_file I/O |
256 |
1 |
80837 |
1 |
utl_file I/O |
512 |
1 |
80837 |
2 |
utl_file I/O |
1 |
3069290 |
80837 |
2 |
utl_file I/O |
2 |
1 |
80837 |
2 |
utl_file I/O |
4 |
2 |
80837 |
2 |
utl_file I/O |
8 |
1 |
80837 |
2 |
utl_file I/O |
32 |
5 |
80837 |
2 |
utl_file I/O |
64 |
8624 |
80837 |
2 |
utl_file I/O |
128 |
17714 |
80837 |
2 |
utl_file I/O |
256 |
4315 |
80837 |
2 |
utl_file I/O |
512 |
118 |
80837 |
2 |
utl_file I/O |
1024 |
6 |
從上表中可以發現,例項1等待次數wait_count隨等待時長wait_time_milli增加快速穩定下降,例項2等待次數wait_count沒有隨等待時長wait_time_milli增加下降,在wait_time_milli=128ms時存在一個明顯的高峰17714,懷疑寫入GPFS緩慢。
3測試驗證
透過測試比較寫本地檔案系統與寫GPFS檔案效能差異。
--寫本地檔案系統,
declare
g_file utl_file.file_type;
begin
dbms_output.enable(null);
g_file := UTL_FILE.fopen('LOCAL_DIR','test20170805.txt','W');
for x in 1..1000000 loop
utl_file.put_line(g_file, x||rpad('x',1000,'x'));
end loop;
utl_file.fclose(g_file);
end;
/
--寫GPFS檔案系統
declare
g_file utl_file.file_type;
begin
dbms_output.enable(null);
g_file := UTL_FILE.fopen('GPFS_DIR','test20170805.txt','W');
for x in 1..1000000 loop
utl_file.put_line(g_file, x||rpad('x',1000,'x'));
end loop;
utl_file.fclose(g_file);
end;
/
測試結果如下:
次序 |
檔案大小 |
本地檔案(sec) |
GPFS檔案(sec) |
備註 |
1 |
100MB |
7.4 |
7.5 |
開啟新檔案,寫入 |
2 |
100MB |
8.2 |
72 |
重新開啟未刪除原檔案,寫入 |
3 |
1GB |
74 |
75 |
開啟新檔案,寫入 |
4 |
1GB |
75 |
756 |
重新開啟未刪除原檔案,寫入 |
5 |
1GB |
74 |
676 |
重新開啟未刪除原檔案,寫入 |
從上表中可以發現:
規律1:在重複寫同一個檔案時,寫GPFS檔案系統比寫本地檔案慢一個數量級
規律2:如果寫入一個新檔案,寫入速度與本地檔案系統相當
至此,確定問題根源為GPFS寫緩慢導致批次檔案未能在視窗內完成。
4後續措施
(1)敦促維護部門聯絡廠商更新相關補丁。
(2)如再次出現生成檔案失敗問題,透過手工刪除檔案,很可能會加快寫GPFS速度。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-2153318/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WEB應用訪問緩慢的問題定位Web
- SSH 連線緩慢問題處理
- aix 遠端登陸緩慢問題AI
- 並行查詢緩慢的問題分析並行
- 解決 macOS HomeBrew 下載緩慢的問題Mac
- vue-router懶載入速度緩慢問題Vue
- Oracle EXPDP自動備份緩慢問題解決Oracle
- job處理緩慢的效能問題排查與分析
- 生產SQL語句突然變慢問題定位SQL
- 輕鬆解決Github連線緩慢、圖裂問題Github
- goldengate 目的端replicat程式 執行緩慢的問題Go
- 如何在Mac上執行修復Safari緩慢的問題?Mac
- 一次資料庫響應緩慢的問題排查資料庫
- vue-router懶載入速度緩慢問題及解決方法Vue
- AndroidStudio載入gradle緩慢問題處理辦法AndroidGradle
- DNS導致資料庫登入緩慢的問題解決DNS資料庫
- 討論TableLayoutPanel載入緩慢和閃爍問題解決方案
- 解決Jira和Confluence訪問開啟越來越緩慢問題
- strace解決sqlplus登陸緩慢的問題一例SQL
- 兩行命令解決 Windows 下 Homestead 執行緩慢的問題Windows
- iOS——寫一個快速定位問題的指令碼iOS指令碼
- postgresql 匯入緩慢SQL
- Laravel 6 ignition 解決 Class 'xxx' not found 載入緩慢問題Laravel
- [20210518]ssh ip登入緩慢問題解決.txt
- 記一次網路異常緩慢問題核查處理過程
- 如何診斷oracle資料庫執行緩慢或hang住的問題Oracle資料庫
- 【LISTENER】使用“alter system register;”解決動態監聽註冊緩慢問題
- 中國起草工資條例解決工資增長緩慢等問題
- 解決VScode下載外掛十分緩慢的問題VSCode
- 阿里終面:業務主表讀寫緩慢如何最佳化?阿里
- GitHub無法訪問或訪問緩慢解決辦法Github
- 一個JAVA應用啟動緩慢問題排查 --來自jdk SecureRandom 的困惑JavaJDKrandom
- 由Linux核心bug引起SSH登入緩慢問題的排查與解決Linux
- 解決記錄日誌導致VS2013緩慢的問題
- [20130318]v$rman_backup_job_details訪問緩慢的問題.txtAI
- 定位和居中問題
- JVM問題定位工具JVM
- 微軟新發補丁修復Win7 SP1啟動緩慢問題微軟Win7