如何生成带plan的SQL

【TiDB 使用环境】生产环境
【TiDB 版本】v6.5.2
【操作系统】Centos7.9
【部署方式】
【集群数据量】
【集群节点数】10
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】global_bindings中有hint信息
/+ inl_join(@sel_1 report_database_pro.m), inl_join(@sel_1 report_database_pro.bcrd), hash_join(@sel_1 report_database_pro.s), use_index(@sel_1 report_database_pro.s idx_tms_schedulingbill_scheduling_billcode), use_index(@sel_1 report_database_pro.tsd idx_scheduling_billcode_is_deleted), use_index(@sel_1 report_database_pro.bcrd idx_operation_billcode), use_index(@sel_1 report_database_pro.m idx_customer_data_id)/
如何手动生成这种记录呢?
目的:用于执行计划绑定
binding info.txt (4.6 KB)

同一个SQL,修改连接顺序,性能相差300倍。如果能够生成运行速度快的SQL的hint语句绑定到执行速度慢的SQL,就可以达到快速完成优化目标。
SQL顺序调整前执行时间(148秒)和执行计划:



SQL顺序调整后执行时间(0.4秒)和执行计划:

看看pd的dashboard,上面有慢sql,执行计划如果有多个,可以直接绑定一个。如果只抓到了一个慢的,那就得自己绑定了。

不知道如何操作,有指导文档吗?

你想找的应该是这个,需要修改sql语句
https://docs.pingcap.com/zh/tidb/stable/optimizer-hints/#inl_joint1_name--tl_name-

SELECT /*+ INL_JOIN(t1, t2) */ * FROM t1, t2, t3 
WHERE t1.id = t2.id AND t2.id = t3.id;

不是这种。我希望能对性能差的SQL进行执行计划绑定;绑定的计划来源与手动调整连接顺序的SQL(手动调整SQL连接顺序后,标准化后的SQL与源SQL已经不一致,无法直接绑定)的执行计划(如plan_replayer中 global_bindings.sql里的带hint的SQL)。


EXPLAIN SELECT * FROM t WHERE a < 100 AND b < 100;

EXPLAIN ANALYZE SELECT * FROM t WHERE a < 100 AND b < 100;

SPM 满足你的需求:https://docs.pingcap.com/zh/tidb/stable/sql-plan-management/#执行计划绑定-sql-binding

满足不了

是想修改连接顺序吗?先让bcrd和tsd连接之后再和s连接?
如果是要这种效果可以用hint实现。
https://docs.pingcap.com/zh/tidb/v6.5/optimizer-hints/#leadingt1_name--tl_name-

问题SQL(执行148秒)和调整后的SQL连接顺序是一样的,连接方式不同造成不一样的结果。

当前没这个功能,可以考虑提个产品需求。