天天看點

SYBASE IQ 執行計劃檢視方法

在性能調優工作中,首要的事情是找出性能瓶頸。而針對資料庫應用,由于商用資料庫對上層應用來說是個黑盒,是以往往需要借助資料庫的一些接口或工具來了解資料庫的具體行為,并結合相關知識和業務進行調測。

    簡單來說,資料庫在執行一個查詢之前,會為該查詢生成一個最優(至少它這樣認為)的查詢計劃(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

查詢必須在第二步修改配置項的資料庫連結上執行。因為正如前文所述,那些配置項隻對目前連結生效,如果連結關閉即使重連,配置也不再生效。

執行的sql語句在一個建立的視窗上執行,不然會将視窗裡的所有sql語句都執行出計劃檔案,檔案一多可能會導緻失敗。