openGauss學(xué)習(xí)筆記-237 openGauss性能調(diào)優(yōu)-SQL調(diào)優(yōu)-SQL執(zhí)行計劃介紹-概述237.1 SQL執(zhí)行計劃概述237.1.1 執(zhí)行計劃顯示信息
openGauss學(xué)習(xí)筆記-237 openGauss性能調(diào)優(yōu)-SQL調(diào)優(yōu)-SQL執(zhí)行計劃介紹-概述
237.1 SQL執(zhí)行計劃概述
SQL執(zhí)行計劃是一個節(jié)點樹,顯示openGauss執(zhí)行一條SQL語句時執(zhí)行的詳細(xì)步驟。每一個步驟為一個數(shù)據(jù)庫運算符。
使用EXPLAIN命令可以查看優(yōu)化器為每個查詢生成的具體執(zhí)行計劃。EXPLAIN給每個執(zhí)行節(jié)點都輸出一行,顯示基本的節(jié)點類型和優(yōu)化器為執(zhí)行這個節(jié)點預(yù)計的開銷值。如圖1所示。
圖 1 SQL執(zhí)行計劃示例 [圖片上傳失敗...(image-60ba2f-1709718877377)]
最底層節(jié)點是表掃描節(jié)點,它掃描表并返回原始數(shù)據(jù)行。不同的表訪問模式有不同的掃描節(jié)點類型:順序掃描、索引掃描等。最底層節(jié)點的掃描對象也可能是非表行數(shù)據(jù)(不是直接從表中讀取的數(shù)據(jù)),如VALUES子句和返回行集的函數(shù),它們有自己的掃描節(jié)點類型。
如果查詢需要連接、聚集、排序、或者對原始行做其它操作,那么就會在掃描節(jié)點之上添加其它節(jié)點。 并且這些操作通常都有多種方法,因此在這些位置也有可能出現(xiàn)不同的執(zhí)行節(jié)點類型。
第一行(最上層節(jié)點)是執(zhí)行計劃總執(zhí)行開銷的預(yù)計。這個數(shù)值就是優(yōu)化器試圖最小化的數(shù)值。
237.1.1 執(zhí)行計劃顯示信息
除了設(shè)置不同的執(zhí)行計劃顯示格式外,還可以通過不同的EXPLAIN用法,顯示不同詳細(xì)程度的執(zhí)行計劃信息。常見有如下幾種,關(guān)于更多用法請參見EXPLAIN語法說明。
EXPLAIN statement:只生成執(zhí)行計劃,不實際執(zhí)行。其中statement代表SQL語句。
EXPLAIN ANALYZE statement:生成執(zhí)行計劃,進(jìn)行執(zhí)行,并顯示執(zhí)行的概要信息。顯示中加入了實際的運行時間統(tǒng)計,包括在每個規(guī)劃節(jié)點內(nèi)部花掉的總時間(以毫秒計)和它實際返回的行數(shù)。
EXPLAIN PERFORMANCE statement:生成執(zhí)行計劃,進(jìn)行執(zhí)行,并顯示執(zhí)行期間的全部信息。
為了測量運行時在執(zhí)行計劃中每個節(jié)點的開銷,EXPLAIN ANALYZE或EXPLAIN PERFORMANCE會在當(dāng)前查詢執(zhí)行上增加性能分析的開銷。在一個查詢上運行EXPLAIN ANALYZE或EXPLAIN PERFORMANCE有時會比普通查詢明顯的花費更多的時間。超支的數(shù)量依賴于查詢的本質(zhì)和使用的平臺。
因此,當(dāng)定位SQL運行慢問題時,如果SQL長時間運行未結(jié)束,建議通過EXPLAIN命令查看執(zhí)行計劃,進(jìn)行初步定位。如果SQL可以運行出來,則推薦使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看執(zhí)行計劃及其實際的運行信息,以便更精準(zhǔn)地定位問題原因。
EXPLAIN PERFORMANCE輕量化執(zhí)行方式與EXPLAIN PERFORMANCE保持一致,在原來的基礎(chǔ)上減少了性能分析的時間,執(zhí)行時間與SQL執(zhí)行時間的差異顯著減少。
?? 點贊,你的認(rèn)可是我創(chuàng)作的動力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進(jìn)步的財富!
