PG统计信息和系统表
一、PG统计信息概述
pg的统计信息主要分为两种:
第一类统计信息是是负载指标“统计信息”(Monitoring stats),通过stat collector进程进行实时采集更新的负载指标,记录一些对磁盘块、表、索引相关的统计信息,SQL语句执行代价信息等。
第二类统计信息是数据分布状态描述“统计信息”(Data distribution stats),这些统计信息为优化器选择最优执行计划提供依据。该类统计信息采集的方式有两种:
- 后台进程autovacuum lancher触发的统计信息采集
autovacuum : 历史无效数据、冻结事务、xid信息的清理都是由该进程处理。
vacuum : 标准形式的 vacuum 可以和生产数据库操作并行运行(select、insert、update、delete等命令将继续正常工作,但在清理期间你无法使用alter table等命令来更新表的定义)。
vacuum full : vacuum full 类似于表的重建或者说碎片整理,以收回更多磁盘空间但是运行起来更慢,而且vacuum full操作执行期间无法和对此表上的其他操作并发执行。vacuum full不会有后台进程主从触发(只能手动执行)。
- 手动执行analyze table进行手动采集更新统计信息
二、负载指标统计信息
1、pg_stat_database 指标含义
通过pg_stat_database我们可以大致的了解一个数据库的历史运行情况,比较常见的一个问题定位有:
当tup_returned值远大于tup_fetched时,说明该数据库下存在较多全表扫描SQL,结合pg_stat_statments来定位具体慢SQL或者结合pg_stat_user_tables来定位全表扫描相关表
当tup_updated的数值比较大时,说明数据库有很频繁的更新,这个时候就需要关注一下vacuum相关的指标和长事务,如果没有及时进行垃圾回收会造成数据膨胀的比较厉害,一定程度会响应表查询效率
当temp_files的数值比较大时,说明存在很多的排序,hash,或者聚合这种操作,可以通过增大work_mem减少临时文件的产生,并且同时这些操作的性能也会有较大的提升
2、pg_stat_user_tables 指标含义
通过 pg_stat_user_tables,我们可以知道当前数据库下哪些表发生全表扫描频繁,哪些表变更比较频繁,对于变更较频繁的表可多关注其vacuum相关的指标,避免表膨胀。
3、pg_stat_user_indexes 指标含义
通过pg_stat_user_indexes我们可以查看对应索引的使用情况,可以协助我们判断哪些索引当前基本不使用,对这些无效的冗余索引,可进行索引删除。
4、pg_statio_user_tables 指标含义
通过对pg_statio_user_tables的查询,如果heap_blks_read,idx_blks_read很高说明shared_buffer较小,存在频繁需要从磁盘或者page cache读取到shared_buffer中。
5、pg_stat_bgwriter 指标含义
6、pg_stat_replication 指标含义
pg_stat_replication仅仅在主从架构下才会显示相关数据。根据对pg_stat_replication表的查询可以查看当前复制的模式、复制配置信息、复制位点信息等。
7、pg_stat_statement 指标含义
pg_stat_statements模块提供一种跟踪执行统计服务器执行的所有SQL语句的手段。该模块默认是不开启的,如果需要开启需要我们手动对其进进行编译安装,修改配置文件并重启数据库,并在使用前手动载入该模块。
8、pg_stat_activity视图
9、pg_statio_all_tables
pg_statio_all_tables视图将为当前数据库中的每个表(包括 TOAST 表)包含一行,该行显示指定表上有关 I/O 的统计信息。pg_statio_user_tables和pg_statio_sys_tables视图包含相同的信息,但是被过滤得分别只显示用户表和系统表。
10、pg_statio_all_indexes
pg_statio_all_indexes视图将为当前数据库中的每个索引包含一行,该行显示指定索引上有关 I/O 的统计信息。pg_statio_user_indexes和pg_statio_sys_indexes视图包含相同的信息,但是被过滤得分别只显示用户索引和系统索引。
11、pg_stat_database
12、pg_stat_user_tables
通过查询pg_stat_user_tables,可以基本清除哪些表的全表扫描次数较多,表中DML哪种操作多,也可以了解垃圾数据的数量。
三、数据分布类统计信息
1、pg_stats
通过对pg_stats的查询,可以查看每个字段的数据分析统计信息,类似SQL Server的直方图,为优化器选择最佳执行计划提供依据,pg_stats只有管理员账号才可以访问。
2、pg_statistic
pg_statistic 是基于pg_stats的视图,以更加友好以及可读的方式展现统计信息,普通用户可以访问。
PG统计信息和系统表的更多相关文章
- SQL Server统计信息偏差影响表联结方式案例浅析
我们知道数据库中的统计信息的准确性是非常重要的.它会影响执行计划.一直想写一篇关于统计信息影响执行计划的相关博客,但是都卡在如何构造一个合适的例子上,所以一直拖着没有写.巧合,最近在生产环境中遇到 ...
- Oracle收集对表收集统计信息导致全表扫描直接路径读?
direct path read深入解析 前言 最近碰到一件很奇葩的事情,因为某条SQL执行缓慢,原因是走了笛卡尔(两组大数据结果集),而且笛卡尔还是NL的一个部分,要循环31M次. 很容易发现是统计 ...
- Oracle—表、约束、索引、表空间、分区、序列、统计信息
表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...
- SQL Server信息偏差影响表联结方式统计
SQL Server统计信息偏差影响表联结方式案例浅析 我们知道数据库中的统计信息的准确性是非常重要的.它会影响执行计划.一直想写一篇关于统计信息影响执行计划的相关博客,但是都卡在如何构造一个合适 ...
- 分析Hive表和分区的统计信息(Statistics)
类似于Oracle的分析表,Hive中也提供了分析表和分区的功能,通过自动和手动分析Hive表,将Hive表的一些统计信息存储到元数据中. 表和分区的统计信息主要包括:行数.文件数.原始数据大小.所占 ...
- SQL SERVER 统计信息概述(Statistics)
前言 查询优化器使用统计信息来创建可提高查询性能的查询计划,对于大多数查询,查询优化器已经为高质量查询计划生成必要的统计信息,但是在少数情况下,您需要创建附加的统计信息或者修改查询设计以得到最佳结果. ...
- 收集oracle统计信息
优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...
- MySQL 统计信息
200 ? "200px" : this.width)!important;} --> 介绍 数据库维护统计信息的目的主要是为了优化器进行更好的执行优化,首先统计信息是建立在 ...
- 全废话SQL Server统计信息(2)——统计信息基础
接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...
- ORACLE收集统计信息
1. 理解什么是统计信息 优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: · ...
随机推荐
- 前端入门 HTTP协议 HTML简介 head内常见标签 body内常见标签 特殊符号 列表标签 表格标签 表单标签
目录 前端和后端的概念 前端前戏之B/S架构 数据交互的协议 HTTP协议 1.四大特性 1. 基于请求响应 2. 基于TCP.IP作用与应用层之上的协议 3. 无状态 4. 无\短连接 2.数据格式 ...
- centos7安装MySql8.0.29教程
个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying @ 目录 1 安装之前检测系统是否有自带的MySQ ...
- java中继承的内存分析
本文主要讲述java中继承的内存分析. 示例1,代码如下: public class EncapsulationTest { public static void main(String[] args ...
- nuxt.js中引入lib-flexible 和 postcss-px2rem 实现pc自适应
最近一个需要用nuxt框架实现的pc自适应项目,从网上找了很多资料,最终完美实现 一.下载相关插件 npm i lib-flexible -Snpm i px2rem-loader -Dnpm ins ...
- nuxt.js中登录、注册(密码登录和手机验证码登录)
<!-- 登录弹框 --> <div class="mask" v-show="flag"> <div class="m ...
- 6、SQL模糊查询LIKE concat用法
concat用来拼接查询的字符串: SELECT * FROM `page_demo` WHERE name LIKE concat('%',#{name},'%') 模糊查询: 1.%代表零个或多个 ...
- Junti单元测试
Junit单元测试 ## 测试分类 黑盒测试,白盒测试 黑盒测试,不需要写代码,给输入值,看程序是否能够输出期望的值 白盒测试,需要写代码的,关注程序的具体执行流程 Junit使用 是白盒测试 ### ...
- Linux 环境中使用 LVGL
之前有记录过在 esp32 中使用 LVGL 的笔记,需要的小伙伴可以了解一下,esp-idf 移植 lvgl8.3.3 我之前整理的学习资料:https://www.cnblogs.com/jzcn ...
- 贪心算法Dijkstra
Dijkstra 最短路径问题 : 给定一个带权有向图 G = (V, E, W),同时给定一个源点 u (u ∈ V),我们要找出从源点 u 出发到其它各点的最短路径距离,并得出这些最短路径的具体路 ...
- 使用Jiralert实现AlertManager告警对接Jira
简介 Alertmanager 处理由客户端应用程序(如 Prometheus server)发送的警报.它负责去重(deduplicating),分组(grouping),并将它们路由(routin ...