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 19)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置记录所有语句的事务比例。 |
| 扩展描述 | 使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 18)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置记录所有语句的事务比例。 |
| 扩展描述 | 使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 17)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置记录所有语句的事务比例。 |
| 扩展描述 | 使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 16)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置记录所有语句的事务比例。 |
| 扩展描述 | 使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 15)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置记录所有语句的事务比例。 |
| 扩展描述 | 使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 14)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置记录所有语句的事务比例。 |
| 扩展描述 | 使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 13)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置要记录的新事务的比例。 |
| 扩展描述 | 记录一个事务比例中的所有语句。使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
log_transaction_sample_rate (PostgreSQL 12)
| 设置 | 0 |
| 单位 | |
| 类别 | 报告和日志记录 / 何时记录 |
| 简短描述 | 设置要记录的新事务的比例。 |
| 扩展描述 | 记录一个事务比例中的所有语句。使用介于 0.0(从不记录)和 1.0(记录所有事务的所有语句)之间的值。 |
| 上下文 | superuser |
| 变量类型 | 实数 |
| 来源 | 默认 |
| 最小值 | 0 |
| 最大值 | 1 |
| 枚举值 | |
| 启动值 | 0 |
| 重置值 | 0 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
变更历史
- 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 月 depesz; 的博客文章
