PG的统计信息(二)

太阳11个月前技术文章233

1.2.4 pg_statio_user_tables 指标含义

通过对pg_statio_user_tables的查询,如果heap_blks_read,idx_blks_read很高说明shared_buffer较小,存在频繁需要从磁盘或者page cache读取到shared_buffer中。

db1=# select * from pg_statio_user_tables where relname='t1';
-[ RECORD 1 ]---+-------
relid           | 17087             //相关表oid
schemaname      | public            //schema模式
relname         | t1                //表名
heap_blks_read  | 54                //指从page cache或者磁盘中读入表的块数
heap_blks_hit   | 13620             //指在shared_buffer中命中表的块数
idx_blks_read   | 16                //指从page cache或者磁盘中读入索引的块数
idx_blks_hit    | 19536             //在shared_buffer中命中的索引的块数
toast_blks_read | 0                 //从page cache或者磁盘中读入toast表的块数
toast_blks_hit  | 0                 //指在shared_buffer中命中toast表的块数
tidx_blks_read  | 0                 //从page cache或者磁盘中读入toast表索引的块数
tidx_blks_hit   | 0                 //指在shared_buffer中命中toast表索引的块数

1.2.5 pg_stat_bgwriter 指标含义

db1=# select * from pg_stat_bgwriter;
-[ RECORD 1 ]---------+------------------------------
checkpoints_timed     | 9208                        //指超过checkpoint_timeout的时间后触发的检查点
checkpoints_req       | 18                          //指手动触发的检查点或者因为wal文件数量到达max_wal_size大小时也会增加,如果这个值大于checkpoints_timed,说明checkpoint_timeout设置的不合理。
checkpoint_write_time | 1404403                     //指从shared_buffer中write到page cache花费的时间
checkpoint_sync_time  | 980                         //指checkpoint调用fsync将脏数据同步到磁盘花费的时间,如果这个时间很长容易造成IO的抖动,这时候需要增加checkpoint_timeout或者增加checkpoint_completion_target。
buffers_checkpoint    | 19861                       //checkpoint写入的脏块的数量
buffers_clean         | 1868                        //通过bgwriter写入的块的数量
maxwritten_clean      | 0                           //指bgwriter超过bgwriter_lru_maxpages时停止的次数,如果这个值很高说明需要增加bgwriter_lru_maxpages的大小
buffers_backend       | 404509                      //通过backend写入的块数量
buffers_backend_fsync | 0                           //指backend需要fsync的次数
buffers_alloc         | 54296                       //被分配的缓冲区数量
stats_reset           | 2020-09-23 15:14:57.052247+08

1.2.6 pg_stat_replication 指标含义

pg_stat_replication仅仅在主从架构下才会显示相关数据。根据对pg_stat_replication表的查询可以查看当前复制的模式、复制配置信息、复制位点信息等。

postgres=# select * from pg_stat_replication ;
-[ RECORD 1 ]----+------------------------------
pid              | 15040                    //负责流复制进程的pid
usesysid         | 16384                    //用户ID
usename          | repl                     //复制用户
application_name | walreceiver              //这是同步复制的通常设置,它可以通过连接字符串传递到master。
client_addr      | 192.168.1.171            //客户端地址
client_hostname  |                          //客户端主机名称,可在postgres.conf中对log_hostname参数设置,启动DNS反向查找
client_port      | 58690                    //客户端用来和WALsender进行通信使用的TPC端口号,如果不本地UNIX套接字被使用了将显示-1。
backend_start    | 2020-09-05 13:42:30.108815+08    //流复制开始时间
backend_xmin     |
state            | streaming                //复制模式
sent_lsn         | 0/3000148                //发送到连接的最后的位点
write_lsn        | 0/3000148                //standby数据库落盘的位点
flush_lsn        | 0/3000148                //standby数据库flush的位点
replay_lsn       | 0/3000148                //standby数据库重放的位点
write_lag        |                          //写延迟间隙
flush_lag        |                          //flush延迟间隙
replay_lag       |                          //重放延迟间隙
sync_priority    | 0                        //复制优先级权重
sync_state       | async                    //同步模式,同步or异步
reply_time       | 2020-09-05 13:49:41.269624+08    //

1.2.7 pg_stat_statement 指标含义

pg_stat_statements模块提供一种跟踪执行统计服务器执行的所有SQL语句的手段。该模块默认是不开启的,如果需要开启需要我们手动对其进进行编译安装,修改配置文件并重启数据库,并在使用前手动载入该模块。

1、手动安装加载pg_stat_statement模块

