GaussDB(DWS) 如何表级控制analyze

举报
leapdb 发表于 2023/03/25 22:55:17 2023/03/25
【摘要】 介绍如何设置采样大小和表级控制analyze

一、控制采样大小

【设置全局采样大小】
通过参数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,但无统计信息时还是会触发一次动态采样,确保至少有基本统计信息可用。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200