一、功能
该视图基于 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)