Greenplum统计信息常用命令及缺失处理方法

        本文主要记录GP统计信息缺失从发现到处理的步骤,最后发现gp_toolkit方案的查询结果好像不准确。

        想看统计信息处理命令的直接看第三部分哦

一、发现统计信息缺失的表
        GP的统计信息存储在pg_statistic系统表中,该表保存了每个数据表的最后一次analyze操作的结果(感兴趣的可以通过官方文档查看该表的字段信息)。但是这个系统表可读性比较差,我们可以通过pg_stats视图查看,这个视图我没在文档中找到,仅在pg_statistic的说明中提到了一下,感兴趣的可以用下面的命令查看下它的结构:

    \d+ pg_catalog.pg_stats;

        平时我们会比较关注哪些表缺失统计信息,在gp_toolkit方案中提供了如下方法查询:

    SELECT * from gp_toolkit.gp_stats_missing;

        因为刚接手GP,出于好奇用这个命令查了下,结果发现大量表缺少统计信息,大约占总表数的35%。

二、问题排查

        第一反应就觉得不对劲,怎么会这么多,然后就去查集群统计信息收集的配置

    gp_autostats_mode=on_no_stats

        该配置指定使用触发自动统计信息收集的模式。配置on_no_stats 选项可以触发对任何没有统计信息的表上的 CREATE TABLE AS SELECT,INSERT,或 COPY 操作的统计信息收集。配置详解见gp_autostats_mode

        看了解释更疑惑了,不应该有这么多表没有统计信息啊。思来想去只有一种可能能够说服自己,就是对表做DDL操作会导致统计信息失效,而gp_toolkit将统计信息失效的表也归纳为统计信息缺失。

三、处理方法        

        我们知道GP统计信息分析有三种方式:   

        1、手动:用户直接在客户端运行analyze命令

        2、手动:用户在数据库外部(服务器上)运行analyzedb管理工具

        3、自动(参数配置):当在没有统计信息的表上执行DML操作或者一个DML操作修改的行数超过指定阈值时,会触发自动分析操作

        下面列出分析统计信息相关的命令:

  检查表上缺失的统计信息。
	SELECT smischema || '.' || smitable FROM gp_toolkit.gp_stats_missing;

  更新某张表统计信息
	analyzedb -d 数据库名 -t schema名.表名

  更新多张表统计信息
	psql -d 数据库名 -tAXc "select smischema || '.' || smitable from gp_toolkit.gp_stats_missing | xargs -P 5 -i analyzedb -d acrmdb -a -t {}"

  更新全库统计信息
	analyzedb -d 数据库名 -a -p 10

  备份统计信息
	gpsd -h IP地址 -p 端口 -U 用户 -s 数据库名

四、实验

        知道了处理方法,那么就开始进入实验环节。

        我在容灾集群的两个schema做了实验,结果如下:

schema统计信息缺失的表数(分析前)统计信息缺失的表数(分析前后)下降比例
schema11056340%
schema2156184346%

        看到这结果我蒙了。然后我就分析schema2中这843个统计信息缺失的表,去pg_stats中查到,这843张表里有241张表其实是有统计信息的。

        这里就产生了两个问题:

        问题一:为什么analyzedb执行后,还有统计信息缺失的表?

        问题二:为什么分析后gp_toolkit.gp_stats_missing中显示有843张表缺失统计信息,而在pg_stats中查出,这843张表里有241张表是可以查到统计信息的?

        有知道的大佬还请帮忙评论解释下,现在只能等公司的维保采购完成后问厂商了。。。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值