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_database
pg_stat_statements
autovacuum
,当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_time
blk_write_time
pg_stat_statements
以下列将更新为总 I/O 时间
blk_read_time
blk_write_time
按 PostgreSQL 版本分列详情
track_io_timing (PostgreSQL 17)
设置 | off |
单位 | |
类别 | 统计信息 / 累积查询和索引统计信息 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 16)
设置 | off |
单位 | |
类别 | 统计信息 / 累积查询和索引统计信息 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 15)
设置 | off |
单位 | |
类别 | 统计信息 / 累积查询和索引统计信息 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 14)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 13)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 12)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 11)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 10)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 9.6)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 9.5)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 | |
等待重启 | false |
文档: track_io_timing
track_io_timing (PostgreSQL 9.4)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 |
文档: track_io_timing
track_io_timing (PostgreSQL 9.3)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | bool |
来源 | 默认值 |
最小值 | |
最大值 | |
枚举值 | |
引导值 | off |
重置值 | off |
源文件 | |
源代码行 |
文档: track_io_timing
track_io_timing (PostgreSQL 9.2)
设置 | off |
单位 | |
类别 | 统计信息 / 查询和索引统计信息收集器 |
简短描述 | 收集数据库 I/O 活动的时序统计信息。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | 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 月发表的博文