程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle通過AWR的SQL ordered by Gets和SQL ordered by Reads診斷問題

Oracle通過AWR的SQL ordered by Gets和SQL ordered by Reads診斷問題

編輯:Oracle教程

Oracle通過AWR的SQL ordered by Gets和SQL ordered by Reads診斷問題


之前看過很多數據庫報告,直到最近出現過兩次嚴重的性能問題,非常有代表性,所以記錄下來。

一次是報Oracle進程把數據庫服務器的CPU弄到100%

SQL ordered by Gets 是在內存中取數據,單位是次,是消耗CPU的主要源頭,在調試SQL的時候,大部分時候都是通過它來衡量性能。下面是實際的AWR報告,相當駭人啊:

 

SQL ordered by Gets

  • Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
  • Total Buffer Gets: ###############
  • Captured SQL account for 5.0% of Total Buffer Gets Executions Gets per Exec %Total CPU Time (s) Elapsed Time (s) SQL Id SQL Module SQL Text 1,606,380,390 84 19,123,576.07 -0.84 37923.62 207407.54 78tpfukr4m00p JDBC Thin Client select sum(temp.MidUser) total... 1,479,957,445 0   -0.77 26647.48 43778.62 2mxgaus0t6pxz JDBC Thin Client SELECT 設備ID SBID, 設備ID SBBM, 設... 1,280,365,092 73 17,539,247.84 -0.67 30263.02 159789.71 2qrj96dwj2xx1 JDBC Thin Client select sum(temp.MidUser) total... 1,163,229,240 518 2,245,616.29 -0.61 11775.72 30158.95 cq0adyp396538 JDBC Thin Client SELECT COUNT(*) FROM DM_FL_OBJ... 465,618,308 261 1,783,978.19 -0.24 11004.49 27015.23 acqqmk9b7vc4a JDBC Thin Client SELECT COUNT(*) FROM DM_FL_OBJ... 448,728,301 21 21,368,014.33 -0.23 10698.43 43934.26 24gvfb62gt1yd JDBC Thin Client select sum(temp.MidUser) total... 386,047,329 24 16,085,305.38 -0.20 9286.27 45034.84 fx8tp01tpwgkq JDBC Thin Client select sum(temp.MidUser) total... 294,571,906 13 22,659,377.38 -0.15 7002.73 26477.59 383ut78zg00hq JDBC Thin Client select sum(temp.MidUser) total... 274,341,527 14 19,595,823.36 -0.14 6415.83 26625.21 cqhbuuz14x7gh JDBC Thin Client select sum(temp.MidUser) total... 176,633,305 10 17,663,330.50 -0.09 4160.82 26360.28 9xc9701y82st9 JDBC Thin Client select sum(temp.MidUser) total...

     

    解決方案:調優SQL

    一次是數據庫服務器IO負載已經達到極限

    SQL ordered by Reads 去磁盤取數據,單位是次,如果太大,IO會導致整個數據庫慢,是RAC的環境,可能會導致數據庫重啟。

    在數據庫top5的等待事件中,可以看到direct path read非常大。
    Oracle 11g中_small_table_threshold參數是大表的界定,當表大小小於這個值時,就會對表進行緩存。它的值在實例啟動時動態決定,一般為 2% * DB_CACHE_SIZE,單位是block。所以依據系統的情況可以固定。

    解決方案:調優SQL、調大SGA、調大_small_table_threshold

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved