首页 > 数据库 >PG--数据库统计信息

PG--数据库统计信息

时间:2022-10-03 11:03:52浏览次数:87  
标签:stat -- 数据库 --- common track PG analyze pg

analyze

自动收集统计信息

自动收集统计信息是依赖AUTOVACUUM定时触发analyze

触发 vacuum analyze的条件

表上(insert,update,delte 记录) >= 
autovacuum_analyze_scale_factor* reltuples(表上记录数)
+ autovacuum_analyze_threshold

这个我在这篇里面写过https://blog.51cto.com/u_13874232/5702603


手动收集统计信息

analyze [verbose] [table[(column[,..])]]

verbose:显示处理的进度,以及表的一些统计信息
table:要分析的表名,如果不指定,则对整个数据库中的所有表作分析
column:要分析的特定字段的名字默认是分析所有字段
analyze 命令 会在表上加读锁

例如

analyze VERBOSE  demotable;
analyze demotable(num);


pg_class

表和索引的行数、页面数记录在系统表pg_class中,是预估值。可以通过analyz来重新收集统计信息

select reltuples ,relpages from pg_class where relname='test';
postgres=# drop table test;
DROP TABLE
postgres=# create table test (id int);
CREATE TABLE
postgres=# insert into test values (generate_series(1,10));
INSERT 0 10
postgres=# select reltuples ,relpages from pg_class where relname='test';
reltuples | relpages
-----------+----------
0 | 0
(1 row)
postgres=# analyze test;
ANALYZE
postgres=# select reltuples ,relpages from pg_class where relname='test';
reltuples | relpages
-----------+----------
10 | 1
(1 row)

pg_stats

postgres=# \d pg_stats
View "pg_catalog.pg_stats"
Column | Default
------------------------+---------
schemaname |---模式名
tablename |---表名
attname |---列名
inherited |---是否是继承列
null_frac |---null空值的比率
avg_width |---平均宽度,字节
n_distinct |---大于零就是非重复值的数量,小于零则是非重复值的个数除以行数
most_common_vals |---高频值
most_common_freqs |---高频值的频率
histogram_bounds |---直方图
correlation |---物理顺序和逻辑顺序的关联性
most_common_elems |---高频元素,比如数组
most_common_elem_freqs |---高频元素的频率
elem_count_histogram |---直方图(元素)
postgres=# select * from pg_stats where tablename = 'test';
-[ RECORD 1 ]----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
schemaname | public
tablename | test
attname | id
inherited | f
null_frac | 0
avg_width | 4
n_distinct | -1
most_common_vals |
most_common_freqs |
histogram_bounds | {2,1004,1945,2951,3935,4904,5864,6882,7944,8991,9967,11026,12062,13119,14101,15059,16028,17091,18116,19005,20121,21154,22095,23067,24046,25032,26045,27032,28000,28978,30002,31001,31938,32963,33996,35000,36029,36982,37853,38780,39847,40867,41818,42842,43864,44909,45933,46872,47847,48777,49678,50709,51723,52644,53604,54688,55644,56614,57631,58710,59784,60796,61786,62746,63797,64790,65807,66756,67799,68802,69758,70755,71873,72815,73883,74879,75922,76976,78057,79014,80088,81020,81982,82954,83979,85008,86015,86961,87903,88860,89871,90933,92005,92983,93921,94905,95952,96964,97986,98943,100000}
correlation | 1
most_common_elems |
most_common_elem_freqs |
elem_count_histogram |

从上可以得到

n_distinct是-1,表示在某一列中的非重复值与总行数相同

null_frac为0,表示没有null值

most_common_vals:MCV,高频值列表,此例因为是顺序插入的,数据分布均匀,所以没有高频值

most_common_freqs:MCF,高频值的频率

histogram_bounds:直方图,表示该字段除了高频值以外值的的柱状图信息,直方图中的数据不包含MCV/MCF的部分,两者的值是补充关系而且不会重合,但不一定互补(两种加起来未必是全部数据),用于将对应列的值划分为多个分组。

correlation:值的物理顺序和逻辑顺序的关联度,-1到1之间,1表示逻辑顺序与存储的物理顺序相同,-1表示逻辑顺序与存储的物理顺序相反


统计信息收集配置

postgres=# select name,setting from pg_settings where name like '%track%';
name | setting
---------------------------+---------
track_activities | on
track_activity_query_size | 1024
track_commit_timestamp | off
track_counts | on
track_functions | none
track_io_timing | off
(6 rows)

