当前位置: 首页 > news >正文

PostgreSQL 数据库监控项

在维护和优化 PostgreSQL 数据库时,采集并监控数据库的各种静态和动态指标非常重要。这些指标包括数据库的配置信息、资源使用情况、性能指标等,能够帮助数据库管理员及时发现并解决潜在的问题,从而提高数据库的稳定性和性能。本文提供了一系列 SQL 查询,用于获取 PostgreSQL 数据库的各项重要指标和配置信息。

1. PostgreSQL 版本信息
  • 查询命令:

    SELECT version();
    

    返回 PostgreSQL 数据库的版本信息。

2. 配置参数
2.1 shared_buffers
  • 查询命令:

    SHOW shared_buffers;
    

    返回 shared_buffers 的配置值。

2.2 max_connections
  • 查询命令:

    SHOW max_connections;
    

    返回 max_connections 的配置值。

3. 数据库大小
  • 查询命令:

    SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size
    FROM pg_database;
    

    返回每个数据库的名称及其大小。

4. 数据库年龄
  • 查询命令:

    SELECT datname, age(datfrozenxid) AS age
    FROM pg_database;
    

    返回每个数据库的名称及其年龄(以事务ID表示)。

5. 活动会话
  • 查询命令:

    SELECT datname, count(*) AS num_connections
    FROM pg_stat_activity
    GROUP BY datname;
    

    返回每个数据库当前的活动会话数量。

6. 会话详细信息
  • 查询命令:

    SELECT pid, usename, datname, application_name, client_addr, client_port, backend_start, state, query
    FROM pg_stat_activity;
    

    返回当前所有活动会话的详细信息。

7. 数据库大小和索引大小
  • 查询命令:

    SELECTdatname,pg_size_pretty(pg_database_size(datname)) AS db_size,pg_size_pretty(pg_indexes_size(datname)) AS index_size
    FROMpg_database;
    

    返回每个数据库的大小和索引大小。

8. 检查点信息
  • 查询命令:

    SELECT checkpoint_time, current_setting('checkpoint_completion_target') AS checkpoint_completion_target
    FROM pg_stat_bgwriter;
    

    返回最近检查点的时间以及 checkpoint_completion_target 的配置值。

9. 真空和分析信息
  • 查询命令:

    SELECT schemaname, relname, last_vacuum, last_autovacuum, last_analyze, last_autoanalyze
    FROM pg_stat_user_tables
    ORDER BY last_autovacuum DESC LIMIT 10;
    

    返回用户表的最后一次 VACUUM 和 ANALYZE 操作的时间。

10. 索引使用情况
  • 查询命令:

    SELECT relname AS table_name, indexrelname AS index_name, idx_scan AS index_scans
    FROM pg_stat_user_indexes
    JOIN pg_indexes ON pg_stat_user_indexes.indexrelname = pg_indexes.indexname
    WHERE schemaname = 'public';
    

    返回用户表的索引使用情况。

11. 表膨胀
  • 查询命令:
    SELECT schemaname, tablename, pg_size_pretty(total_bytes) AS total_size,pg_size_pretty(heap_bytes) AS heap_size,pg_size_pretty(toast_bytes) AS toast_size,pg_size_pretty(index_bytes) AS index_size
    FROM (SELECT *, total_bytes - heap_bytes - toast_bytes - index_bytes AS table_bytesFROM (SELECT c.oid, nspname AS schemaname, relname AS tablename,pg_total_relation_size(c.oid) AS total_bytes,pg_relation_size(c.oid) AS heap_bytes,COALESCE(pg_total_relation_size(reltoastrelid), 0) AS toast_bytes,COALESCE(SUM(pg_total_relation_size(i.indexrelid)), 0) AS index_bytesFROM pg_class cLEFT JOIN pg_namespace n ON n.oid = c.relnamespaceLEFT JOIN pg_index i ON i.indrelid = c.oidWHERE c.relkind = 'r'GROUP BY 1, 2, 3, 4, 5, 6) a
    ) b
    ORDER BY total_bytes DESC LIMIT 10;
    
    返回每个表的总大小、堆大小、TOAST 大小和索引大小。
12. 数据库年龄
  • 查询命令:
    SELECT datname, age(datfrozenxid) AS age
    FROM pg_database;
    
    返回每个数据库的名称及其年龄。
13. 活动连接数
  • 查询命令:
    SELECT count(*) FROM pg_stat_activity WHERE state = 'active';
    
    返回当前活动的连接数。

