首页 > 数据库 >POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型

时间:2023-06-22 12:07:48浏览次数:45  
标签:语句 统计分析 POSTGRESQL 思域 信息 查询 pg 统计


POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据库

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。

自己做了一个统计分析有关的,思维导图

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据库_02

之前有一期说过,对于一些特殊的查询中的优化,可以在不建立索引和SQL优化的情况下,我们通过统计分析来进行优化的操作,效果也是显而易见的。本期,咱们的详细的说说统计分析的信息,以及作用,以及如何更加的个性化的调配我们的统计信息等。基于统计信息的门类和PG中的统计信息的表众多,我们这里只谈与查询有关的部分,也就是 table statistics ,而不是其他的统计信息的收集等。

每个表的状态的基本的信息包括于

1  表的行数

2  每个数据页面存储的数据

3  多少数据页面被标记在 visibility map 中

这些信息被保存在 pg_class 中,通过简单的语句我们可以确认以上的一些信息。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_统计分析_03

那么这些统计信息的主要作用在哪里,主要的作用就在于在数据查询中,可以通过统计信息分析出查询需要执行的计划是那些,怎么执行等问题的基础数据提供的部分。

在我们执行VACUUM FULL, Autovacuum, index ,reindex 或者手动analyze的情况下,可以收集相关的表的统计分析信息。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_postgresql_04

那么是不是有一些表,从来就没有过统计分析的情况,的确是有的,由一些表可能从来就没有进行过统计分析的数据收集,举例我们看一下

create table no_statistics (id int) with (autovacuum_enabled = false);

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据库_05

没有统计分析的表的数据查询是相当的混乱的,数据库并不知道这个表的具体的情况,所以查询中并不能给出一个具体的查询的好的评估。在我们针对这个表进行了相关的分析后,查询分析器才能准确的对这个表进行正确的查询评估。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据_06

我们在针对这个表进行了 vacuum后,也能对这个表进行了analyze 相关的工作,得到了表更新的行状态信息。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据_07

除此以外,在查询中我们还依赖与每个表中的统计分析,这里就需要看PG中的另外一个表pg_stats.

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据_08

通过表中关键的字段 n_distinct ,如果看到 -1 则说明表中每列的行值都不一样。正直的数字表明当前值的不同的值的数量的特性。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_统计分析_09

下面我们在PEOPLE表中的age 字段中来看看到底有多少种值,并且值的分布情况,都可以通过语句来分析出来。

 SELECT most_common_vals AS mcv,

  left(most_common_freqs::text,1000) || '...' AS mcf

FROM pg_stats

WHERE tablename = 'people' and attname = 'age';

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_postgresql_10

而空值的在一个表里面的获取,也可以通过语句来处理,下面的语句就可以

SELECT round(reltuples * s.null_frac) AS rows

FROM pg_class

JOIN pg_stats s ON s.tablename = relname

WHERE s.tablename = 'people' and s.attname = 'comments';

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据_11

可以看到通过上面的语句可以获得NULL 列的行数。

说到这里有几个词汇,需要注意 mcv , mcf , mcv 是most common value, mcf 是 most common freqs  这两个值直接可以形成我们数据库的列值分布的图,对于我们查询数据的指导是一个重要的指标。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据库_12

而如果出现了数据量过多,在一个数组无法存放的状态,此时POSTGRESQL 会祭出直方图的方式来处理这样的情况,因为直方图存储的是值的边界,所以这样的处理的统计分析的数据,不会过于臃肿。

在对于POSTGRESQL 的统计分析中,可以参看下面这篇对于个性化的统计分析的创建和使用。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据库_13

这里在上一篇中没有提到的关于建立自定义统计分析后,如何查询出自己的统计分析,可以通过select * from pg_stats_ext ; 的扩展表来查询你的自定义的统计分析的信息。

另外关于统计分析在PG 中我有一个想法就是,自动+手动+细化的工作方式,这里详细解释一下

1  对于常用的查询的表,尤其是经常UPDATE的数据表,不要等待AUTOVACUUM 去轮训他,我们实际上是可以通过手写一个程序来去定期的对他 IUD的,尤其是 U D ,较高的表定时的去判断他的数据的live 和  delete row 之间的差别,并且在超过你经验上认为应该去做统计分析的情况下,进行触发式统计分析。

2  另外经常有人问和提出的关于AUTOVACUUM 是否可以在业务繁忙期关闭的问题,个人认为不能,可以通过提高AUTOVACUUM 的一些参数达到在VACUUM 中尽量较少占用资源的,将时间拉长的方式来进行处理,而不是直接将这个表的AUTOVACUUM 给关闭掉。

最后给出一些常用的与统计分析调整列裁员值的语句

1    修改列的统计分析估值的采样(PG13以上版本)

alter table tablename alter column column_name set statistics 10000; 

默认是100,通过调整大小来存储更多的样本

2   针对一个表产生修改所有列的估算值的执行语句

SELECT format(
          'ALTER TABLE %s ALTER %I SET STATISTICS 1000',
          attrelid::regclass,
          attname
       )
