数仓如何进行表级控制analyze?
控制 如何 进行 数仓
2023-09-27 14:19:58 时间
摘要: 介绍如何设置采样大小和表级控制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,但无统计信息时还是会触发一次动态采样,确保至少有基本统计信息可用。
相关文章
- ZooKeeper设置ACL权限控制,删除权限
- 如何控制多线程执行顺序
- 如何实现远程控制你的电脑? 网穿软件
- 差速方向控制
- OSG addEventHandler W键显示网格 L键控制光照 F键切换全屏窗口 S键显示统计数据 事件处理器
- 使用安卓设备控制你的Linux PC
- iBatis应用--控制执行SQL时的超时时间
- Webpack 的 HtmlWebpackPlugin 如何控制某个 chunks 的 inject 位置?
- ROS节点发布消息控制RVIZ中的MAKER
- 《OpenStack实战》——1.3 关联OpenStack及其控制的计算资源
- 浅析JavaScript中如何实现并发控制:并发控制的理解和执行流程、使用 asyncPool 实现并发控制及其实现原理、如何手写 Promise.all 和 Promise.race
- 浅析css动画知识:用法介绍(规则与关键帧)animation-delay为负值提前进行动画、动画函数(三次贝塞尔曲线与步骤缓动函数)补间动画与逐帧动画效果、如何控制动画运行或暂停及控制元素各阶段状态、动画循环次数与方向
- 浅析如何控制浏览器资源请求的优先级:如何资源优先级、什么是关键请求、避免关键请求依赖链、如何使用技术控制请求优先级(preload、懒加载、font-display)
- STC8H8K系列汇编和C51实战——双中断控制定时器流水灯
- Clojure 学习入门(14)—— 循环控制
- yii2权限控制rbac之菜单menu最详细教程
- 如何在低速行驶状态下完美的控制摩托车