广告
返回顶部
首页 > 资讯 > 服务器 >PostgreSQL 常用监控指标
  • 937
分享到

PostgreSQL 常用监控指标

postgresql数据库服务器 2023-09-01 05:09:29 937人浏览 泡泡鱼
摘要

背景 最关键的一些数据库健康指标,趋势监测。 1 总连接数 主要看趋势,直接与业务量挂钩 如果连接数接近max_connection水位,需要注意。 同时连接数应与数据库主机可用内存挂钩,每个连接保守

背景

最关键的一些数据库健康指标,趋势监测。

1 总连接数

主要看趋势,直接与业务量挂钩
如果连接数接近max_connection水位,需要注意。
同时连接数应与数据库主机可用内存挂钩,每个连接保守估计10MB内存开销(这里还未计算SYSCACHE,RELCACHE)。

select count(*) from pg_stat_activity ;

演示,打印每秒的总连接数。

psql    select count(*) from pg_stat_activity ;    \watch 1

2 N秒内新建的连接数

主要看趋势,直接与业务量挂钩
如果突发大量连接,可能是新增了业务服务器,或者是性能抖动过导致业务大量新建连接满足并发的请求。
突然连接数下降,可能原因是业务服务器突然释放连接,或者业务服务器挂了。

select count(*) from pg_stat_activity where now()-backend_start > '? second';

演示,打印每秒的5秒内新建连接数。

psql    select count(*) from pg_stat_activity where now()-backend_start > '5 second';    \watch 1

3 SQL活跃统计

需要加载pg_stat_statements,如果需要跟踪IO时间,需要开启track_io_timing。
同时需要注意,由于pg_stat_statements跟踪的SQL有限,最近未访问过的SQL的跟踪信息可能被抛弃。所以统计并不是非常的精准。

postgres=# \d pg_stat_statements                    View "public.pg_stat_statements"       Column        |       Type       | Collation | Nullable | Default ---------------------+------------------+-----------+----------+--------- userid              | oid              |           |          |  dbid                | oid              |           |          |  queryid             | bigint           |           |          |  query               | text             |           |          |  calls               | bigint           |           |          |  total_time          | double precision |           |          |  min_time            | double precision |           |          |  max_time            | double precision |           |          |  mean_time           | double precision |           |          |  stddev_time         | double precision |           |          |  rows                | bigint           |           |          |  shared_blks_hit     | bigint           |           |          |  shared_blks_read    | bigint           |           |          |  shared_blks_dirtied | bigint           |           |          |  shared_blks_written | bigint           |           |          |  local_blks_hit      | bigint           |           |          |  local_blks_read     | bigint           |           |          |  local_blks_dirtied  | bigint           |           |          |  local_blks_written  | bigint           |           |          |  temp_blks_read      | bigint           |           |          |  temp_blks_written   | bigint           |           |          |  blk_read_time       | double precision |           |          |  blk_write_time      | double precision |           |          |

3.1 QPS

QPS指标来自pg_stat_statements,由于这个插件有一个STATEMENT采集上限,可配置,例如最多采集1000条SQL,如果有新的SQL被采集到时,并且1000已用完,则会踢掉最老的SQL。所以我们这里统计的QPS并不是完全精确,不过还好PG内部会自动合并SQL,把一些条件替换成变量,这样即使不使用绑定变量,也能追踪到很多SQL。
对于业务SQL非常繁多并且大多数都是活跃SQL的场景,可以适当调大pg_stat_statements的track数,提高精准度。
除此之外,可以改进pg_stat_statements的功能,直接统计精准的QPS。
主要看趋势,直接与业务量挂钩

with                   a as (select sum(calls) s, sum(case when ltrim(query,' ') ~* '^select' then calls else 0 end) q from pg_stat_statements),   b as (select sum(calls) s, sum(case when ltrim(query,' ') ~* '^select' then calls else 0 end) q from pg_stat_statements , pg_sleep(1))   select   b.s-a.s,          -- QPS  b.q-a.q,          -- 读QPS  b.s-b.q-a.s+a.q   -- 写QPS  from a,b;

如果只想看QPS,使用