• track_activities: 是否收集当前正在执行的SQL,默认为on
• track_counts: 是否收集表和索引上的统计信息,默认为on
• track_functions: 可以取all、pl和none,如果是pl则只收集pl/pgsql写的函数的统计信息;
all表示收集所有类型的函数,包括C语言和SQL写的函数。默认为none
• track_io_timing: 是否收集I/O的时间信息。一般不建议打开,默认为off


统计信息收集进程

统计信息收集进程 stats collector 放入表 pg_stat_all_tables

在运行时放入 统计信息存放位置$PGHOME/pg_stat_tmp

持久化统计信息 $PGHOME/pg_stat(在关闭库的时候会拷贝到这个位置)



常用

pg_backend_pid() 
处理当前会话的服务器进程的进程 ID

select pg_backend_pid();
pg_backend_pid
----------------
32002
(1 row)
pg_stat_reset() 
把用于当前数据库的所有统计计数器重置为零
(默认要求超级用户权限,但这个函数的 EXECUTE 可以被授予给其他人)。

select pg_stat_reset();
\conninfo
\set ECHO_HIDDEN on

其他视图

各个对象级别的统计信息视图:
pg_stat_database
pg_stat_all_tables
pg_stat_sys_tables
pg_stat_user_tables
pg_stat_all_indexes
pg_stat_sys_indexes
pg_stat_user_indexes

各个对象上发生I/O情况的统计视图:
pg_statio_all_tables
pg_statio_sys_tables
pg_statio_user_tables
pg_statio_all_indexes
pg_statio_sys_indexes
pg_statio_user_indexes
pg_statio_all_sequences
pg_statio_sys_sequences
pg_statio_user_sequences

标签:stat,--,数据库,---,common,track,PG,analyze,pg
From: https://blog.51cto.com/u_13874232/5729937

相关文章

  • (四)MySQL基础知识之union和排序
    继续连着昨天数据库的基本操作,今天看下MySQL的union功能和排序 union:UNION操作符用于连接两个以上的SELECT语句的结果组合到一个结果集合中。如果多个SELECT语句会......
  • SpringBoot--解决子线程无法获得HttpServletRequest的attribute的问题
    ​简介    本文介绍解决SpringBoot子线程无法获得HttpServletRequest的attribute的问题。    在SpringBoot请求中,如果创建了子线程获取request的attribute,......
  • SpringBoot--手动校验@NotBlank、@NotNull等的工具类
    ​简介说明        本文介绍手动校验@NotBlank、@NotNull等的工具类。    使用场景:controller接口的入参很多,需要他人提供,但他人提供的类的字段很多,字段都......
  • SpringBoot--解决@Transactional与@CacheEvict联合使用导致的缓存与数据库的一致性问
    ​简介说明    本文介绍@Transactional与@CacheEvict联合使用导致的缓存与数据库的一致性问题的原因及解决方案。注解的作用        @Transactional:给当前......
  • 智慧农业系统 - 可视化大屏(Echarts)&管理系统(HTTP(S)协议)&物联网平台(MQTT协议)
    一、平台功能特点农业数据实时监控,实时视频监控,历史数据分析;支持电子地图,设备地理位置精确定位;支持多级组织结构管理,满足集团大客户需求;可视化大屏展示,数据指标一目了然,彰显......
  • 玩转 Flowable 流程实例
    文章目录​​1.捋清三个概念​​​​2.五种流程启动方式​​​​3.简单实践​​​​4.删除流程实例​​​​5.获取运行的活动节点​​​​上篇文章​​松哥和大家聊了......
  • Go的Struct结构体和(Json Form tag)
    Go的Struct结构体和(JsonFormtag)1.Struct1.1定义使用struct关键字可以定义一个结构体,结构体中的成员,称为结构体的字段或属性。typeMemberstruct{idin......
  • 视图集
    两个视图基类1.drf提供了一个顶层的视图APIView,可以通过继承APIView写视图,之后我们写的代码可能重复代码比较多,就可以使用面向对象的继承、封装,GenericAPIView继承了APIVi......
  • Docker中实现macvlan的穿透访问
    需求因为性能等原因,我们需要用macvlan方式部署container而kernel中有关macvlan的安全策略会完全过滤来自host访问host想要访问container服务端口很不方便。破解实现ho......
  • 洛谷 P3388 【模板】割点(割顶)
    题目链接:https://www.luogu.com.cn/problem/P3388 【模板】割点(割顶)题目背景割点题目描述给出一个$n$个点,$m$条边的无向图,求图的割点。输入格式第一行输入两个......