好的,以下是新增的 10 项 PostgreSQL 数据库的采集项及其对应的 SQL 查询:

14. 缓存命中率
  • 查询命令:

    SELECT sum(blks_hit) / (sum(blks_hit) + sum(blks_read)) AS cache_hit_ratio
    FROM pg_stat_database;
    

    返回缓存命中率,接近 1 表示缓存利用率高。

15. 每秒事务数 (TPS)
  • 查询命令:

    SELECTdate_trunc('second', now()) AS time,xact_commit + xact_rollback AS tps
    FROMpg_stat_database;
    

    返回当前时间每秒事务数(TPS)。

16. 每秒查询数 (QPS)
  • 查询命令:

    SELECTdate_trunc('second', now()) AS time,sum(numbackends) AS qps
    FROMpg_stat_database;
    

    返回当前时间每秒查询数(QPS)。

17. 死锁数量
  • 查询命令:

    SELECT count(*) AS deadlocks
    FROM pg_stat_database_conflicts
    WHERE conflict_type = 'deadlock';
    

    返回数据库中的死锁数量。

18. 当前锁定情况
  • 查询命令:

    SELECT locktype, database, relation, page, tuple, virtualxid, transactionid, classid, objid, objsubid, virtualtransaction, pid, mode, granted
    FROM pg_locks
    WHERE NOT granted;
    

    返回当前未授予的锁定情况。

19. 缓冲区大小
  • 查询命令:

    SELECTpg_size_pretty(pg_total_relation_size(relid)) AS buffer_size
    FROMpg_statio_user_tables;
    

    返回每个用户表的缓冲区大小。

20. 查询计划缓存命中率
  • 查询命令:

    SELECTround((blks_hit - blks_read)::numeric / blks_hit, 4) AS plan_cache_hit_ratio
    FROMpg_stat_database;
    

    返回查询计划缓存命中率。

21. 最长查询时间
  • 查询命令:

    SELECTmax(now() - query_start) AS longest_query_time
    FROMpg_stat_activity
    WHERE state = 'active';
    

    返回当前活动查询的最长查询时间。

22. 最大事务数
  • 查询命令:

    SELECTmax(now() - xact_start) AS max_transaction_age
    FROMpg_stat_activity
    WHERE state = 'active';
    

    返回当前活动事务的最大事务时间。

23. 索引扫描数
  • 查询命令:

    SELECTschemaname,relname,indexrelname,idx_scan
    FROMpg_stat_user_indexes
    ORDER BYidx_scan DESC
    LIMIT 10;
    

    返回索引扫描次数最多的前 10 个索引。

结论

通过上述 SQL 查询,您可以全面地获取 PostgreSQL 数据库的各项静态和动态指标。这些信息有助于数据库的深入监控、维护和优化,确保数据库的高效运行和稳定性。

参考资料

  • PostgreSQL Documentation
  • Prometheus Documentation
  • Postgres Exporter
http://www.lryc.cn/news/397051.html

相关文章:

  • 用python生成词频云图(python实例二十一)
  • HTML 标签简写和全称及其对应的中文说明和实例
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • 全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用
  • Django 视图 - FBV 与 CBV
  • AI机器人在未来的应用场景预测:是否会取代人类?华为、百度、特斯拉他们在AI领域都在做什么?
  • 第58期 | GPTSecurity周报
  • maven 依赖冲突
  • demon drone 200无人机标定流程
  • 案例开发-日程管理-第一期
  • 【Java 注解,自定义注解,元注解,注解本质,注解解析】
  • 染色法判定二分图
  • 自动气象站的主要功能优势
  • Java中实现二维数组(矩阵)的转置
  • Prometheus+Grafana主机运行数据
  • GraphQL在Postman中:释放API查询的强大潜能
  • 大语言模型里的微调vs RAG vs 模板提示词
  • 网络编程:常用网络测试工具
  • mov视频怎么改成mp4?把mov改成MP4的四个方法
  • 力扣1472.设计浏览器历史记录
  • 准大一新生开学千万要带证件照用途大揭秘
  • QImage显示图片像素
  • uniapp使用高德地图(公众号+h5)
  • 深度学习与浅层学习:技术变革下的竞争态势
  • LeetCode 219. 存在重复元素 II
  • 【目标检测】使用自己的数据集训练并预测yolov8模型
  • 应用监控SkyWalking调研
  • Selenium使用注意事项:
  • 小程序需要进行软件测试吗?小程序测试有哪些测试内容?
  • 一文读懂企业租用GPU的注意事项!