FROM pg_attribute
WHERE attrelid = 'people'::regclass
  AND attnum > 0 ;

3  对于数据表中的统计分析进行人性化展示的语句

SELECT attname, inherited, n_distinct,
       array_to_string(most_common_vals, E'\n') as most_common_vals
FROM pg_stats
WHERE tablename = 'people';

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据_14

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_统计分析_15

———————————————————————————————

接着上几期,说完高尔夫 GTI,和领克 03+ ,本期必须的说说高性能钢炮中不能被不提及的 思域, 什么思域,鬼火少年,NO NO NO,我们说的思域可不是一般的思域,不是街上随处可见的那个东西,我们要说的是  思域的两厢版本,和 思域TYPE R 。

玩车业界有一句顺口溜,蓝针大众你追不起,红标本田你赶不上,银耳的奥迪你惹不起。(如果你不懂那么 额...  )当然这些车都是进口,没有国产的

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据库_16

如果你是本田的爱好者,并且是 TYPE-R的死忠粉,那么你可以买一辆东风本田的思域两厢版,当然如果要买也必然是买  手动版本,曾经座过一次这个国产思域的两厢手动版本,OMG ,只要你敢踩,只要你敢,过山车的赶脚一定是有的,就是那种你被钉到座位上的感觉(当然时间很短,并且的1 -2档猛踩),过弯的时候你不注意,你的脸可能会和侧窗来一个亲密的接触。

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_数据_17

可如果你就要要红标的本田TYPE-R ,进口42万的平行进口应该能满足你对速度的信仰。你将获得一个2.0T 的发动机 320匹的马力,400牛米的扭矩,和一个六速手动变速箱以及 245/30的大宽胎,和百公里 5.7秒的加速力。

开上这个车你必然不是鬼火少年,你就是鬼王 !

动力总成方面,全新思域TYPE R将继续搭载上一代车型的2.0T发动机,其最大功率提升到了320马力,峰值扭矩为400牛·米,传动系统匹配6速手动变速箱,并采用前置前驱布局。悬架部分,全新思域TYPE R配备有自适应减振器、Brembo制动系统、20英寸黑色轻量化轮圈及245/30 R20规格的轮胎。此外,新车还配备了仿碳纤维小包围。编译/汽车之家 刁昊)

POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型_统计分析_18

标签:语句,统计分析,POSTGRESQL,思域,信息,查询,pg,统计
From: https://blog.51cto.com/u_14150796/6534534

相关文章

  • POSTGRESQL vacuum_freeze系列中 三个参数与 vacuum的关系
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql ,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近在整理VACUUM相关知识的时候,发现一个问题对于vacuum_freeze的3个参数的概念掌握的不牢固,那么只能进行恶补了。本次的三个......
  • PostgreSQL 从熊灿灿一个获取固定字符的SQL 分析巧妙之处
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。某天群里一个同学抛出一个问题,关于获取字段类型中的设置的值,随即熊老师在群里抛出以下的一个SQL (秒抛)SELECTCASEatttypid......
  • POSTGRESQL SQL 语句案例,一场由LIMIT 1 引发的“奇怪异像”
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近一段工作很少优化SQL,实际上7-8年前的确有一段疯狂优化的“美好时光”。 最近一个同事提出一个问题,他的一个POSTGRESQL的SQ......
  • PostgreSQL 15 stats collector 在取消后是如何实现的原有功能的
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。在POSTGRESQL15有一个重要的功能去掉了statscollector在说为什么去掉这个statscollector的问题前,我们先得弄清出statscoll......
  • POSTGRESQL 和 MYSQL 到底应该不应该控制活跃连接
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql ,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近群里某个同学的提问,引起的本篇文章,关于数据库连接的部分,没有废话,我们先针对MYSQL来说说数据库连接的部分。首先MYSQL的客......
  • POSTGRESQL 自动搜索所有逻辑库中的无用索引自动化脚本实现
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。前两天腾出点时间,打算整理一下POSTGRESQL公司的数据库的无用的索引的问题,写了一个SQL通过SQL来获取这些数据库的无用索引,但头......
  • PostgreSQL 15 让多年被DISS的PG 安全画上圆满的句号
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。提起POSTGRESQL中的安全问题其中最容易被人Diss的最大BUG并不是autovacuum 之类的部分,排在首位的被DISS的最大的问题是安全的......
  • POSTGRESQL postgresql 升级的需求来自哪里
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题(本篇的思路来自于,盘古云课堂PG152023年2月18日晚,PG15升级问题大讨论稿)说起POSTGRESQL的升级问题,很多同学会问,升级POSTGRESQL......
  • POSTGRESQL 再说 PGBOUNCER 如何部署的问题
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近得到与PGBOUNCER的一个问题,问题大体上是这样描述的,一台POSTGRESQL的服务器,2000个maxconnection,同时安装了4个pgbouncer在......
  • PostgreSQL 16 三则 “新功能更新”
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。POSTGRESQL15刚刚推出不久,而POSTGRESQL16的新功能也已经在路上了,下面说说PG16已经确认有的3个新功能。1PG_DUMP压缩相对......