with                   a as (select sum(calls) s from pg_stat_statements),   b as (select sum(calls) s from pg_stat_statements , pg_sleep(1))   select   b.s-a.s          -- QPS  from a,b;

演示,打印每秒的QPS。

psql    with                   a as (select sum(calls) s from pg_stat_statements),   b as (select sum(calls) s from pg_stat_statements , pg_sleep(1))   select   b.s-a.s          -- QPS  from a,b;    \watch 0.000001

3.2 每秒处理了多少行

每秒处理了多少行,包括写入,读取,更新,删除等操作。

两次快照相减除以时间间隔sum(pg_stat_statements.rows)

3.3 共享缓冲区:每秒缓存命中、未命中读

shared_blks_hit     | bigint           |           |          |  shared_blks_read    | bigint           |           |          |

3.4 共享缓冲区:每秒产生多少脏页

shared_blks_dirtied | bigint           |           |          |

3.5 共享缓冲区:每秒异步write多少脏页

shared_blks_written | bigint           |           |          |

3.6 进程本地缓冲区:每秒缓存命中、未命中读

local_blks_hit      | bigint           |           |          |  local_blks_read     | bigint           |           |          |

3.7 进程本地缓冲区:每秒产生多少脏页

local_blks_dirtied  | bigint           |           |          |

3.8 进程本地缓冲区:每秒异步write多少脏页

local_blks_written  | bigint           |           |          |

3.9 临时文件每秒读

temp_blks_read      | bigint           |           |          |

3.10 临时文件每秒写

temp_blks_written   | bigint           |           |          |

3.11 两次快照之间的读数据块耗时

blk_read_time       | double precision |           |          |

3.12 两次快照之间的写数据块耗时

blk_write_time      | double precision |           |          |

4 active session

主要看趋势,直接与业务量挂钩
如果活跃会话数长时间超过CPU核数时,说明数据库响应变慢了,需要深刻关注。

select count(*) from pg_stat_activity where state='active';

演示,打印每秒的活跃会话数。

psql    select count(*) from pg_stat_activity where state='active';    \watch 1

5 平均RT

活跃会话/qps = RT(秒)

6 long query

当前系统中执行时间超过N秒的SQL有多少条,LONG QUERY与活跃会话的比例说明当前LONG SQL的占比。占比越高,说明该系统可能偏向OLAP,占比越低,说明该系统偏向OLTP业务。

select count(*) from pg_stat_activity where state='active' and now()-query_start > interval '? second';

演示,打印每秒系统中执行时间超过5秒的SQL有多少条。

psql    select count(*) from pg_stat_activity where state='active' and now()-query_start > interval '5 second';    \watch 1

7 long transaction

当前系统中N秒未结束的事务有多少条

select count(*) from pg_stat_activity where now()-xact_start > interval '? second';

演示,打印每秒系统中5秒未结束的事务有多少条

psql    select count(*) from pg_stat_activity where now()-xact_start > interval '5 second';    \watch 1

8 idle in transaction

当前系统中在事务中并且处于空闲状态的会话有多少,很多,说明业务端的处理可能比较慢,如果结合等待发现有大量锁等待,并且活跃会话数有突增,可能需要关注并排查业务逻辑的问题。

select count(*) from pg_stat_activity where state='idle in transaction';

演示,打印每秒系统中在事务中并且处于空闲状态的会话有多少

psql    select count(*) from pg_stat_activity where state='idle in transaction';    \watch 1

9 long idle in transaction

当前系统中,有多少长期(超过N秒)处于空闲的事务。如果有较多这样的事务,说明业务端的处理时间超过N秒的情况非常普遍,应该尽快排查业务。
比如前端开启了游标,等待用户的翻页动作,用户可能开小差了。又比如业务上使用了一些交互模式,等用户的一些输入等。
这种情况应该尽量避免,否则长时间占用连接资源。

select count(*) from pg_stat_activity where state='idle in transaction' and now()-state_change > interval '? second';

演示,打印每秒系统中在事务中并且处于空闲状态(超过5秒)的会话有多少

psql    select count(*) from pg_stat_activity where state='idle in transaction' and now()-state_change > interval '5 second';    \watch 1

10 waiting

当前系统中,处于等待中的会话有多少。
如果很多,说明出现了大量的锁等待,使用末尾文章进行排查。

