2.Parser 模块
Parser 主要是检查关键字的正确语法和拼写,并将文本解析为 AST(抽象语法树)
监控说明:
- 位置:TiDB – Executor – Parse Duration 面板
正常情况下,“Parse Duration” 小于 10ms
Parser 相关问题处理:
-
报错原理解读
- MySQL client 报错内容:“ERROR 1064 (42000): You hava an error in your SQL syntax;…”
- 说明:如果有这个报错,可以明确确认是 Parser 报错
语法报错 log 日志内容:“parser error” and with stack “(Parser).Parse”
- 说明:如果有这个报错,可以明确确认是 Parser 报错
- MySQL client 报错内容:“ERROR 1064 (42000): You hava an error in your SQL syntax;…”
-
Parser 报错判断
- 查看错误消息或日志,是否有报错码 1064 等。
- 在 MySQL 中是否可以执行: MySQL 5.7 语法 MySQL 8.0 部分语法
- 判断 TiDB 是否支持,可以看 parser 文件,来确认 TiDB 已经支持的语法
- 检查 MySQL 的定义
- 当发现语法是 TiDB 支持,如果有报错,可以判断为非预期,需要修复
- 当发现语法是 TiDB 不支持,但是 MySQL 支持,可以向我们提需求做兼容
-
Parser 性能优化
- 使用 prepare 语句遍历解析器阶段
- 简化SQL语句 (如,太多的’ ifnull() '表达式)