在性能調優工做中,首要的事情是找出性能瓶頸。而針對數據庫應用,因爲商用數據庫對上層應用來講是個黑盒,因此每每須要藉助數據庫的一些接口或工具來了解數據庫的具體行爲,並結合相關知識和業務進行調測。
簡單來講,數據庫在執行一個查詢以前,會爲該查詢生成一個最優(至少它這樣認爲)的查詢計劃(Query Plan),而後再根據計劃的指示來執行實際的操做和處理。若是能瞭解到查詢計劃,也就能知道一個查詢真正是怎樣執行下來的、時間都耗在哪裏、有哪些影響因素等。
第一步:建立報告目錄
在正常運行的時候,查詢計劃是不會顯式生成的,但通過後面步驟的配置後,能夠指示IQ將每次查詢的計劃顯式生成爲文件供開發人員查閱,因此須要預先爲其建立一個目錄,如:
mkdir /export/home/zyx/ganjd
其中目錄能夠隨意制定,但爲了多個開發人員共用服務器的時候不互相影響,應該各自建立本身的目錄。該目錄應該對運行IQ服務器所使用的賬號有讀寫權限,最簡單就是直接將該目錄chmod爲777就能夠了。
第二步:配置連接選項
就是經過修改數據庫的配置項,讓IQ在執行查詢的時候生成查詢計劃的報告。通常能夠直接在連接了IQ的客戶端程序(如Aqua Data Studio或Interactive SQL)上使用下面的語句配置便可:
SET TEMPORARY OPTION QUERY_PLAN_AS_HTML_DIRECTORY ='/export/home/zyx/ganjd';
SET TEMPORARY OPTION QUERY_PLAN = ON;
SET TEMPORARY OPTION QUERY_DETAIL = ON;
SET TEMPORARY OPTION QUERY_TIMING = ON;
SET TEMPORARY OPTION QUERY_PLAN_AFTER_RUN = ON;
SET TEMPORARY OPTION QUERY_PLAN_AS_HTML = ON;
SET TEMPORARY OPTION INDEX_ADVISOR = ON;
SET TEMPORARY OPTION NOEXEC = ON;
須要注意的是,雖然在語法上上述SET OPTION中的TEMPORARY不是必須的,但建議加上,用於指定該選項的修改只對當前連接有效,而且在連接斷開後自動恢復。這樣就能夠避免多個開發人員共用服務器的時候的衝突。數據庫
簡單說明各個選項的含義:
QUERY_PLAN_AS_HTML_DIRECTORY:指定查詢計劃報告的存放路徑,也就是前面一步所建立的目錄便可。
QUERY_PLAN:告訴IQ須要顯式生成執行計劃供人工查閱。
QUERY_DETAIL:指定在查詢計劃報告中包含詳細信息,建議加上以便獲得更詳細的信息供調優分析。
QUERY_TIMING:指定收集計時統計信息,不然報告中會缺乏時間、耗時的信息,不便於分析性能。
QUERY_PLAN_AFTER_RUN:在執行完查詢以後,打印整個查詢計劃。具體意義不用很考究,打開就是了。
QUERY_PLAN_AS_HTML:查詢計劃報告用HTML的格式輸出,這樣就能夠經過瀏覽器查看,很方便。
INDEX_ADVISOR:讓IQ給出一個針對該查詢的索引優化建議,通常就是IQ認爲在某些列上增長某類索引能夠提高該查詢性能。該建議沒法替代人,尤爲是結合業務的分析,只做參考,但對存在嚴重性能問題的查詢仍是比較有用的。
NOEXEC:ON表示Excute該查詢時不會真正執行(也就不會有結果出來),而只生成查詢計劃;OFF表示該查詢會被真正執行,同時輸出計劃。能夠根據實際要求選擇,缺省是OFF。而ON對於帶修改的查詢(例如「update gan_SDR set CI = '0CAB' where ID = 74567」)來講是很方便的,由於這樣數據不會被真正修改,能夠重複獲取查詢計劃。
第三步:執行查詢
就是執行一個查詢語句。這裏說的「查詢」不僅限於select,帶條件的update、insert和delete都是包含查詢處理的,也會獲得對應的查詢計劃。例如:
update gan_SDR set CI = '0CAB' where ID = 74567
查詢必須在第二步修改配置項的數據庫連接上執行。由於正如前文所述,那些配置項只對當前連接生效,若是連接關閉即便重連,配置也再也不生效。瀏覽器
注:本文轉載服務器