select count(*) from pg_stat_activity where wait_event_type is not null;

演示,打印每秒系统中处于等待中的会话有多少。

psql    select count(*) from pg_stat_activity where wait_event_type is not null;    \watch 1

11 long waiting

当前系统中,等待超过N秒的会话有多少。

select count(*) from pg_stat_activity where wait_event_type is not null and now()-state_change > interval '? second';

演示,打印每秒系统中等待超过5秒的会话有多少。

psql    select count(*) from pg_stat_activity where wait_event_type is not null and now()-state_change > interval '5 second';    \watch 1

12 2pc

当前系统中,2PC的事务有多少。如果接近max_prepared_transactions,需要注意。建议调大max_prepared_transactions,或者排查业务是否未及时提交。

select count(*) from pg_prepared_xacts;

演示,打印每秒系统中未结束的2PC事务数。

psql    select count(*) from pg_prepared_xacts;    \watch 1

13 long 2pc

当前系统中,超过N秒未结束的2PC的事务有多少。如果很多,需要排查业务为什么未及时提交。

select count(*) from pg_prepared_xacts where now() - prepared > interval '? second';

演示,打印每秒系统中5秒仍未结束的2PC事务数。

psql    select count(*) from pg_prepared_xacts where now() - prepared > interval '5 second';     \watch 1

14 膨胀点监测 - 多久以前的垃圾可以被回收

时间间隔越大,说明越容易导致膨胀。
排查这几个方向,长事务,长SQL,2PC,持有SNAPSHOT的QUERY。必要时把不合理的老的会话干掉。

with a as (select min(xact_start) m from pg_stat_activity where backend_xid is not null or backend_xmin is not null), b as (select min(prepared) m from pg_prepared_xacts) select now()-least(a.m,b.m) from a,b;

演示,打印每秒系统中多久以前的垃圾可以被回收

psql    with a as (select min(xact_start) m from pg_stat_activity where backend_xid is not null or backend_xmin is not null), b as (select min(prepared) m from pg_prepared_xacts) select now()-least(a.m,b.m) from a,b;    \watch 1

15 空间

看当前占用情况,打快照,看时间维度空间变化情况。
按库划分

postgres=# \l+             List of databases     Name    |  Owner   | Encoding  |  Collate   |   Ctype    |   Access privileges   |  Size   | Tablespace |                Description                   -----------+----------+-----------+------------+------------+-----------------------+---------+------------+--------------------------------------------   postgres  | postgres | SQL_ASCII | en_US.UTF8 | en_US.UTF8 |                       | 54 GB   | pg_default | default administrative connection database   template0 | postgres | SQL_ASCII | en_US.UTF8 | en_US.UTF8 | =c/postgres          +| 7489 kB | pg_default | unmodifiable empty database             |          |           |            |            | postgres=CTc/postgres |         |            |    template1 | postgres | SQL_ASCII | en_US.UTF8 | en_US.UTF8 | =c/postgres          +| 578 MB  | pg_default | default template for new databases             |          |           |            |            | postgres=CTc/postgres |         |            |    test      | test     | SQL_ASCII | en_US.UTF8 | en_US.UTF8 |                       | 7489 kB | pg_default |   (4 rows)

按表空间划分

postgres=# \db+                          List of tablespaces          Name        |  Owner   |               Location               | Access privileges | Options |  Size   | Description   --------------------+----------+--------------------------------------+-------------------+---------+---------+-------------   dbt2_index1        | postgres | /data02/pg/tbs_tpcc/index1/ts        |                   |         | 452 MB  |    dbt2_index2        | postgres | /data02/pg/tbs_tpcc/index2/ts        |                   |         | 869 MB  |    dbt2_pk_customer   | postgres | /data02/pg/tbs_tpcc/pk_customer/ts   |                   |         | 451 MB  |    dbt2_pk_district   | postgres | /data02/pg/tbs_tpcc/pk_district/ts   |                   |         | 236 kB  |    dbt2_pk_item       | postgres | /data02/pg/tbs_tpcc/pk_item/ts       |                   |         | 2212 kB |    dbt2_pk_new_order  | postgres | /data02/pg/tbs_tpcc/pk_new_order/ts  |                   |         | 149 MB  |    dbt2_pk_order_line | postgres | /data02/pg/tbs_tpcc/pk_order_line/ts |                   |         | 4701 MB |    dbt2_pk_orders     | postgres | /data02/pg/tbs_tpcc/pk_orders/ts     |                   |         | 490 MB  |    dbt2_pk_stock      | postgres | /data02/pg/tbs_tpcc/pk_stock/ts      |                   |         | 1768 MB |    dbt2_pk_warehouse  | postgres | /data02/pg/tbs_tpcc/pk_warehouse/ts  |                   |         | 44 kB   |    pg_default         | postgres |          |                   |         | 46 GB   |    pg_global          | postgres |          |                   |         | 573 kB  |   (12 rows)

