compute_query_id 是一个 配置参数,用于启用查询标识符的计算。此标识符可以通过 pg_stat_activity、EXPLAIN 输出或在配置了 log_line_prefix 时的日志输出中显示。
compute_query_id 在 PostgreSQL 14 中添加。
默认值
compute_query_id 的默认值为:auto。
用法
在 PostgreSQL 13 及更早版本中,contrib 模块 pg_stat_statements 会为规范化后的查询生成一个查询标识符,这使得能够跟踪本质上相同的查询,即使查询值和/或查询格式存在差异。从 PostgreSQL 14 开始,此值在 PostgreSQL 核心中计算,使其可以在其他上下文中可用;具体来说:
- 在
pg_stat_statements中的query_id列 - 在
EXPLAIN VERBOSE输出中 - 在 PostgreSQL 日志中,如果
log_line_prefix包含%Q参数
请注意,查询 ID 值可能为负数。
按 PostgreSQL 版本详细信息
compute_query_id (PostgreSQL 19)
| 设置 | auto |
| 单位 | |
| 类别 | 统计/监控 |
| 简短描述 | 启用核心查询标识符计算。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | auto, regress, on, off |
| 启动值 | auto |
| 重置值 | auto |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 18)
| 设置 | auto |
| 单位 | |
| 类别 | 统计/监控 |
| 简短描述 | 启用核心查询标识符计算。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | auto, regress, on, off |
| 启动值 | auto |
| 重置值 | auto |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 17)
| 设置 | auto |
| 单位 | |
| 类别 | 统计/监控 |
| 简短描述 | 启用核心查询标识符计算。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | auto, regress, on, off |
| 启动值 | auto |
| 重置值 | auto |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 16)
| 设置 | auto |
| 单位 | |
| 类别 | 统计/监控 |
| 简短描述 | 启用核心查询标识符计算。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | auto, regress, on, off |
| 启动值 | auto |
| 重置值 | auto |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 15)
| 设置 | auto |
| 单位 | |
| 类别 | 统计/监控 |
| 简短描述 | 启用核心查询标识符计算。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | auto, regress, on, off |
| 启动值 | auto |
| 重置值 | auto |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 14)
| 设置 | auto |
| 单位 | |
| 类别 | 统计/监控 |
| 简短描述 | 计算查询标识符。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | enum |
| 来源 | 默认 |
| 最小值 | |
| 最大值 | |
| 枚举值 | auto, regress, on, off |
| 启动值 | auto |
| 重置值 | auto |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: compute_query_id
变更历史
- PostgreSQL 15
- 添加了选项
regress(提交 ebf6c524)
- 添加了选项
- PostgreSQL 14
- 添加(提交 5fd9dfa5)
示例
查询 ID 显示在 pg_stat_activity 中
postgres=# SELECT datid, datname, query_id, substr(query,1,64) AS query
FROM pg_stat_activity WHERE datid IS NOT NULL;
datid | datname | query_id | query
-------+----------+----------------------+------------------------------------------------------------------
16403 | postgres | 8528657101864406127 | SELECT datid, datname, query_id, substr(query,1,64) AS query FRO
16402 | appdb | 5295917891061644709 | /* getAllLanguages_r */ +
| | | SELECT * +
| | | FROM language +
| | | ORDER BY la
16402 | appdb | -6420466229898021482 | /* ObjectLib::_getObjectInfoForLink */ +
| | | SELECT o.object_id, +
| | |
16402 | appdb | 5295917891061644709 | /* getAllLanguages_r */ +
| | | SELECT * +
| | | FROM language +
| | | ORDER BY la
(4 rows)
查询 ID 显示在日志文件中(当 log_line_prefix 设置为 '%m [%p; %Q]' 时)
2021-07-21 09:46:50.810 UTC [2658840; -2049453941623996126] LOG: duration: 0.067 ms 2021-07-21 09:46:50.810 UTC [2658840; 3422818749220588372] LOG: duration: 0.056 ms 2021-07-21 09:46:50.810 UTC [2658840; -2269355413466007673] LOG: duration: 0.103 ms 2021-07-21 09:46:50.811 UTC [2658840; -2049453941623996126] LOG: duration: 0.063 ms 2021-07-21 09:46:50.811 UTC [2658840; 3422818749220588372] LOG: duration: 0.059 ms 2021-07-21 09:46:50.811 UTC [2658840; 1878833853774024825] LOG: duration: 0.107 ms 2021-07-21 09:46:50.811 UTC [2658840; -2049453941623996126] LOG: duration: 0.061 ms 2021-07-22 09:46:50.812 UTC [2658840; 5295917891061644709] LOG: duration: 0.154 ms
如果安装了 pg_stat_statements,查询 ID 可以与 pg_stat_statements 视图中的条目匹配
postgres=# SELECT userid, dbid, query FROM pg_stat_statements WHERE queryid=-2269355413466007673;
userid | dbid | query
--------+-------+--------------------------
16384 | 16402 | /* getSessionMessage */ +
| | SELECT warning +
| | FROM user_session +
| | WHERE session_id=$1
(1 row)
EXPLAIN VERBOSE 也会输出查询 ID
appdb=> EXPLAIN VERBOSE
SELECT warning FROM user_session
WHERE session_id='2c7fe5d06fd9d6c0cc08883355c962b1';
QUERY PLAN
--------------------------------------------------------------------------------------------
Index Scan using user_session_pkey on epp.user_session (cost=0.28..8.29 rows=1 width=32)
Output: warning
Index Cond: ((user_session.session_id)::text = '2c7fe5d06fd9d6c0cc08883355c962b1'::text)
Query Identifier: -2269355413466007673
(4 rows)
参考资料
- PostgreSQL 文档: compute_query_id
