track_io_timing
track_io_timing 是一个控制数据库 I/O 调用时序是否被跟踪的配置参数。
track_io_timing 在 PostgreSQL 9.2 中被添加。
默认
track_io_timing 的默认值为:off。
用法
如果启用,I/O 时序信息将在以下上下文中显示:
EXPLAIN (BUFFERS, ANALYZE)pg_stat_databasepg_stat_statementsautovacuum,当log_autovacuum_min_duration开启时
track_io_timing 默认禁用,因为它会反复查询操作系统以获取当前时间。这可能在某些平台上造成显著的开销;contrib 模块 pg_test_timing 可以帮助确定这是否是这种情况。
EXPLAIN (BUFFERS, ANALYZE)
如果使用 EXPLAIN 执行命令,并带上 BUFFERS, ANALYZE 选项组合,则任何发生的 I/O 都将附带 "I/O Timings" 的注释。
pg_stat_database
以下列将被 I/O 总时间更新:
blk_read_timeblk_write_time
pg_stat_statements
以下列将被 I/O 总时间更新:
blk_read_timeblk_write_time
按 PostgreSQL 版本详细信息
track_io_timing (PostgreSQL 19)
| 设置 | off |
| 单位 | |
| 类别 | 统计信息 / 累积查询和索引统计信息 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 18)
| 设置 | off |
| 单位 | |
| 类别 | 统计信息 / 累积查询和索引统计信息 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 17)
| 设置 | off |
| 单位 | |
| 类别 | 统计信息 / 累积查询和索引统计信息 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 16)
| 设置 | off |
| 单位 | |
| 类别 | 统计信息 / 累积查询和索引统计信息 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 15)
| 设置 | off |
| 单位 | |
| 类别 | 统计信息 / 累积查询和索引统计信息 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 14)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 13)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 12)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 11)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 10)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 9.6)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 9.5)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 9.4)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档: track_io_timing
track_io_timing (PostgreSQL 9.3)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档: track_io_timing
track_io_timing (PostgreSQL 9.2)
| 设置 | off |
| 单位 | |
| 类别 | 统计 / 查询和索引统计信息收集器 |
| 简短描述 | 收集数据库 I/O 活动的时序统计。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | bool |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | |
| 启动值 | off |
| 重置值 | off |
| 源文件 | |
| 源行 |
文档: track_io_timing
变更历史
- PostgreSQL 9.2
- 添加 (初始提交 40b9b957)
示例
将 track_io_timing 与 EXPLAIN 一起使用
postgres=# SET track_io_timing = ON;
SET
postgres=# EXPLAIN (BUFFERS, ANALYZE) SELECT COUNT(*) FROM object;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------
Aggregate (cost=87.40..87.41 rows=1 width=8) (actual time=48.855..48.874 rows=1 loops=1)
Buffers: shared read=30
I/O Timings: read=1.411
-> Seq Scan on object (cost=0.00..75.92 rows=4592 width=0) (actual time=0.338..25.602 rows=4477 loops=1)
Buffers: shared read=30
I/O Timings: read=1.411
Planning Time: 5.024 ms
Execution Time: 49.186 ms
(8 rows)
请注意,在执行上述查询后,数据将被缓存,再次执行将不涉及 I/O,并且 EXPLAIN 输出中不会包含 "I/O Timings" 值。
postgres=# EXPLAIN (BUFFERS, ANALYZE) SELECT COUNT(*) FROM object;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------
Aggregate (cost=87.40..87.41 rows=1 width=8) (actual time=53.178..53.196 rows=1 loops=1)
Buffers: shared hit=30
-> Seq Scan on object (cost=0.00..75.92 rows=4592 width=0) (actual time=0.043..26.705 rows=4477 loops=1)
Buffers: shared hit=30
Planning Time: 0.174 ms
Execution Time: 53.295 ms
(6 rows)
尝试以非超级用户的身份设置 track_io_timing
postgres=*> SET track_io_timing TO on; ERROR: permission denied to set parameter "track_io_timing"
参考资料
- PostgreSQL 文档: track_io_timing
有用链接
- track_io_timing - malisper 于 2017 年 6 月的文章