16 数据空间

数据占用的空间。

17 日志空间

WAL日志占用的空间。

18 备库发送延迟

select application_name,client_addr,client_hostname,client_port,state,sync_priority,sync_state,pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn)) from pg_stat_replication;

19 备库APPLY延迟

select application_name,client_addr,client_hostname,client_port,state,sync_priority,sync_state,pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lag)) from pg_stat_replication;

20 SLOT 延迟

select slot_name, plugin, slot_type, temporary, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) from pg_replication_slots;

21 归档延迟

最后一次归档失败时间减去最后一次归档成功的时间,求时间差。

select last_failed_time - last_arcHived_time from pg_stat_archiver;

22 数据库活动信息

以下都可以针对单个数据库输出,也可以输出整个实例的统计。

postgres=# \d pg_stat_database                       View "pg_catalog.pg_stat_database"       Column     |           Type           | Collation | Nullable | Default   ----------------+--------------------------+-----------+----------+---------   datid          | oid                      |           |          |    datname        | name                     |           |          |    numbackends    | integer                  |           |          |    xact_commit    | bigint                   |           |          |    xact_rollback  | bigint                   |           |          |    blks_read      | bigint                   |           |          |    blks_hit       | bigint                   |           |          |    tup_returned   | bigint                   |           |          |    tup_fetched    | bigint                   |           |          |    tup_inserted   | bigint                   |           |          |    tup_updated    | bigint                   |           |          |    tup_deleted    | bigint                   |           |          |    conflicts      | bigint                   |           |          |    temp_files     | bigint                   |           |          |    temp_bytes     | bigint                   |           |          |    deadlocks      | bigint                   |           |          |    blk_read_time  | double precision         |           |          |    blk_write_time | double precision         |           |          |    stats_reset    | timestamp with time zone |           |          |

22.1 每秒事务提交数

多次查询计算

select sum(xact_commit) from pg_stat_database;  -- pg_stat_get_db_xact_commit 为stable函数,一个事务中两次调用之间只执行一次,所以需要外部多次执行。

22.2 每秒事务回滚数

select sum(xact_rollback) from pg_stat_database;

22.3 每秒全表扫描记录数

select sum(tup_returned) from pg_stat_database;

22.4 每秒索引扫描回表记录数

select sum(tup_fetched) from pg_stat_database;

22.5 每秒插入记录数

select sum(tup_inserted) from pg_stat_database;

22.6 每秒更新记录数

select sum(tup_updated) from pg_stat_database;

22.7 每秒删除记录数

select sum(tup_deleted) from pg_stat_database;

22.8 备库查询冲突数

select sum(conflicts) from pg_stat_database;

22.9 死锁数

select sum(deadlocks) from pg_stat_database;

来源地址:https://blog.csdn.net/liuyunshengsir/article/details/129949008

--结束END--

本文标题: PostgreSQL 常用监控指标

