PostgreSQL统计信息的几个重要视图_pg_stat_user_tables_yzs87的博客-程序员秘密

技术标签: PostgreSQL运维  

1、pg_stat_database

yzs=# select *from pg_stat_database;
-[ RECORD 1 ]--+------------------------------
datid          | 13156                            #数据库的oid
datname        | postgres                         #数据库名
numbackends    | 0                                #访问当前数据库的连接数量
xact_commit    | 2357                             #该数据库事务提交总量:和下面的rollback和作为TPS统计
xact_rollback  | 17                               #该数据库事务rollback总量,如果特别多,需要看业务是否有问题了
blks_read      | 1946                             #总磁盘物理读的块数,这里的read可能是从 cache中读取,如果很高需要结合blk_read_time看是否真的存在从磁盘读取的情况
blks_hit       | 103625                           #从shared buffer命中块数
tup_returned   | 1413113                          #对于表来说,是全表扫描的行数;对于索引是通过索引返回的索引行数,如果这个值明显大于tup_fetched,说明当前数据库存在大量的全表扫描。查看执行计划,这个是databas全局级别的
tup_fetched    | 36041                            #指通过索引返回的行数
tup_inserted   | 104                              #插入的行数
tup_updated    | 0                                #更新的行数
tup_deleted    | 19                               #删除的行数
conflicts      | 0                                #与恢复冲突取消的查询次数,只会在备机上发生
temp_files     | 0                                #产生临时文件的数量,如果这个值很高,需要调大work_mem
temp_bytes     | 0                                #临时文件的大小
deadlocks      | 0                                #死锁的数量,如果这个值很大说明业务逻辑有问题
blk_read_time  | 0                                #数据库中花费在读取文件的时间,这个值很高说明内存较小,需要频繁从磁盘读入数据文件
blk_write_time | 0                                #数据库中花费在写数据文件的时间,pg中脏页一般写入page cache,如果这个值较高,则说明cache较小,操作系统的cache需要更积极的写入
stats_reset    | 2019-02-11 23:42:37.526743-08    #统计信息重置的时间

通过pg_stat_database可以大概了解数据库的历史情况。
比如tup_returned值明显大于tup_fetched,历史SQL语句很多是全表扫描,存在没有使用索引的SQL,可结合pg_stat_statments查找慢SQL,也可结合pg_stat_user_table找全表扫描次数和行数最多的表;
通过看tup_updated很高,可以说明数据库有频繁的更新,这个时候需要关注vaccum相关的指标和长事务,如果没有及时进行垃圾回收,会引起表膨胀;
temp_files较高说明存在很多排序,hash,或者聚合这种操作,可以增大work_mem减少临时文件的产生,并且同时这些操作的性能也会有较大的提升。

2、pg_stat_user_tables

yzs=# select *from pg_stat_user_tables;
-[ RECORD 1 ]-------+------------------------------
relid               | 16440        #表oid
schemaname          | public       #模式名
relname             | t1           #表名
seq_scan            | 50           #这个表进行全表扫描的次数
seq_tup_read        | 1867763      #全表扫描的数据行数,如果这个值很大说明操作这个表的SQL语句很可能是全表扫描,需要结合执行计划分析
idx_scan            |              #索引扫描的次数
idx_tup_fetch       |              #通过索引扫描返回的行数
n_tup_ins           | 1130502      #插入的数据行数
n_tup_upd           | 0            #更新的数据行数
n_tup_del           | 81920        #删除的数据行数
n_tup_hot_upd       | 0            #hot update的数据行数,这个值与n_tup_upd接近说明更新性能较好,不需要更新索引
n_live_tup          | 655366       #活的行数量
n_dead_tup          | 0            #死记录个数
n_mod_since_analyze | 6            #上次analyze的实际
last_vacuum         | 2019-04-07 00:22:00.955542-07 #上次手动vacuum的实际
last_autovacuum     |              #上次autovacuum的实际
last_analyze        |              #上次analyze时间
last_autoanalyze    | 2019-04-07 00:26:07.668391-07 #上次自动analyze时间
vacuum_count        | 2            #vacuum次数
autovacuum_count    | 0            #自动vacuum次数
analyze_count       | 0            #analyze次数
autoanalyze_count   | 10           #自动analyze次数

通过查询pg_stat_user_tables,可以基本清除哪些表的全表扫描次数较多,表中DML哪种操作多,也可以了解垃圾数据的数量。

