摘要: 介紹如何設定采樣大小和表級控制analyze,
本文分享自華為云社區《GaussDB(DWS) 如何表級控制analyze》,作者:leapdb,
一、控制采樣大小
【設定全域采樣大小】
通過引數default_statistics_target設定全域默認采樣大小,
a.default_statistics_target>0,表示按固定值方式采樣,取值范圍:(0, 10000] analyze采樣大小 = default_statistics_target * 300; b.default_statistics_target<0,表示按百分比方式采樣,取值范圍:[-100, 0) analyze采樣大小 = (-1) * default_statistics_target * 表的估算大小,
【設定表級采樣大小】
pg_attribute->attstattarget 用于設定每列采樣大小,所有列的最大值作為表采樣大小,
attstattarget取值范圍從-101到10000: [-101~-1) 表示使用百分比計算采樣大小,采樣大小 = 表估算條數 * (-1) * (attstattarget + 1) / 100 -1 表示未設定,使用全域引數default_statistics_target計算采樣大小,采樣大小 = default_statistics_target * 300 0 表示該列不進行采樣, [1,10000] 表示使用固定值計算采樣大小,采樣大小 = attstattarget * 300 ALTER TABLE table_name ALTER column_name SET STATISTICS 200; --把采樣大小調整為60000 ALTER TABLE table_name ALTER column_name SET STATISTICS PERCENT 2; --把采樣大小調整為2%
一般表級采樣大小高于全域采樣大小,歷史原因,813及以下版本default_statistics_target設定負數時,全域采樣大小優先級高,
二、控制analyze開關
【全域開關引數】
autovacuum --后臺autovacuum執行緒開關引數 autovacuum_mode --后臺autovacuum任務引數(vacuum:僅作vacuum;analyze:僅作analyze;mix:默認引數,vacuum和analyze都做) autoanalyze --動態采樣控制引數 autoanalyze_mode --動態采樣型別控制引數,820及以上支持,813及以下都是normal型別
【表級開關引數】
關閉“動態采樣”,“輪詢采樣”和手動analyze等所有形式的統計資訊收集,(適用于所有版本)
postgres=# select 'ALTER TABLE t1 ALTER '||attname||' SET STATISTICS 0;' from pg_attribute where attnum > 0 and attrelid='t1'::regclass; ?column? ------------------------------------------------- ALTER TABLE t1 ALTER fooid SET STATISTICS 0; ALTER TABLE t1 ALTER foosubid SET STATISTICS 0; ALTER TABLE t1 ALTER fooname SET STATISTICS 0; (3 rows) 執行以上拼接出來的SQL,修改所有列的采樣大小為0即可,再次analyze時則報沒有列可做analyze,即實作了analyze關閉, postgres=# analyze t1; INFO: No columns in "public.t1" can be used to collect statistics. ANALYZE
820及以上版本,支持表級控制“統計資訊自動收集模式”,也可以鎖定統計資訊,
alter table lineitem set (analyze_mode='backend'); --只做輪詢采樣analyze alter table lineitem set (analyze_mode='runtime'); --只做動態采樣analyze alter table lineitem set (analyze_mode='frozen'); --禁止做所有形式的analyze alter table lineitem set (analyze_mode='all'); --恢復表analyze模式的默認行為 select pg_options_to_table(reloptions) from pg_class where relname='lineitem'; --查看修改效果 設定成backend即關閉了動態采樣,只做輪詢采樣 設定成frozen即關閉了所有形式analyze,但無統計資訊時還是會觸發一次動態采樣,確保至少有基本統計資訊可用,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/548438.html
標籤:其他
上一篇:不同于Oracle:MySQL的insert會阻塞update
下一篇:從數倉發展史淺析數倉未來技術趨勢