本文链接: https://www.lsjlt.com/news/387541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PostgreSQL 常用监控指标
    背景 最关键的一些数据库健康指标,趋势监测。 1 总连接数 主要看趋势,直接与业务量挂钩 如果连接数接近max_connection水位,需要注意。 同时连接数应与数据库主机可用内存挂钩,每个连接保守...
    99+
    2023-09-01
    postgresql 数据库 服务器
  • MySQL常见的监控指标
    前言 MySQL在日常的监控中,需要关注其稳定性,安全性和性能指标,不管是用shell脚本监控还是用一些工具监控,比如prometheus, zabbix等工具,进行日常监控,都离开指标,今天我们就一...
    99+
    2023-09-09
    mysql 服务器 java
  • Linux 常用监控指标有哪些
    小编给大家分享一下Linux 常用监控指标有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、Linux 运维基础采集项做运维,不怕出问题,怕的是出了问题,抓...
    99+
    2023-06-28
  • mongodb监控指标
    insert 每秒 插入/查询/更新/删除数mongostat --port 21000 --rowcount=1 | grep -v insert | awk '{print $1}'query 每秒 插...
    99+
    2022-10-18
  • springbootmetrics监控指标使用教程
    目录springbootmetrics是什么?一、引入依赖二、配置启用三、独立的web服务四、全局标签设置五、自定义指标收集六、推送or拉取指标引入依赖启用push模式 spring...
    99+
    2022-11-13
  • MySQL监控项一些指标
    监控项 说明 Problem MySQL Innodb_pages_created 在InnoDB表中创建的page数量. Innodb_pages_read 从InnoDB buffer ...
    99+
    2022-10-18
  • 如何监控innodb status指标
    这篇文章主要介绍如何监控innodb status指标,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 输入被监控机器的ip 实时获取innodb相关sta...
    99+
    2022-10-18
  • SpringBoot指标监控的实现
    目录一、SpringBoot——Actuator1.1 快速开始1.2 简单介绍最常用的几个端点1.3 开启或关闭某个端点1.4 定制端点1.5 SpringBoot——Admin ...
    99+
    2022-11-12
  • Prometheus监控运维实战十: 主机监控指标
    1、CPU指标 CPU负载 node_load1node_load5node_load15 以上三个指标为主机的CPU平均负载,分别对应一分钟、五分钟和十五分钟的时间间隔。CPU负载是指某段时间内占用...
    99+
    2023-09-12
    运维 prometheus 服务器
  • redis 性能指标监控命令
    redis 性能指标监控命令大家在学习的过程中,一定要学会经常使用help来了解命令的具体用法。1.info  (监控一般使用这个命令读取数据)127.0.0.1:6379> help in...
    99+
    2022-10-18
  • MongoDB的监控指标有哪些
    MongoDB的监控指标有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。MongoDB uptime 启动时长 asserts....
    99+
    2022-10-18
  • SpringBoot 指标监控actuator的专题
    目录1.写在前面2.SpringBoot Actuator3.定制化Endpoint3.1 定制health端点信息3.2 定制info端点信息1.写在前面 首先肯定要说一下Spri...
    99+
    2022-11-12
  • 数据库服务器监控指标
    io cpu 磁盘 内存 网卡(可有可无) 请求数 连接数 最大事务执行时间 ...
    99+
    2022-10-18
  • Redis性能监控指标是什么
    这篇文章将为大家详细讲解有关Redis性能监控指标是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。监控指标        性能...
    99+
    2022-10-18
  • 如何自定义Prometheus监控指标
    本篇内容介绍了“如何自定义Prometheus监控指标”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目前大部分使用Spring  ...
    99+
    2023-06-17
  • SpringBoot2的JUnit5与指标监控怎么使用
    这篇文章主要介绍“SpringBoot2的JUnit5与指标监控怎么使用”,在日常操作中,相信很多人在SpringBoot2的JUnit5与指标监控怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spr...
    99+
    2023-06-29
  • Spring Boot怎么自定义监控指标
    今天小编给大家分享一下Spring Boot怎么自定义监控指标的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.创...
    99+
    2023-07-05
  • MySQL数据库监控指标有哪些
    本篇文章为大家展示了MySQL数据库监控指标有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、performance_schema性能模式的 events_s...
    99+
    2022-10-18
  • 如何理解Redis性能指标监控
    这篇文章主要讲解了“如何理解Redis性能指标监控”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Redis性能指标监控”吧! 监控指标性能...
    99+
    2022-10-18
  • 如何获取Node性能监控指标
    这篇文章主要介绍“如何获取Node性能监控指标”,在日常操作中,相信很多人在如何获取Node性能监控指标问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何获取Node性能监控...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作