巧用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
- vue-router懶載入速度緩慢問題Vue
- 解決 macOS HomeBrew 下載緩慢的問題Mac
- Oracle EXPDP自動備份緩慢問題解決Oracle
- AndroidStudio載入gradle緩慢問題處理辦法AndroidGradle
- [20210518]ssh ip登入緩慢問題解決.txt
- 輕鬆解決Github連線緩慢、圖裂問題Github
- 解決Jira和Confluence訪問開啟越來越緩慢問題
- strace解決sqlplus登陸緩慢的問題一例SQL
- Laravel 6 ignition 解決 Class 'xxx' not found 載入緩慢問題Laravel
- 如何在Mac上執行修復Safari緩慢的問題?Mac
- vue-router懶載入速度緩慢問題及解決方法Vue
- [20190409]pre_page_sga=true與連線緩慢的問題.txt
- 兩行命令解決 Windows 下 Homestead 執行緩慢的問題Windows
- 討論TableLayoutPanel載入緩慢和閃爍問題解決方案
- 解決Gradle下載緩慢的問題,將-bin改為-allGradle
- 解決VScode下載外掛十分緩慢的問題VSCode
- [20190103]設定pre_page_sga=true啟動緩慢的問題.txt
- 由Linux核心bug引起SSH登入緩慢問題的排查與解決Linux
- 一個JAVA應用啟動緩慢問題排查 --來自jdk SecureRandom 的困惑JavaJDKrandom
- 阿里終面:業務主表讀寫緩慢如何最佳化?阿里
- JVM問題定位工具JVM
- 解決 Windows 系統使用 Homestead 執行 Laravel 本地專案響應緩慢問題WindowsLaravel
- ResultSet.next() 慢定位
- 第12節 巧用Event發現問題
- weblogic控制檯訪問慢問題Web
- 解決 Windows 系統使用 Homestead 執行 Laravel 本地專案響應緩慢問題(轉)WindowsLaravel
- 系統執行緩慢,CPU 100%,以及Full GC次數過多問題的排查思路GC
- GPFS 建立 CNFSNFS
- ios XCUIElement 元素定位問題iOSUI
- 解決github訪問慢的問題Github
- 好文分享 | 記一次Oracle12c資料庫SQL短暫緩慢問題分析Oracle資料庫SQL
- win10 上使用GIT慢的問題,或者命令列反應慢的問題Win10Git命令列
- sql語句執行緩慢分析SQL
- [20181230]Git Bash啟動緩慢.txtGit
- [20180409]delete刪除緩慢分析.txtdelete
- [20211108]sqlplus 本地登入緩慢.txtSQL
- 使用 docker-sync 解決 docker for Mac 啟動的虛擬容器程式執行緩慢的問題DockerMac