TDSQL Boundless SLOW_QUERY_OPTIMIZER_TRACE

SLOW_QUERY_OPTIMIZER_TRACE 视图用于查询已持久化到日志文件的慢查询优化器追踪(optimizer trace)记录。当 SQL 执行耗时超过 long_query_time 阈值,且会话已开启 slow_query_optimizer_trace 时,系统会将该 SQL 的 optimizer trace 异步写入日志文件。通过本视图可查询历史记录,便于事后排查优化器决策问题。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、功能

该视图基于 DuckDB 实现,通过读取 <datadir>/optimizer_trace/ 目录下的 NDJSON 日志文件返回结果。查询前建议先执行 FLUSH SLOW_QUERY_OPTIMIZER_TRACE_LOG 确保内存缓冲区中的日志已刷盘。

二、适用版本

TDSQL Boundless V21.6.4.0及以上版本。

三、字段说明

字段名 类型 描述
timestamp TIMESTAMP SQL 执行的时间戳。
thread_id BIGINT UNSIGNED 执行该 SQL 的线程 ID。
txid BIGINT UNSIGNED 执行该 SQL 的事务 ID。
trace_id BIGINT UNSIGNED 该次 optimizer trace 的唯一标识 ID。
user VARCHAR 执行该 SQL 的用户名。
host VARCHAR 执行该 SQL 的客户端主机信息。
schema_name VARCHAR 执行该 SQL 时所在的数据库名。
query_time VARCHAR SQL 执行耗时(秒)。
lock_time VARCHAR SQL 执行期间等待锁的耗时(秒)。
rows_sent BIGINT UNSIGNED 该 SQL 返回给客户端的行数。
rows_examined BIGINT UNSIGNED 该 SQL 在存储引擎层扫描的行数。
rows_affected BIGINT UNSIGNED 该 SQL 影响(插入、更新、删除)的行数。
bytes_sent BIGINT UNSIGNED 该 SQL 返回给客户端的字节数。
rpc_time VARCHAR 该 SQL 执行期间 RPC 通信的总耗时(秒),仅 Proxy 场景有意义。
tdstore_rpc_time VARCHAR 该 SQL 执行期间与存储引擎交互的 RPC 总耗时(秒)。
tdstore_lock_time VARCHAR 该 SQL 执行期间在存储引擎层等待锁的耗时(秒)。
store_real_exec_time VARCHAR 该 SQL 在存储引擎层的实际执行耗时(秒)。
rpc_cntl_retry_delay_time VARCHAR 该 SQL 执行期间因 RPC 重试导致的延迟耗时(秒)。
last_errno BIGINT UNSIGNED 该 SQL 执行返回的最后错误码,0表示无错误。
killed BIGINT UNSIGNED 该 SQL 是否被 KILL 中断,0表示未被中断。
is_proxy BIGINT UNSIGNED 该 SQL 是否通过 Proxy 路由执行,1表示是,0表示否。
executor VARCHAR Proxy 场景下执行该 SQL 的 executor 标识;本地执行的 SQL 为空字符串。
optimizer_trace_enabled BIGINT UNSIGNED 是否成功收集了 optimizer trace,1表示已收集,0表示未收集。
missing_bytes BIGINT UNSIGNED optimizer trace 因内存限制被截断的字节数,0表示未截断。
missing_priv BIGINT UNSIGNED 是否因权限不足导致 trace 不可见,1表示不可见,0表示可见。
query TEXT 执行该 SQL 的完整文本。
trace JSON 完整的 optimizer trace 内容(JSON 格式)。当 trace 因内存限制被截断时,该字段为截断后的字符串。

注意:说明:

四、示例

# 1. 开启慢查询 optimizer trace 收集,并设置慢查询阈值为 0(确保所有 SQL 都落日志)SET SESSION long_query_time = 0;SET SESSION slow_query_optimizer_trace = ON;# 2. 执行目标 SQLSELECT * FROM t1 WHERE id = 1;# 3. 刷盘确保日志已写入文件FLUSH SLOW_QUERY_OPTIMIZER_TRACE_LOG;# 4. 查询历史 optimizer trace 记录SELECT timestamp, thread_id, query_time, query, missing_bytesFROM INFORMATION_SCHEMA.SLOW_QUERY_OPTIMIZER_TRACEORDER BY timestamp DESCLIMIT 10;

输出示例:

+———————+———–+————+——————————–+—————+| timestamp | thread_id | query_time | query | missing_bytes |+———————+———–+————+——————————–+—————+| 2026-07-20 10:30:15 | 42 | 0.000321 | SELECT * FROM t1 WHERE id = 1 | 0 |+———————+———–+————+——————————–+—————+1 row in set (0.01 sec)

# 查看完整 optimizer trace 内容SELECT traceFROM INFORMATION_SCHEMA.SLOW_QUERY_OPTIMIZER_TRACEWHERE query LIKE '%t1 WHERE id = 1%'ORDER BY timestamp DESCLIMIT 1\\G

输出示例:

*************************** 1. row ***************************trace: {"steps": [{"join_preparation": {…}}, {"join_optimization": {…}}], …}1 row in set (0.01 sec)

赞 (0)
上一篇 4天前
下一篇 4天前