pg_profile: 服务器统计信息

三月 15, 2024

摘要:报告的该部分包含了,PostgreSQL 中的一些服务器级别的统计信息。

本部分包含以下小节:

  1. 数据库统计信息
  2. 实例 I/O 统计信息
  3. 实例 SLRU 统计信息
  4. 按数据库划分的会话统计信息
  5. 按数据库划分的语句统计信息
  6. 按数据库划分的 JIT 统计信息
  7. 实例统计信息
  8. WAL 统计信息
  9. 表空间统计信息
  10. 等待采样

数据库统计信息

基于 pg_stat_database 视图,包含的报告时间范围内每个数据库的统计信息。

  • Database - 数据库名称
  • Transactions - 数据库事务统计信息
    • Commits - 已提交的事务数(xact_commit
    • Rollbacks - 回滚过的事务数(xact_rollback
    • Deadlocks - 检测到的死锁数(deadlocks
  • Checksums - 校验和失败数(如果有)
    • Failures - 检测到的数据块校验和失败数
    • Last - 最近一次检测到的校验和失败
  • Block statistics - 数据库块读取和命中统计信息
    • Hit(%) - 缓冲区缓存命中率
    • Read - 在此数据库中读取的磁盘块数(blks_read
    • Hit - 发现磁盘块已在缓冲区缓存中的次数(blks_hit
  • Block I/O times - 在数据块 I/O 上花费的时间
    • Read - 后端读取数据文件块所花费的时间,以秒为单位
    • Write - 后端写入数据文件块所花费的时间,以秒为单位
  • Tuples - 元组统计部分
    • Ret - 返回的元组数(tup_returned
    • Fet - 提取的元组数(tup_fetched
    • Ins - 插入的元组数(tup_inserted
    • Upd - 更新的元组数(tup_updated
    • Del - 删除的元组数(tup_deleted
  • Temp files - 临时文件统计信息
    • Size - 在此数据库中,查询写入到临时文件的总数据量(temp_bytes
    • Files - 在此数据库中,查询创建的临时文件数(temp_files
  • Size - 报告时间段结束时的数据库大小(pg_database_size()
  • Growth - 报告时间段内的数据库增长量(pg_database_size() 差异)

实例 I/O 统计信息

按对象类型、后端类型和上下文划分的 I/O 统计信息。基于 pg_stat_io,在 PostgreSQL 16 及以上版本中可用。

  • Object - I/O 操作的目标对象类型
  • Backend - 执行 I/O 操作的后端类型
  • Context - I/O 操作的上下文
  • Reads - 读取统计信息
    • Count - 读取操作数
    • Bytes - 读取数据量
    • Time - 读取操作所花费的时间(以秒为单位)
  • Writes - 写入统计信息
    • Count - 写入操作数
    • Bytes - 写入数据量
    • Time - 写入操作所花费的时间(以秒为单位)
  • Writebacks - 写出到持久化存储的请求
    • Count - 进程请求内核写出到持久化存储的数据块数
    • Bytes - 请求写出到持久化存储的数据量
    • Time - 写回操作所花费的时间(秒)
  • Extends - 关系扩展操作
    • Count - 关系扩展操作的次数
    • Bytes - 扩展操作使用的空间量
    • Time - 扩展操作所花费的时间(以秒为单位)
  • Hits - 发现所需数据块已在共享缓冲区中的次数
  • Evictions - 从共享或本地缓冲区中写出块,以使其可用于其他块的次数
  • Reuses - 在批量读取、批量写入或 vacuum 上下文中,在共享缓冲区外的一个大小受限的缓冲环中,一个现有缓冲页由 I/O 操作重用的次数
  • Fsyncs - fsync 操作
    • Count - fsync 调用的次数。这些仅在正常上下文中跟踪
    • Time - fsync 操作所花费的时间(秒)

实例 SLRU 统计信息

SLRU 缓存的访问统计信息(基于 pg_stat_slru 视图)

  • Name - SLRU 的名称
  • Zeroed - 初始化期间清零的数据块数
  • Hits - 发现磁盘块已在 SLRU 中,因而不需要读取的次数(这仅包括 SLRU 中的命中,不包括操作系统的文件系统缓存)
  • Reads - 读取到 SLRU 中的磁盘块数
  • %Hit - 此 SLRU 的磁盘块命中率,以读取数 + 命中数的百分比表示
  • Writes - 从 SLRU 写出的磁盘块数
  • Checked - 检查数据块在 SLRU 中是否存在的次数(blks_exists 字段)
  • Flushes - 此 SLRU 的脏数据刷写次数
  • Truncates - 此 SLRU 的截断次数

按数据库划分的会话统计信息

此部分包含 pg_stat_database 视图中的会话相关数据。自 PostgreSQL 14 起可用。

  • Database - 数据库名称
  • Timings (s) - 会话计时,以秒为单位
    • Total - 在此数据库中,数据库会话所花费的时间(请注意,统计信息仅在会话状态变化时更新,因此,如果会话长时间处于空闲状态,则不会包括此空闲时间)(session_time
    • Active - 在此数据库中,执行 SQL 语句所花费的时间(这对应于 pg_stat_activity 中的状态值:activefastpath function call)(active_time
    • Idle(T) - 在此数据库中,处于空闲事务状态持续的时间(这对应于 pg_stat_activity 中的状态值:idle in transactionidle in transaction (aborted))(idle_in_transaction_time
  • Sessions - 数据库的会话计数
    • Established - 已建立到此数据库的会话总数(sessions
    • Abandoned - 由于与客户端的连接丢失,而终止的与此数据库的会话数(sessions_abandoned
    • Fatal - 因发生严重错误,而终止的与此数据库的会话数(sessions_fatal
    • Killed - 由管理员干预,而终止的与此数据库的会话数(sessions_killed

按数据库划分的语句统计信息

包含 pg_stat_statements 数据中按每个数据库聚合的总统计信息(如果 pg_stat_statements 扩展在报告时间段内可用)

  • Database - 数据库名称
  • Calls - 所有语句执行的总次数(calls 的总和)
  • Time (s) - 花费的时间,以秒为单位
    • Plan - 规划花费的时间(total_plan_time 的总和) - 自 pg_stat_statements 1.8 起可用
    • Exec - 执行花费的时间(total_timetotal_exec_time 的总和)
    • Read - 读取块花费的时间(blk_read_time 的总和)
    • Write - 写入块花费的时间(blk_write_time 的总和)
    • Trg - 执行触发器函数花费的时间
  • Temp I/O Time - 在临时文件块 I/O 上花费的时间
    • Read - 读取临时文件块花费的时间(以秒为单位)
    • Write - 写入临时文件块花费的时间(以秒为单位)
  • Fetched (blk) - 从磁盘和缓冲区中获取的总块数
    • Shared - 获取的共享块总数(shared_blks_read + shared_blks_hit 的总和)
    • Local - 获取的本地块总数(local_blks_read + local_blks_hit 的总和)
  • Dirtied (blk) - 数据库中写脏的总块数
    • Shared - 数据库中写脏的共享块总数(shared_blks_dirtied 的总和)
    • Local - 数据库中写脏的本地块总数(local_blks_dirtied 的总和)
  • Temp (blk) - 用于操作(如连接和排序)的块
    • Read - 读取的块数(temp_blks_read 的总和)
    • Write - 写入的块数(temp_blks_written 的总和)
  • Local (blk) - 用于临时表的块
    • Read - 读取的块数(local_blks_read 的总和)
    • Write - 写入的块数(local_blks_written 的总和)
  • Statements - 捕获的语句总数
  • WAL size - 语句生成的 WAL 总量(wal_bytes 的总和)

按数据库划分的 JIT 统计信息

包含每个数据库中总的 JIT 相关统计信息,由 pg_stat_statements 扩展提供。从 PostgreSQL 15(pg_stat_statements 1.10)开始可用。

  • Database - 数据库名称
  • Calls - 所有语句执行的总次数(calls 的总和)
  • Time (s) - 花费的时间,以秒为单位
    • Plan - 规划花费的时间(total_plan_time 的总和) - 自 pg_stat_statements 1.8 起可用
    • Exec - 执行花费的时间(total_timetotal_exec_time 的总和)
  • Generation
    • Count - 由语句 JIT 编译的函数总数
    • Gen. time - 语句在生成 JIT 代码上花费的总时间
  • Inlining
    • Count - 函数内联的次数
    • Time - 语句在内联函数上花费的总时间(以秒为单位)
  • Optimization
    • Count - 语句被优化的次数
    • Time - 语句在优化上花费的总时间(以秒为单位)
  • Emission
    • Count - 代码被发放的次数
    • Time - 语句在发放代码上花费的总时间(以秒为单位)

实例统计信息

此表包含 pg_stat_bgwriter 视图中的数据

  • Scheduled checkpoints - 由 checkpoint_timeout 参数设置,调度完成的检查点总数(checkpoints_timed字段)
  • Requested checkpoints - 由 max_wal_sizearchive_timeout 参数设置,和 CHECKPOINT 命令,触发的检查点总数(checkpoints_req 字段)
  • Checkpoint write time (s) - 检查点写块操作花费的总时间,以秒为单位(checkpoint_write_time 字段)
  • Checkpoint sync time (s) - 检查点同步操作花费的总时间,以秒为单位(checkpoint_sync_time 字段)
  • Checkpoints buffers written - 由检查点写入的缓冲页总数(buffers_checkpoint 字段)
  • Background buffers written - 由后台写进程写入的缓冲页总数(buffers_clean 字段)
  • Backend buffers written - 后端进程写入的缓冲页总数(buffers_backend 字段)
  • Backend fsync count - 后端进程调用 fsync 的总次数(buffers_backend_fsync 字段)
  • Bgwriter interrupts (too many buffers) - 由于达到 bgwriter_lru_maxpages 参数的值,而触发的后台写进程中断总次数。
  • Number of buffers allocated - 分配的缓冲页总数(buffers_alloc 字段)
  • WAL generated - 生成的 WAL 总量(基于 pg_current_wal_lsn() 差值)
  • Start LSN - 在当前报告开始时的 WAL LSN
  • End LSN - 在当前报告结束时的 WAL LSN
  • WAL segments archived - 已归档的 WAL 段数量(基于 pg_stat_archiver 视图的 archived_count 字段)
  • WAL segments archive failed - WAL 段归档失败次数(基于 pg_stat_archiver 视图的 failed_count 字段)

WAL 统计信息

此表包含 pg_stat_wal 视图中的数据。自 PostgreSQL 14 起可用。

  • WAL generated - 生成的 WAL 总量(wal_bytes
  • WAL per second - 每秒平均生成的 WAL 量
  • WAL records - 生成的 WAL 记录总数(wal_records
  • WAL FPI - 生成的 WAL 全页镜像总数(wal_fpi
  • WAL buffers full - 由于 WAL 缓冲区已满,而将 WAL 数据写入磁盘的次数(wal_buffers_full
  • WAL writes - 通过 XLogWrite 请求,将 WAL 缓冲页写出到磁盘的次数(wal_write
  • WAL writes per second - 每秒通过 XLogWrite 请求将 WAL 缓冲页写出到磁盘的平均次数
  • WAL sync - 通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘的次数(需要 fsync 处于打开状态,并且 wal_sync_method 设为 fdatasync、fsync 或 fsync_writethrough,否则为零)(wal_sync
  • WAL syncs per second - 每秒通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘的平均次数
  • WAL write time (s) - 通过 XLogWrite 请求将 WAL 缓冲区写入磁盘所花费的总时间,以秒为单位(需要启用 track_wal_io_timing,否则为零)。这包括了在 wal_sync_method 设为 open_datasyncopen_sync 时的同步时间。(wal_write_time
  • WAL write duty - WAL 写入时间占报告持续时间的百分比
  • WAL sync time (s) - 通过 issue_xlog_fsync 请求将 WAL 文件同步到磁盘所花费的总时间,以秒为单位(需要启用 track_wal_io_timingfsync 处于打开状态,并且 wal_sync_method 设为 fdatasyncfsyncfsync_writethrough,否则为零)(wal_sync_time
  • WAL sync duty - WAL 同步时间占报告持续时间的百分比

表空间统计信息

此表包含有关表空间大小和增长的信息:

  • Tablespace - 表空间名称
  • Path - 表空间路径
  • Size - 报告时间段内最后一个样本中的表空间大小
  • Growth - 报告时间段内的表空间增长

等待采样

本部分包含了从 pg_wait_sampling 扩展获取的数据(需要该扩展在报告时间段内可用)。

等待事件类型

此表提供报告时间段内有关每种类型的事件的总等待时间的信息。事件相关的等待统计信息,由 pg_wait_sampling 扩展在语句执行期间和其他等待时(包括后台活动)检测提供。

  • Wait event type - 等待事件的类型(请参阅 pg_stat_activity
  • Statements Waited (s) - 语句在此类型的事件上等待的时间(当 pg_wait_sampling_profile.queryid 不为 null 时),以秒为单位
  • %Total - 语句在此类型的事件上等待的时间,占语句等待的总时间的百分比
  • All Waited (s) - 所有后端(包括后台活动)在此类型的事件上等待的时间量
  • %Total - 后端在此类型的事件上等待的时间,占后端等待的总时间的百分比

突出的等待事件(语句)

此表包含按语句执行期间等待的总时间排列前 pg_profile.topn 的等待事件(当 pg_wait_sampling_profile.queryid_ 不为 null 时)。

  • Wait event type - 等待事件的类型(请参阅 pg_stat_activity
  • Wait event - 等待事件名称(请参阅 pg_stat_activity
  • Waited (s) - 语句在事件上等待的时间量,以秒为单位
  • %Total - 语句在事件上等待的时间,占语句等待的总时间的百分比

突出的等待事件(全部)

此表包含按总等待时间(包括后台活动)排列前 pg_profile.topn 的等待事件。

  • Wait event type - 等待事件的类型(请参阅 pg_stat_activity
  • Wait event - 等待事件名称(请参阅 pg_stat_activity
  • Waited (s) - 所有后端在事件上等待的时间量,以秒为单位
  • %Total - 所有后端在事件上等待的时间,占后端等待的总时间的百分比

了解更多

pg_profile: PostgreSQL 历史工作负载报告