log_transaction_sample_rate
一个系统参数,用于启用所有事务类型的样本记录
log_transaction_sample_rate
是一个 配置参数,用于启用所有事务类型的样本记录。
这对于获取正在执行的事务的合理代表性样本非常有用,而不会产生可能难以管理的日志量。
log_transaction_sample_rate
在 PostgreSQL 12 中添加。
默认值
log_transaction_sample_rate
的默认值为:0
。
用法
当设置为 0
(默认值)时,由于此设置,不会记录任何语句(尽管其他日志参数可能会生成语句日志)。
最大值为 1
,表示将记录所有事务的所有语句。任何介于 0
和 1
之间的值都将导致记录相应百分比的事务。
权限
需要超级用户权限才能更改此参数。需要 SIGHUP 使任何更改生效。
注意事项和限制
- 此参数适用于 PostgreSQL 集群中的所有数据库。
- 启用后,它可能会导致额外的性能开销。
- 记录的事务的实际数量可能与为
log_transaction_sample_rate
指定的值不完全匹配。
按 PostgreSQL 版本分列的详细信息
log_transaction_sample_rate (PostgreSQL 17)
设置 | 0 |
单位 | |
类别 | 报告和日志记录 / 何时记录 |
简短描述 | 设置要从中记录所有语句的事务的分数。 |
额外描述 | 使用 0.0(从不记录)到 1.0(记录所有事务的所有语句)之间的值。 |
上下文 | 超级用户 |
变量类型 | 实数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 1 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待处理重启 | 否 |
log_transaction_sample_rate (PostgreSQL 16)
设置 | 0 |
单位 | |
类别 | 报告和日志记录 / 何时记录 |
简短描述 | 设置要从中记录所有语句的事务的分数。 |
额外描述 | 使用 0.0(从不记录)到 1.0(记录所有事务的所有语句)之间的值。 |
上下文 | 超级用户 |
变量类型 | 实数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 1 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待处理重启 | 否 |
log_transaction_sample_rate (PostgreSQL 15)
设置 | 0 |
单位 | |
类别 | 报告和日志记录 / 何时记录 |
简短描述 | 设置要从中记录所有语句的事务的分数。 |
额外描述 | 使用 0.0(从不记录)到 1.0(记录所有事务的所有语句)之间的值。 |
上下文 | 超级用户 |
变量类型 | 实数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 1 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待处理重启 | 否 |
log_transaction_sample_rate (PostgreSQL 14)
设置 | 0 |
单位 | |
类别 | 报告和日志记录 / 何时记录 |
简短描述 | 设置要从中记录所有语句的事务的分数。 |
额外描述 | 使用 0.0(从不记录)到 1.0(记录所有事务的所有语句)之间的值。 |
上下文 | 超级用户 |
变量类型 | 实数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 1 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待处理重启 | 否 |
log_transaction_sample_rate (PostgreSQL 13)
设置 | 0 |
单位 | |
类别 | 报告和日志记录 / 何时记录 |
简短描述 | 设置要为新事务记录的事务的分数。 |
额外描述 | 记录一部分事务的所有语句。使用 0.0(从不记录)到 1.0(记录所有事务的所有语句)之间的值。 |
上下文 | 超级用户 |
变量类型 | 实数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 1 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待处理重启 | 否 |
log_transaction_sample_rate (PostgreSQL 12)
设置 | 0 |
单位 | |
类别 | 报告和日志记录 / 何时记录 |
简短描述 | 设置要为新事务记录的事务的分数。 |
额外描述 | 记录一部分事务的所有语句。使用 0.0(从不记录)到 1.0(记录所有事务的所有语句)之间的值。 |
上下文 | 超级用户 |
变量类型 | 实数 |
来源 | 默认 |
最小值 | 0 |
最大值 | 1 |
枚举值 | |
引导值 | 0 |
重置值 | 0 |
源文件 | |
源代码行号 | |
待处理重启 | 否 |
更改历史
- PostgreSQL 12
- 添加 (提交 799e2203)
示例
给定以下表格
CREATE TABLE foo (id serial primary key, val text);
并且 log_transaction_sample_rate
设置为 0.1
,执行以下 shell 命令
for I in `seq 1 10`; do psql -c 'INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT)'; done
导致日志中出现一个条目
2019-12-24 14:32:08.340 UTC [27705] LOG: parameter "log_transaction_sample_rate" changed to "0.1" 2019-12-24 14:32:15.182 UTC [16899] LOG: duration: 2.130 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT)
当 log_transaction_sample_rate
设置为 0.5
时,重新执行相同的 shell 命令会导致六个日志条目
2019-12-24 14:35:44.475 UTC [27705] LOG: parameter "log_transaction_sample_rate" changed to "0.5" 2019-12-24 14:35:46.160 UTC [17023] LOG: duration: 10.140 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT) 2019-12-24 14:35:46.168 UTC [17025] LOG: duration: 1.980 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT) 2019-12-24 14:35:46.188 UTC [17027] LOG: duration: 5.223 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT) 2019-12-24 14:35:46.197 UTC [17029] LOG: duration: 1.959 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT) 2019-12-24 14:35:46.208 UTC [17031] LOG: duration: 2.846 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT) 2019-12-24 14:35:46.227 UTC [17035] LOG: duration: 1.910 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT) 2019-12-24 14:35:46.258 UTC [17041] LOG: duration: 1.946 ms statement: INSERT INTO foo VALUES(DEFAULT, CLOCK_TIMESTAMP()::TEXT)
(如上所述,采样事务的实际数量与参数中指定的值并不完全对应)。
参考
- PostgreSQL 文档: log_transaction_sample_rate
有用链接
- 记录事务样本 - pgsql-hackers 线程
- 记录事务样本中的所有语句 - 2019 年 4 月 select * from depesz; 发布的博客文章