1. 程式人生 > 其它 >dmsql優化之收集統計資訊

dmsql優化之收集統計資訊

達夢資料庫在執行sql的時候,是基於CBO來選擇執行計劃的,而統計資訊的收集又會影響到CBO的效能代價估算。

下面記錄一下幾種收集統計資訊的方式。

--收集指定使用者下所有表所有列的統計資訊: DBMS_STATS.GATHER_SCHEMA_STATS('username',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
--收集指定使用者下所有索引的統計資訊: DBMS_STATS.GATHER_SCHEMA_STATS('usename',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO'); --或 收集單個索引統計資訊: DBMS_STATS.GATHER_INDEX_STATS('username','IDX_T2_X');
--收集指定使用者下某表統計資訊: DBMS_STATS.GATHER_TABLE_STATS('username','table_name',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
--收集某表某列的統計資訊: STAT 100 ON table_name(column_name); 需要特別注意的是,收集統計資訊會對資料庫的效能造成一定的影響,應儘量避免在業務高峰期收集統計資訊。 達夢也支援自動收集統計資訊,但是一般不建議在生產環境下使用,避免因統計資訊的收集而影響資料庫的效能。 --開啟表資料量監控開關,引數值為 1 時監控所有表,2 時僅監控配置表 SP_SET_PARA_VALUE(1,'AUTO_STAT_OBJ',2);
--設定 SYSDBA.T 表資料變化率超過 15% 時觸發自動更新統計資訊 DBMS_STATS.SET_TABLE_PREFS('SYSDBA','T','STALE_PERCENT',15);
--配置自動收集統計資訊觸發時機 SP_CREATE_AUTO_STAT_TRIGGER(1, 1, 1, 1,'14:36', '2021/12/31',60,1); --函式各引數介紹 SP_CREATE_AUTO_STAT_TRIGGER( TYPE INT, --間隔型別,預設為天 FREQ_INTERVAL INT, --間隔頻率,預設 1 FREQ_SUB_INTERVAL INT, --間隔頻率,與 FREQ_INTERVAL 配合使用 FREQ_MINUTE_INTERVAL INT, --間隔分鐘,預設為 1440 STARTTIME VARCHAR(128), --開始時間,預設為 22:00 DURING_START_DATE VARCHAR(128), --重複執行的起始時間,預設 1900/1/1 MAX_RUN_DURATION INT, --允許的最長執行時間(秒),預設不限制 ENABLE INT --0 關閉,1 啟用 --預設為 1 ); https://eco.dameng.com