【 TiDB 使用环境】V5.0.4
【概述】创建SPM,但是程序执行的SQL没有按照强制索引走
1、navicat analyze SQL 发现是按照正确索引走的,但是程序运行始终走的错误索引。
2、如何查看explain SQL是否成功按照SPM执行。
【 TiDB 使用环境】V5.0.4
【概述】创建SPM,但是程序执行的SQL没有按照强制索引走
1、navicat analyze SQL 发现是按照正确索引走的,但是程序运行始终走的错误索引。
2、如何查看explain SQL是否成功按照SPM执行。
5.2版本前可以explain analyze, slow_query视图里有个Plan_from_binding字段
5.2版本后:
使用 explain format = 'verbose' 语句查看 SQL 的执行计划,通过查看 warning 信息确认查询所使用的 binding
程序运行过程中,TiDB大量慢SQL,查看dashboard的慢SQL执行计划,发现走的错误索引,将该慢SQL复制出来到客户端运行正常,查询确实走了SPM。
是否有下一步定位思路?
是不是程序中有什么变量参数设置了? 把系统的和测试的执行计划、表结构发下大家研究下
手动执行慢SQL及执行计划 (3.2 KB) dashboard中的慢SQL及执行计划 (11.5 KB)
show global bindings (852 字节)
1、取了dashboard中的慢查询及执行计划。
2、将dashboard中的慢查询复制到navicat中执行并导出执行计划。
3、dashboard中没有走正确索引,手动执行是按照SPM索引走的。
1、SQL我是从dashboard中点击复制格式化SQL复制出来的,并且依据此SQL再进行的SPM。
2、我手动执行SQL 也是通过dashboard中复制,然后到navicat或者mysql client中执行,手动执行都有走正确索引。
3、该无效索引在其他SQL中有作用,不能invisible。
你把dashboard里的慢SQL复制然做bind,然后从cluster_SLOW_QUERY表复制这个慢SQL执行后使用了之前用dashboard SQL 绑定的执行计划了,是这意思吧
1、我做SPM的SQL是从dashboard复制出来的。
2、我手动执行的SQL也是从dashboard复制出来的。
3、我查询了cluster_SLOW_QUERY,从中复制了SQL出来手动执行,也是可以走SPM的。
得让研发大佬看看了
未解决,等待中。
未解决,继续等待中。
你好,麻烦再提供下这些资料,资料下载失效了。
麻烦通过select version()查看一下TiDB的具体版本。
1、这边是否有设置sql_select_limit 参数呢?
2、确认下运行 query 和 binding 的字符集是不是一致?
1、sql_select_limit 值
2、如何查看程序query和手动binding的字符集?
在执行binding的session里面查看字符集。
查看程序的连接字符串是否有设置字符集。