- 进入pgsql软件的contrib目录下,查看是否有pg_stat_statements相关模块
# pwd
/usr/local/postgresql-12.2/contrib
# ls | grep pg_stat_statements
pg_stat_statements
-- 进入pg_stat_statement模块目录下进行编译安装
# make && make install
-- 检查pg_stat_statement是否安装成功
# cd /usr/local/pgsql/share/extension/
# ll | grep pg_stat_statements
-rw-r--r-- 1 root root  1246 10月 25 15:46 pg_stat_statements--1.0--1.1.sql
-rw-r--r-- 1 root root  1336 10月 25 15:46 pg_stat_statements--1.1--1.2.sql
-rw-r--r-- 1 root root  1454 10月 25 15:46 pg_stat_statements--1.2--1.3.sql
-rw-r--r-- 1 root root   345 10月 25 15:46 pg_stat_statements--1.3--1.4.sql
-rw-r--r-- 1 root root   305 10月 25 15:46 pg_stat_statements--1.4--1.5.sql
-rw-r--r-- 1 root root  1427 10月 25 15:46 pg_stat_statements--1.4.sql
-rw-r--r-- 1 root root   376 10月 25 15:46 pg_stat_statements--1.5--1.6.sql
-rw-r--r-- 1 root root   806 10月 25 15:46 pg_stat_statements--1.6--1.7.sql
-rw-r--r-- 1 root root   191 10月 25 15:46 pg_stat_statements.control
-rw-r--r-- 1 root root   449 10月 25 15:46 pg_stat_statements--unpackaged--1.0.sql
-- 修改配置文件
# vi postgres.conf
shared_preload_libraries='pg_stat_statements,pg_pathman'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
-- 重启数据库
# su - postgres
$ pg_ctl -D /data/pgsql12/data restart
-- 登录数据库,载入pg_stat_statement模块
postgres=# SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements';               //查看可用模块
-[ RECORD 1 ]-----+----------------------------------------------------------
name              | pg_stat_statements
default_version   | 1.7
installed_version |
comment           | track execution statistics of all SQL statements executed
postgres=# create extension pg_stat_statements;         //载入模块,载入后pg_stat_statements表可正常使用
CREATE EXTENSION

2、pg_stat_statements 指标含义

postgres=# select * from  pg_stat_statements limit 1;
-[ RECORD 1 ]-------+------------------------------------------------------------------------
userid              | 10                        //用户id
dbid                | 13547                     //数据库oid
queryid             | 1194713979                //查询id
query               | SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements'   //查询SQL
calls               | 1                         //调用次数
total_time          | 53.363875                 //SQL总共执行时间
min_time            | 53.363875                 //SQL最小执行时间
max_time            | 53.363875                 //SQL最大执行时间
mean_time           | 53.363875                 //SQL平均执行时间
stddev_time         | 0                         //SQL花费时间的表中偏差
rows                | 1                         //SQL返回或者影响的行数
shared_blks_hit     | 1                         //SQL在在shared_buffer中命中的块数
shared_blks_read    | 0                         //SQL从page cache或者磁盘中读取的块数
shared_blks_dirtied | 0                         //SQL语句弄脏的shared_buffer的块数
shared_blks_written | 0                         //SQL语句写入的块数
local_blks_hit      | 0                         //临时表中命中的块数
local_blks_read     | 0                         //临时表需要读的块数
local_blks_dirtied  | 0                         //临时表弄脏的块数
local_blks_written  | 0                         //临时表写入的块数
temp_blks_read      | 0                         //从临时文件读取的块数
temp_blks_written   | 0                         //从临时文件写入的数据块数
blk_read_time       | 0                         //从磁盘或者读取花费的时间
blk_write_time      | 0                         //从磁盘写入花费的时间


标签: PostgreSQL

相关文章

REPMGR-PG高可用搭建(二)

REPMGR-PG高可用搭建(二)

REPMGR搭建步骤一、介绍repmgr是第二象限开源的一套流复制集群管理工具,用于管理PostgreSQL服务器群集中的复制和故障转移。 支持故障自动转移和手动切换;支持分布式管理集群节点,易扩展,...

PG的执行计划

一、Explain基本使用1.1 命令解释explain [ ( option [,...] ) ] statement explain [ analyze ] [ verbose ] statem...

PG的多版本并发控制(一)

PG的多版本并发控制(一)

一、 表系统字段几个比较重要概念1.1  tupletuple表示表中的数据行,在MySQL中用row表示。在表数据页中,主要分为普通的数据元祖和TOAST元祖。以下是一个普通数据元祖的结构,主要由三...

PG的analyze与vacuum

analyze-统计信息用于收集表的统计信息,只会对表加读锁,不影响表上其它SQL并发执行,对于大表只会读取表中部分数据 vacuum-碎片回收标记旧版本行的信息为可用,以重复使用这部分空间 更新统计...

PG的锁(二)

四、死锁PostgreSQL自动检测死锁情况并会自动回滚其中一个事务进行处理,从而其他事务完成。db1=# select * from t1 where id in (1,2,3);  id | i...

PG的锁(一)

一、表级锁1.1 表级锁模式常见锁模式以及应用场景:ACCESS SHARE :select操作获取该模式锁资源,通常情况下所有只读取不修改表的查询都会获取该模式锁资源ROW SHARE : sele...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。