数仓如何进行表级控制analyze?
摘要: 介绍如何设置采样大小和表级控制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,但无统计信息时还是会触发一次动态采样,确保至少有基本统计信息可用。
数仓如何进行表级控制analyze?的更多相关文章
- 数仓建模—ID Mapping
早晨起床的时候,发现自己尿分叉,我没有多想,简单洗洗就匆忙出门.路过早餐店,我看到师傅熟练的拉扯一小块面团,拉至细长条,然后放入油锅中,不一会功夫,一根屎黄色的油条便出锅了,卖相不错.我在想,小到炸屎 ...
- 数仓建模—OneID
今天是我在上海租房的小区被封的第三天,由于我的大意,没有屯吃的,外卖今天完全点不到了,中午的时候我找到了一包快过期的肉松饼,才补充了1000焦耳的能量.但是中午去做核酸的时候,我感觉走路有点不稳,我看 ...
- 数仓建模—建模工具PdMan(CHINER)介绍
数据仓库系列文章(持续更新) 数仓架构发展史 数仓建模方法论 数仓建模分层理论 数仓建模-宽表的设计 数仓建模-指标体系 数据仓库之拉链表 数仓-数据集成 数仓-数据集市 数仓-商业智能系统 数仓-埋 ...
- HAWQ取代传统数仓实践(十六)——事实表技术之迟到的事实
一.迟到的事实简介 数据仓库通常建立于一种理想的假设情况下,这就是数据仓库的度量(事实记录)与度量的环境(维度记录)同时出现在数据仓库中.当同时拥有事实记录和正确的当前维度行时,就能够从容地首先维护维 ...
- HAWQ取代传统数仓实践(十三)——事实表技术之周期快照
一.周期快照简介 周期快照事实表中的每行汇总了发生在某一标准周期,如一天.一周或一月的多个度量.其粒度是周期性的时间段,而不是单个事务.周期快照事实表通常包含许多数据的总计,因为任何与事实表时间范围一 ...
- 使用Oozie中workflow的定时任务重跑hive数仓表的历史分期调度
在数仓和BI系统的开发和使用过程中会经常出现需要重跑数仓中某些或一段时间内的分区数据,原因可能是:1.数据统计和计算逻辑/口径调整,2.发现之前的埋点数据收集出现错误或者埋点出现错误,3.业务数据库出 ...
- 【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践
本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大 ...
- 【企业流行新数仓】Day01:新版本对比、业务和表的介绍☆、Hive、ODS层、DWD层
一.2.0版本对比 二.业务介绍 1.术语 SKU SPU UV: user views 用户浏览总量[浏览量] PV:page views 页面浏览总量 2.电商业务表结构 表名 同步方式 字段名 ...
- 【离线数仓】Day03-系统业务数据仓库:数仓表概念、搭建、数据导入、数据可视化、Azkaban全调度、拉链表的使用
一.电商业务与数据结构简介 1.业务流程 2.常识:SKU/SPU SKU=Stock Keeping Unit(库存量基本单位).现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号. ...
- 【离线数仓】Day02-用户行为数据仓库:分层介绍、环境搭建(hive、tez)、LZO压缩、建表查询导入加索引、编写脚本
一.数仓分层概念 1.为什么要分层 ODS:原始数据层 DWD层:明细数据层 DWS:服务数据层 ADS:数据应用层 2.数仓分层 3.数据集市与数据仓库概念 4.数仓命名规范 ODS层命名为odsD ...
随机推荐
- mysql自动生成时间
字段类型: DATETIME 默认值: CURRENT_TIMESTAMP
- 励志成为python大佬的第一天
1.编码 2.格式化字符 3.list,dict,tuple,set 4.return 5.参数
- Verilog 预编译
Verilog 预编译 Verilog 语言支持宏定义(`define),参数 parameter,局域参数(localparam)以及`include等内容.这些数据常量的支持极大方便数字系统设计. ...
- vue-封装组件-结合vant实现点击按钮弹出泡泡(Popover)事件控制多个泡泡出现时,弹出对应的泡泡
<template> <div class="sale-share-box"> <span class="sale-share-btn&qu ...
- python 循环 类型转换
- Web_Servlet和jsp页面数据交互,通过请求转发在jsp中显示数据
1.Servlet页面代码 /* 实现jsp页面和sevlet页面的信息交互 */ @WebServlet(urlPatterns = "/aa") public class Js ...
- OSIDP-进程描述和控制-03
什么是进程 进程是由一组元素组成的实体,基本元素包括程序代码和与代码相关的数据集(set of data),另外还包括 标识符:一个进程用于和其他进程区分的唯一标识. 状态:进程所处的状态. 优先级: ...
- windows-git-tagslist
windows平台使用 Git-bash + vim + Taglist + ctags + cscope 安装Git for win版 安装ctags for win版,目录添加到环境变量 下载 T ...
- 解决git仓库项目 添加到github非空仓库冲突问题 error: failed to push some refs to 'https://github.com/Qtoken/......'
error: failed to push some refs to 'https://github.com/Qtoken/......' 1. 问题描述:执行命令:git push origin m ...
- WEB开发日志1
2020/6/11 23:23 今天做系统时,用到二级菜单,菜单下方放了一个<iframe>标签,但二级菜单的菜单项太多,导致一部分菜单项被<iframe>覆盖,从而无法再选中 ...