CONFIGURATION PARAMETER错误报告和日志 / 何时记录
log_min_duration_sample
设置进入语句抽样记录所需达到的最短执行时间,抽样由 log_statement_sample_rate 决定。
Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by "log_statement_sample_rate".
整数 会话(超级用户) 引入 13 现存至 20 devel 0 次默认值变更
- 类型
- 整数integer
- 上下文
- 会话(超级用户)超级用户可在会话内用 SET 修改
- 默认值
-1 ms原始值 -1 ms- 取值范围
-1 – 2147483647- 引入版本
- 13
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 仅简述或分类有更新。
默认值变迁
默认值自 PostgreSQL 13 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
允许对运行时间至少达到指定时间的已完成语句进行采样。这会产生与 log_min_duration_statement相同类型的日志条目, 但仅针对已执行语句的子集,采样率由log_statement_sample_rate控制。 例如,如果将其设置为100ms,那么运行时间达到100ms或更长的所有 SQL语句都将被考虑进行采样。启用此参数在流量过高无法记录所有查询时很有帮助。 如果未指定单位,则将其视为毫秒。 将其设置为零会对所有语句持续时间进行采样。 -1(默认值)禁用语句持续时间的采样。 只有超级用户和具有适当SET权限的用户才能更改此设置。
此设置的优先级低于 log_min_duration_statement,意味着持续时间超过 log_min_duration_statement 的语句不被采样,并且始终被记录。
log_min_duration_statement的其他注释也适用于此设置。
机制详解
log_min_duration_sample 让执行时长达到阈值的已完成语句进入由 log_statement_sample_rate 控制的随机日志路径。-1 关闭该路径,零让所有已完成语句进入,再由抽样率决定实际输出。
log_min_duration_statement 优先级更高。达到其阈值的语句始终记录且不参与抽样,即使同时超过 log_min_duration_sample。扩展查询协议下,Parse、Bind 与 Execute 的时长分别记录。
它属于 SUPERUSER 上下文的会话参数。抽样条目与 log_min_duration_statement 具有相同的语句文本、Bind 值、关联、开销和安全问题,因此 log_line_prefix 与 log_parameter_max_length 仍决定可用性与暴露范围。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
先用 log_min_duration_statement 设置始终记录阈值,再用更低抽样阈值与实测概率覆盖高流量中间区间。在 OLTP 峰值下验证实际样本数与敏感数据处理。
-
OLAP分析与批处理
长分析查询往往超过始终记录阈值,因此抽样可能无法减少这些日志。应依据时长分布选择阈值,而不是照搬 OLTP 值。
-
小规格低配实例与开发机
使用保守抽样率与有界语句文本。除非明确需要每条语句时长记录,小节点不要组合零阈值与抽样率 1。
常见问题
- 期待抽样影响已被更高优先级 log_min_duration_statement 阈值捕获的语句。
- 忘记扩展查询协议会分别计时并记录 Parse、Bind 与 Execute。
- 把阈值设为零且 log_statement_sample_rate 为 1,意外记录每条已完成语句的时长。
- 在没有关联标识、脱敏、访问控制与实测容量预算时抽样 SQL 和 Bind 值。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 18 ← 17 仅描述更新
简述
Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by log_statement_sample_rate.Sets the minimum execution time above which a sample of statements will be logged. Sampling is determined by "log_statement_sample_rate".补充说明Zero logs a sample of all queries. -1 turns this feature off.-1 disables sampling. 0 means sample all statements. -
PostgreSQL 13 ← 12 新增此参数
PostgreSQL 13 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 13 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 14 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 15 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 16 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 17 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 18 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 19 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
| 20 沿用 | -1 ms |
ms |
会话(超级用户) |
整数 |
-1 |
2147483647 |
— |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 何时记录 7 | |||||
log_min_duration_sample |
整数 | 会话(超级用户) | -1 ms |
— | |
| 设置进入语句抽样记录所需达到的最短执行时间,抽样由 log_statement_sample_rate 决定。 | 现存 | ||||
log_min_duration_statement |
整数 | 会话(超级用户) | -1 ms |
9.11 次 | |
| 记录运行时间达到配置阈值的已完成语句。 | 现存 | ||||
log_min_error_statement |
枚举 | 会话(超级用户) | error |
— | |
| 记录所有产生不低于指定级别错误的语句。 | 现存 | ||||
log_min_messages |
枚举 | 会话(超级用户) | warning |
191 次 | |
| 设置写入服务器日志的消息级别。 | 现存 | ||||
log_startup_progress_interval |
整数 | 重载生效 | 10 s |
— | |
| 设置耗时启动操作的进度日志间隔。 | 现存 | ||||
log_statement_sample_rate |
浮点 | 会话(超级用户) | 1 |
— | |
| 设置超过 log_min_duration_sample 的语句被记录的比例。 | 现存 | ||||
log_transaction_sample_rate |
浮点 | 会话(超级用户) | 0 |
— | |
| 设置抽取整笔事务并记录其中所有语句的比例。 | 现存 | ||||