批量數據變更后手動收集統計信息
更新時間 2025-02-05 09:37:24
最近更新時間: 2025-02-05 09:37:24
分享文章
本頁介紹天翼云TeleDB數據庫在批量數據變更后,手動執行vacuum analyze收集統計信息的方法。
在批量數據變更后,由于autovacuum觸發機制原因,或autovacuum任務繁忙原因,統計信息收集可能會一定的延時,此時統計信息是不準確的,會導致相關SQL的執行計劃生成不準確,從而導致SQL執行變慢甚至執行卡死問題。
批量數據變更包括:批量導入數據、批量更新數據、批量刪除數據、truncate表、truncate表+批量導入數據。
針對此問題,應在批量數據變更后,手動執行vacuum analyze收集統計信息。
在執行vacuum analyze前,可以適當調大maintenance_work_mem來提高效率,例如:
set maintenance_work_mem to '8GB';
vacuum analyze 表名;
可能會因為賬號權限要求,應用賬號沒有對該表的vacuum analyze權限,可創建函數解決此問題:
create or replace function user_analyze (schema_name text,table_name text) returns int as
$$
declare
v_sql text;
begin
v_sql := 'vacuum analyze ' || schema_name || '.' || table_name;
execute v_sql;
return 1;
end;
$$
language plpgsql;
select user_analyze('public','teledb_1');