描述
包含当前会话中已执行查询的 query id,按执行顺序排列。可借助它在system.query_log 中查找“我刚刚运行的那些查询”,而无需在客户端指定 query_id,也无需用 log_comment 为查询打标签。
其内容的作用域为会话级:每个会话只能看到自己的历史记录,其他会话的查询绝不会出现。
query id 在查询开始时即被记录,因此:
- 当前正在运行的查询从该表中查询数据时,其自身已可见。
- 失败的查询同样会被记录 - 获取刚刚失败查询的 id 正是一个主要用例。
各接口的会话范围
- 原生/TCP 连接 (ClickHouse 客户端、各类驱动) 以及
clickhouse-local:会话即连接,因此历史记录会累积该连接上的所有查询,包括客户端一次调用中执行的多条查询。 - 带
session_id参数的 HTTP:只要请求传入相同的session_id,历史记录就会在这些请求之间保留,直到会话过期。 - 不带
session_id的 HTTP:每个请求自成一个会话,因此该表始终只显示当前查询。
历史记录大小
历史记录是一个环形缓冲区,其大小受会话设置session_query_ids_history_size (默认 1000) 限制;当历史记录超过该大小时,最旧的条目会被优先淘汰。将其设为 0 则禁用记录;此前已记录的条目仍会保留在表中,直到被 TRUNCATE 或淘汰。
该设置在查询开始时、解析查询之前读取,因此查询自身的 SETTINGS 子句不会影响该查询是否被记录;请改用 SET、HTTP URL 参数或 settings profile。
TRUNCATE
TRUNCATE TABLE system.session_query_ids 会清除当前会话的历史记录。序列计数器不会重置,因此在同一会话内 sequence_number 的值不会被重复使用。
列
Example
运行几个查询,然后从system.query_log 中拉取它们的详细信息:
system.query_log,可以获取时间戳、status 以及所有其他详细信息:
参见
- system.query_log - 已执行查询的详细信息。
session_query_ids_history_size设置。