百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

PostgreSQL统计信息的几个重要视图

toyiye 2024-06-21 12:23 9 浏览 0 评论

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是否合理

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码