首页 > 其他分享 >数仓如何进行表级控制analyze?

数仓如何进行表级控制analyze?

时间:2023-03-28 11:03:08浏览次数:41  
标签:采样 数仓 statistics -- ALTER 大小 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,但无统计信息时还是会触发一次动态采样,确保至少有基本统计信息可用。


点击关注,第一时间了解华为云新鲜技术~

标签:采样,数仓,statistics,--,ALTER,大小,analyze,表级
From: https://blog.51cto.com/u_15214399/6154234

相关文章

  • 美团外卖离线数仓建设实践
    导读:美团外卖数据仓库主要是收集各种用户终端业务、行为数据,通过统一口径加工处理,通过多种数据服务支撑主题报表、数据分析等多种方式的应用。数据组作为数据基础部门,支持......
  • 基于 ByteHouse 构建实时数仓实践
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群随着数据的应用场景越来越丰富,企业对数据价值反馈到业务中的时效性要求也越来越高,......
  • 【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控
    摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案。本文分享自华为云社区《GaussDB(DWS)运维--单SQL磁盘空间管控》,作者:譡里个檔。【问题描述】执......
  • 飞塔防火墙对接Fortimanager和FortiAnalyzer平台
    测试拓扑如下:   Fortigate加入Fortimanager步骤:step1:网关管理口开启 FMG-Access服务WEB-UI下开启如下图:命令行开启: FortiGate#configsysteminterface......
  • 数仓建模——属性#yyds干货盘点#
    概念首先需要知道的是:在数据建模中,属性和实体之间存在一种内在的关系属性是实体的属性或特征。换句话说,实体是属性的宿主,而属性则是描述实体的各种特性的方式。属性可以......
  • FLINK实时数仓笔记2
    离线架构优点:耦合性能低,稳定性高缺点:时效性差一点说明:1.项目经理(架构师)是大公司出来的,追求系统的稳定性2.耦合性低,稳定性高3.考虑到公司未来的发展,数据量一定会变得......
  • 离线数仓之Kerberos基本使用及问题记录
    离线数仓之Kerberos基本使用及问题记录​​0.写在前面​​​1.Kerberos基本使用​​​0.启动Kerberos相关服务​​​​1.安全模式下启动Hadoop集群​​​2.安装Kerbero......
  • 如何搞定MySQL锁(全局锁、表级锁、行级锁)?这篇文章告诉你答案!太详细了!!!
    概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问......
  • bucket表:数仓存算分离中CU与DN解绑的关键
    摘要:Bucket存储是数据共享中重要的一环,当前阶段,bucket存储可以将列存中的CU数据和DN节点解绑。本文分享自华为云社区《存算分离之bucket表——【玩转PB级数仓GaussDB(DWS)......
  • 实际应用中的数仓分层
    1、实际应用中的数仓分层一般采用四层分层法  数据层具体实现01、数据源层ODS  数据源层主要将各个业务数据导入到大数据平台,作为业务数据的快照存储。02、数......