3、pg_stat_user_indexes

yzs=# select *from pg_stat_user_indexes;
-[ RECORD 1 ]-+----------
relid         | 16447      #相关表的oid
indexrelid    | 16450      #索引的oid
schemaname    | public     #模式名
relname       | t3         #表名
indexrelname  | t3_id_idx  #索引名
idx_scan      | 0          #通过索引扫描的次数,如果该值很小,说明该索引很少被用到,可以考虑删除
idx_tup_read  | 0          #通过任意索引方法返回的索引行数
idx_tup_fetch | 0          #通过索引方法返回的数据行数

可以知道当前哪些索引频繁使用,哪些是无效索引。无效索引可以删除掉,减少磁盘空间的使用和提升insert、delete、update的性能。

4、pg_statio_user_tables

yzs=# select *from pg_statio_user_tables;
-[ RECORD 1 ]---+--------
relid           | 16447    
schemaname      | public
relname         | t3
heap_blks_read  | 1    #从page cache或磁盘读取表的块数
heap_blks_hit   | 1    #从shared buffer命中的块数
idx_blks_read   | 0    #从page cache或磁盘读取的索引的块数
idx_blks_hit    | 0    #从shared buffer命中的索引块数
toast_blks_read |      #从page cache或磁盘读取的toast表的块数
toast_blks_hit  |      #在shared buffer中命中toast表的块数
tidx_blks_read  |      #从page cache或者磁盘中读入的toast表索引的块数
tidx_blks_hit   |      #在shared buffer中命中toast表索引的块数

如果heap_blks_read、idx_blks_read很高,说明shared buffer较小,存在频繁从磁盘或者page cache读取到shared buffer中命中toast表的块数。

5、 pg_stat_bgwriter

yzs=# select *from pg_stat_bgwriter;
-[ RECORD 1 ]---------+------------------------------
checkpoints_timed     | 206     #指超过checkpoint_timeout的时间后触发的检查点次数
checkpoints_req       | 8       #手动触发checkpoint或者因为WAL文件数量达到max_wal_size时也会增加,如果这个值大于checkpoints_req说明checkpoint_timeout设置的不合理
checkpoint_write_time | 306582  #从shared buffer 中write到page cache花费的时间
checkpoint_sync_time  | 367     #checkpoint调用fsync将脏数据刷到磁盘花费的时间,如果这个值很长,容易造成IO抖动,需要增加checkpoint_timeout或者checkpoint_completion_target
buffers_checkpoint    | 6671    #通过checkpoint写入脏块的数量
buffers_clean         | 0       #通过bgwriter写入块的数量
maxwritten_clean      | 0       #bgwriter超过bgwriter_lru_maxpages时停止的次数,如果这个值很高,需要增加bgwriter_lru_maxpages
buffers_backend       | 7953    #通过backend写入的块数量
buffers_backend_fsync | 0       #backend需要fsync的次数
buffers_alloc         | 11613   #被分配的缓冲区数量
stats_reset           | 2019-02-11 23:42:35.273758-08

通过这个视图,可以判断checkpoint以及max_wal_size是否合理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanzongshuai/article/details/89786297

智能推荐

spring定时任务详解spring schedule和spring-quartz_spring 定时任务_赶路人儿的博客-程序员秘密

从实现的技术上来分类,java定时任务目前主要有三种:Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行;而且作业类需要集成java.util.TimerTask,一般用的较少。 Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照...

做软件架构设计,这个好用的画图工具推荐给你_软件架构怎么画_网络技术开发笔记的博客-程序员秘密

前面写了两篇软件架构设计的文章,今天Relax想跟大家聊一聊如何通过具体的工具去画出软件架构设计中的那些图,那么今天主要给大家分享的是一个好用的架构设计画图工具——Enterprise Architect(后面都简称EA)。前面说了Relax平时主要用到了类图、构件图、部署图、用例图和序列图五种图,所以这篇文章主要是想比较详细的说明如何通过EA画出这些图。安装好EA后,打开EA新建一个工程,选...

SpringBoot报错Error running ‘Application‘: Command line is too long.Shorten command line for XXX_TFHoney的博客-程序员秘密

