openGauss學(xué)習(xí)筆記-247 openGauss性能調(diào)優(yōu)-SQL調(diào)優(yōu)關(guān)鍵參數(shù)調(diào)整247.1 SQL調(diào)優(yōu)關(guān)鍵參數(shù)調(diào)整
openGauss學(xué)習(xí)筆記-247 openGauss性能調(diào)優(yōu)-SQL調(diào)優(yōu)關(guān)鍵參數(shù)調(diào)整
247.1 SQL調(diào)優(yōu)關(guān)鍵參數(shù)調(diào)整
本節(jié)將介紹影響openGauss SQL調(diào)優(yōu)性能的關(guān)鍵數(shù)據(jù)庫主節(jié)點(diǎn)配置參數(shù),配置方法參見配置運(yùn)行參數(shù)。
表 1 數(shù)據(jù)庫主節(jié)點(diǎn)配置參數(shù)
| 參數(shù)/參考值 | 描述 |
|---|---|
| enable_nestloop=on | 控制查詢優(yōu)化器對嵌套循環(huán)連接(Nest Loop Join)類型的使用。當(dāng)設(shè)置為“on”后,優(yōu)化器優(yōu)先使用Nest Loop Join;當(dāng)設(shè)置為“off”后,優(yōu)化器在存在其他方法時(shí)將優(yōu)先選擇其他方法。說明:如果只需要在當(dāng)前數(shù)據(jù)庫連接(即當(dāng)前Session)中臨時(shí)更改該參數(shù)值,則只需要在SQL語句中執(zhí)行如下命令:SET enable_nestloop to off;此參數(shù)默認(rèn)設(shè)置為“on”,但實(shí)際調(diào)優(yōu)中應(yīng)根據(jù)情況選擇是否關(guān)閉。一般情況下,在三種join方式(Nested Loop、Merge Join和Hash Join)里,Nested Loop性能較差,實(shí)際調(diào)優(yōu)中可以選擇關(guān)閉。 |
| enable_bitmapscan=on | 控制查詢優(yōu)化器對位圖掃描規(guī)劃類型的使用。設(shè)置為“on”,表示使用;設(shè)置為“off”,表示不使用。說明:如果只需要在當(dāng)前數(shù)據(jù)庫連接(即當(dāng)前Session)中臨時(shí)更改該參數(shù)值,則只需要在SQL語句中執(zhí)行命令如下命令:SET enable_bitmapscan to off;bitmapscan掃描方式適用于“where a > 1 and b > 1”且a列和b列都有索引這種查詢條件,但有時(shí)其性能不如indexscan。因此,現(xiàn)場調(diào)優(yōu)如發(fā)現(xiàn)查詢性能較差且計(jì)劃中有bitmapscan算子,可以關(guān)閉bitmapscan,看性能是否有提升。 |
| enable_hashagg=on | 控制優(yōu)化器對Hash聚集規(guī)劃類型的使用。 |
| enable_hashjoin=on | 控制優(yōu)化器對Hash連接規(guī)劃類型的使用。 |
| enable_mergejoin=on | 控制優(yōu)化器對融合連接規(guī)劃類型的使用。 |
| enable_indexscan=on | 控制優(yōu)化器對索引掃描規(guī)劃類型的使用。 |
| enable_indexonlyscan=on | 控制優(yōu)化器對僅索引掃描規(guī)劃類型的使用。 |
| enable_seqscan=on | 控制優(yōu)化器對順序掃描規(guī)劃類型的使用。完全消除順序掃描是不可能的,但是關(guān)閉這個(gè)變量會讓優(yōu)化器在存在其他方法的時(shí)候優(yōu)先選擇其他方法。 |
| enable_sort=on | 控制優(yōu)化器使用的排序步驟。該設(shè)置不可能完全消除明確的排序,但是關(guān)閉這個(gè)變量可以讓優(yōu)化器在存在其他方法的時(shí)候優(yōu)先選擇其他方法。 |
| rewrite_rule | 控制優(yōu)化器是否啟用LAZY_AGG和MAGIC_SET重寫規(guī)則。 |
| sql_beta_feature | 控制優(yōu)化器是否啟用。SEL_SEMI_POISSON/SEL_EXPR_INSTR/PARAM_PATH_GEN/RAND_COST_OPT/PAGE_EST_OPT/PARAM_PATH_OPT/NO_UNIQUE_INDEX_FIRST/JOIN_SEL_WITH_CAST_FUNC/CANONICAL_PATHKEY/INDEX_COST_WITH_LEAF_PAGES_ONLY/PARTITION_OPFUSION/A_STYLE_COERCE/PLPGSQL_STREAM_FETCHALL/PREDPUSH_SAME_LEVEL/PARTITION_FDW_ON/DISABLE_BITMAP_COST_WITH_LOSSY_PAGES/EXTRACT_PUSHDOWN_OR_CLAUSE測試功能。 |
| var_eq_const_selectivity | 控制優(yōu)化器是否使用直方圖計(jì)算整型常量的選擇率。 |
| partition_page_estimation | 控制分區(qū)表頁面是否通過剪枝結(jié)果進(jìn)行頁面估算優(yōu)化,只包括分區(qū)表和local索引頁面,不包括全局索引頁面。估算公式為:估算后頁面 = 分區(qū)表總頁面 * (剪枝后分區(qū)數(shù) / 總分區(qū)數(shù))。 |
| partition_iterator_elimination | 控制分區(qū)表在分區(qū)剪枝結(jié)果為一個(gè)分區(qū)時(shí),是否通過消除分區(qū)迭代算子來提升執(zhí)行效率。 |
| enable_functional_dependency | 控制函數(shù)依賴統(tǒng)計(jì)信息的使用。設(shè)置為“on”,開啟兩個(gè)功能:執(zhí)行ANALYZE生成的多列統(tǒng)計(jì)信息包含函數(shù)依賴統(tǒng)計(jì)信息。計(jì)算選擇率會使用函數(shù)依賴統(tǒng)計(jì)信息。設(shè)置為“off”,此兩個(gè)功能不生效:執(zhí)行ANALYZE生成的多列統(tǒng)計(jì)信息不包含函數(shù)依賴統(tǒng)計(jì)信息。計(jì)算選擇率不會使用函數(shù)依賴統(tǒng)計(jì)信息。說明:函數(shù)依賴(Functional Dependency)的概念來自于關(guān)系數(shù)據(jù)庫范式(Normal Form),表示屬性間的函數(shù)關(guān)系。函數(shù)依賴統(tǒng)計(jì)信息,對此概念進(jìn)行了擴(kuò)展,表示滿足函數(shù)關(guān)系的數(shù)據(jù)量占總數(shù)據(jù)量的比例。函數(shù)依賴統(tǒng)計(jì)信息是多列統(tǒng)計(jì)信息的一種,可以用于提升選擇率估算的準(zhǔn)確率。函數(shù)依賴統(tǒng)計(jì)信息適用于形如“where a = 1 and b = 1”的格式,要求a和b均是同一個(gè)表的屬性,約束條件為等式約束,約束條件用AND連接,約束條件至少為兩個(gè)。 |
| enable_seqscan_fusion | 控制seqscan底噪消除是否打開。 |
?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進(jìn)步的財(cái)富!

image.png