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 17)
设置 | auto |
单位 | |
类别 | 统计/监控 |
简短描述 | 启用内核中查询标识符的计算。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | 枚举 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | auto, regress, on, off |
启动值 | auto |
重置值 | auto |
源文件 | |
源代码行 | |
待重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 16)
设置 | auto |
单位 | |
类别 | 统计/监控 |
简短描述 | 启用内核中查询标识符的计算。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | 枚举 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | auto, regress, on, off |
启动值 | auto |
重置值 | auto |
源文件 | |
源代码行 | |
待重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 15)
设置 | auto |
单位 | |
类别 | 统计/监控 |
简短描述 | 启用内核中查询标识符的计算。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | 枚举 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | auto, regress, on, off |
启动值 | auto |
重置值 | auto |
源文件 | |
源代码行 | |
待重启 | false |
文档: compute_query_id
compute_query_id (PostgreSQL 14)
设置 | auto |
单位 | |
类别 | 统计/监控 |
简短描述 | 计算查询标识符。 |
额外描述 | |
上下文 | 超级用户 |
变量类型 | 枚举 |
来源 | 默认 |
最小值 | |
最大值 | |
枚举值 | auto, regress, on, off |
启动值 | auto |
重置值 | auto |
源文件 | |
源代码行 | |
待重启 | false |
文档: compute_query_id
变更历史
- PostgreSQL 15
- 添加了选项
regress
(提交 ebf6c524)
- 添加了选项
- PostgreSQL 14
- 添加 (提交 5fd9dfa5)
示例
在 pg_stat_activity
中显示查询 ID
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