天天看點

欲善其事必利其器-SQL性能分析工具sqlhc簡單介紹

今天是周末,看點不燒腦的内容。

sqlhc是老虎劉最常用的SQL優化工具,沒有之一。

這個工具在oracle 的 MOS網站可以下載下傳,原壓縮包裡面有3個檔案,老虎劉一般隻用sqlhc.sql一個檔案。

sqlhc是SQL health check的簡稱,能夠收集sql相關的表、索引、統計資訊、優化器參數、SQL執行情況、等待事件等資訊,可以幫你檢查SQL存在的問題并優化SQL。

使用sqlhc之前,首先要提供要檢查或優化的SQL的sql_id,一般DBA都知道sql_id,遺憾的是有些初級研發人員卻不知道sql_id為何物,自己百度一下,非常簡單。

通常情況下,我們會取AWR報告的TOP SQL進行性能分析。

執行方法:

使用sqlplus 連到資料庫(建議用DBA使用者,因為要通路一些性能視圖)

兩種執行方法(注意:10g版本執行過程還需要輸入一個參數,直接回車即可):

1、一次輸入兩個參數:

SQL>@sqlhc T sql_id

2、根據提示依次輸入參數:

SQL> @sqlhc

Parameter 1:

Oracle Pack License (Tuning, Diagnostics or None) [T|D|N] (required)

Enter value for 1: T

第一個參數,根據購買License情況選擇T、D或N(大多數人會選擇T)

PL/SQL procedure successfully completed.

Parameter 2:

SQL_ID of the SQL to be analyzed (required)

Enter value for 2: 9kpzwpgf7gdz2

第二個參數:你要檢查優化的SQL的sql_id

......具體執行過程較長,省略

執行過程大概幾分鐘到半小時不等(根據AWR儲存周期、字典表大小不同相差較大,一般系統應該在5分鐘以内能夠完成),在生産系統上執行不要緊張,對系統基本無影響!

執行過程有log,也有屏顯。

執行過程會inset 資料到plan_table表,執行結束會rollback。

執行完成後會在目前目錄下生成一個類似下面形式的一個zip檔案:

sqlhc_20160722_170249_1g33tgkybp2sv.zip

檔案名以sqlhc開頭,依次是日期、時間、sql_id。

壓縮包内的檔案一般如下圖所示:

欲善其事必利其器-SQL性能分析工具sqlhc簡單介紹

其中4個html檔案和log.zip是通常存在的。

10053 trace檔案的生成需要11.2版本以上,sql_id仍在library cache内的情況下。

如果*sql_monitor.zip 也包含在sqlhc壓縮包内,說明你的SQL執行時間超過了5s,或者是并行的SQL,而且收集sqlhc時仍保留在sql monitor的記憶體。sql monitor對分析sql執行計劃有很大幫助,這個工具也可以作為一個專門的主題。如果遇到問題收集sqlhc資訊及時,就非常有可能收集到sql monitor檔案。如果一個sql執行完後超過半小時沒有收集sqlhc,sql monitor資訊就就非常有可能被刷出記憶體。

主要分析的的3個html檔案是:

*_health_check.html

*_diagnostics.html

*_execution_plan.html

具體内容非常豐富,自己動手看看吧,看多了你就成“老中醫”了!

找人幫忙時直接把zip檔案發給對方,需要的資訊基本上能夠診斷分析和優化了。