PG Collector: 用于 PostgreSQL 健康巡检的 SQL 脚本

五月 15, 2024

摘要:PG Collector for PostgreSQL 是一个 SQL 脚本,它会收集有价值的数据库信息,并将其呈现在一个合并的 HTML 文件中,这提供了一种方便的方式,来查看和导航到报告的不同部分。

PG Collector

目录

概述

PG Collector 可以安全地在生产环境中运行,并且不会创建任何数据库对象来生成输出。

借助 PG Collector,管理员可以深入了解数据库的各个方面,例如:

  • 数据库大小
  • 配置参数
  • 已安装的扩展
  • 清理与统计
  • 未使用的索引和无效的索引
  • 用户和角色信息
  • Toast 表映射
  • 数据库模式
  • 碎片化(膨胀)
  • 表空间信息
  • 内存设置
  • 表和索引的大小和信息
  • 事务 ID
  • 复制槽
  • public 模式信息
  • 未记录日志的表

要了解更多内容,请查看样例报告。

版本控制策略

从 PostgreSQL 13 开始,PG Collector 会为每个 PostgreSQL 主版本提供一个专用脚本。

每个 PG Collector 主版本都有自己的分支,主分支将用于支持 PostgreSQL 12 和更早版本的 PG Collector。

branches

如何下载 PG Collector?

pg-collector 发布中,选择与您的 PostgreSQL 主版本匹配的 PG Collector 版本。

releases_1

releases_2

如何查看 PG Collector 版本?

  • 从 PG Collector 报告头部版面 report_header_version

  • 从 PG Collector 脚本头部注释 script_header

PG Collector 报告头部版面

header_V2.6

PG Collector 样例报告

pg_collector v2.9

pg_collector v2.7

PG Collector 样例报告

PG Collector 输出

报告名称

PG Collector 脚本将使用以下命名约定生成 HTML 文件:pg_colletcor_[DB Name]-[timestamp].html。

[DB Name]:是连接到的数据库名称。

Example : pg_collector_testdb-2020-10-10_030920.html

报告位置

PG Collector 脚本将在 /tmp 目录下生成 HTML 文件。

如何运行 PG Collector 脚本?

1. 您需要 psql 才能连接到 postgresql 数据库,并运行 pg_collector.sql 脚本。

2. 在笔记本电脑或要从中访问数据库的主机中,下载 pg_collector.sql。

3. 使用 psql 登录数据库。

psql -h [hostname or RDS endpoint] -p [Port] -d [Database name ] -U [user name]

4. 运行 pg_collector.sql 脚本

\i pg_collector.sql
\q

或在 psql 中使用 -f 选项

psql -h [hostname or RDS endpoint] -p [Port] -d [Database name ] -U [user name] -f pg_collector.sql

示例:

$ psql -h localhost -p 5432 -d testdb -U mohamed

testdb=> \i pg_collector.sql
Output format is html.
Default footer is off.
testdb=> \q

$ ls -lhrt /tmp/pg_colletcor_*
-rw-r--r-- 1 mohamed mohamed 569K Oct  7 21:51 /tmp/pg_colletcor_testdb-2019-10-07_215146.html

5. 使用任何 Internet 浏览器打开报告。

备注

1. 如果您没有安装 pg_stat_statements 扩展,则在执行pg_colletcor.sql脚本时会看到以下错误。

postgres=> \i pg_collector.sql
Output format is html.
Default footer is off.
psql:pg_collector.sql:481: ERROR:  relation "pg_stat_statements" does not exist
LINE 10: from pg_stat_statements
              ^
psql:pg_collector.sql:495: ERROR:  relation "pg_stat_statements" does not exist
LINE 10: from pg_stat_statements
              ^
psql:pg_collector.sql:509: ERROR:  relation "pg_stat_statements" does not exist
LINE 10: from pg_stat_statements
              ^
psql:pg_collector.sql:523: ERROR:  relation "pg_stat_statements" does not exist
LINE 10: from pg_stat_statements
              ^
postgres=> \q

2. 如果数据库有数以万计的表,某些查询可能需要更长的时间。可以使用 statement_timeout,中止任何耗时超过指定毫秒数的语句。请查看以下示例。

postgres=> set statement_timeout=30000;
SET
postgres=> \i pg_collector.sql
Output format is html.
Report name and location: /tmp/pg_collector_postgres-2021-07-22_194944.html
psql:pg_collector.sql:1442: ERROR:  canceling statement due to statement timeout