问题背景:在导入一个Gradle项目的最后一步,我都准备欢呼了,结果报了这么一个错误问题描述:Error running 'Application':Command line is too long.Shorten command line for Application or also for Spring Boot default configuration.问题原因:springboot项目运行命令过长解决办法:点击项目启动配置项 -> shorten comm

Python_API_Generic Operating System Services_os.environ_lyle2000w的博客-程序员秘密

os.environ是系统上定义的环境变量的字典例子:import osprint os.environ输出{'TMP': 'C:\\Users\\LYLE20~1\\AppData\\Local\\Temp', 'COMPUTERNAME': 'LENOVO-PC', '1830B7BD-F7A3-4C4D-989B-C004DE465EDE': '17a4:

33、串的模式匹配-Brute-Force算法_hopegrace的博客-程序员秘密

一、与串相关的概念1、串(或字符串)是由零个或多个字符组成的有限序列。一般记作:s=〃c0c1c2…cn-1〃(n≥0)。零个字符的串称为空串,通常以两个相邻的双引号来表示空串,仅由空格组成的的串称为空格串,如:s=〃〃;2、串与线性表的异同。字符串一般简称为串,可以将它看作是一种特殊的线性表,这种线性表的数据元素的类型总是字符型的,字符串的数据对象约束为字符集。在线性表的基本操...

WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码_walter lv的博客-程序员秘密

HLSL,High Level Shader Language,高级着色器语言,是 Direct3D 着色器模型所必须的语言。WPF 支持 Direct3D 9,也支持使用 HLSL 来编写着色器。你可以使用任何一款编辑器来编写 HLSL,但 Shazzam Shader Editor 则是专门为 WPF 实现像素着色器而设计的一款编辑器,使用它来编写像素着色器,可以省去像素着色器接入到 WPF ...

随便推点

复现Reasoning with Heterogeneous Graph Alignment for Video Question Answering_Mighty_Crane的博客-程序员秘密

首先tgif数据集里没有Vocabulary,所以换用gif数据集No module named ‘colorlog’pip install colorlogNo module named ‘block’pip install block.bootstrap.pytorchordinal not in range(128)调了半天utf编码啥的都不行,结果全都改回去了反而就可以跑了AttributeError: Can’t get attribute ‘_init_fn’ on <mod

第十四周项目三——多科成绩单(1&2)_Timor7hao的博客-程序员秘密

问题及代码:/** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:Project4.cpp* 作 者:陈旭* 完成日期:2014年11月30日* 版 本 号:v1.0** 问题描述:某班不超过100名同学。用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩(在此假设

vim编辑器强制退出,文件变为只读怎么办?_为什么vi打开的文件只读_当白的博客-程序员秘密

有两种情况会生成只读1.用多个程序编写同一个文件(这种情况就让它保持只读就可以了)2.vim非常规退出原因:因为每次用vim打开一个文件,都会生成.(filename).swp文件以备不测,如果正常退出,该文件就会删除,如果非常规退出,swp文件存在,就会变成只读状态如何解决:1.恢复文件vi -r  文件名.后缀2.删除swp文件rm   .文件名.后缀.swp...

linux_2.6.30.4_Makefile_4--make zImage流程_NO_007的博客-程序员秘密

http://blog.chinaunix.net/uid-26009923-id-3194580.html    分析一下make zImage的流程,具体的操作是:首先将linux-2.6.30.4/config_EmbedSky_W35_256MB改名为.config,然后make zImage.看一下make zImage之后发生了什么事情。点击(此处)折叠或打开

通过css修改border-bottom的长度_css border-bottom长度_人比黄花嗖的博客-程序员秘密

在开发过程中经常会遇到容器的宽度为100%,但是却需要他的border为它的长度减去padding之后的长度,通过研究发现可以使用伪类实现该效果,代码如下:.examPaper_header::after { content: ''; width: 100%; height: 1px; display: block; margin: 0 auto; border-bottom: 1px solid rgba(0, 0, 0, 0.09);}...

linux0.11 elf文件,调试在64位Debian上编译好的Linux 0.11(一)_weixin_39771791的博客-程序员秘密

调试在64位Debian上编译好的Linux 0.11(一)本机环境:SMP Debian 3.11.6-1 (2013-10-27) x86_64 GNU/Linuxgcc (Debian 4.8.2-5) 4.8.2GNU assembler (GNU Binutils for Debian) 2.23.90.20131116GNU ld (GNU Binutils for Debian) 2...

推荐文章

热门文章

相关标签