系统变量tidb_stmt_summary_max_sql_lengt和配置参数stmt-summary.max-sql-length 到底谁生效

系统变量tidb_stmt_summary_max_sql_lengt和配置参数stmt-summary.max-sql-length 从官方文档来看,都是与information_Schema.STATEMENTS_SUMMARY 中的sql显示的长度有关,但是这两个参数的真正作用到底是什么呢?
系统变量tidb_stmt_summary_max_sql_length 官方文档说明


配置参数stmt-summary.max-sql-length 官方文档说明

首先可以看到系统变量tidb_stmt_summary_max_sql_length并不是根据配置参数stmt-summary.max-sql-length的值设置的

实验1:
系统变量tidb_stmt_summary_max_sql_length 的值为10
配置参数stmt-summary.max-sql-length的值 为20480


执行下列sql 语句

select sbtest2.k,sbtest3.k,sbtest2.id,sbtest1.k,sbtest1.id,sbtest3.id from sbtest1 join sbtest2 on sbtest1.id=sbtest2.id join sbtest3 on sbtest2.id=sbtest3.id


发现statement summary tables 中 DIGEST_TEXT 的输出和QUERY_SAMPLE_TEXT 的输出都被截断了

实验2:

系统变量tidb_stmt_summary_max_sql_length 的值为20480
配置参数stmt-summary.max-sql-length的值 为10


执行下列sql 语句
select sbtest2.k,sbtest3.k,sbtest2.id,sbtest1.k,sbtest1.id,sbtest3.id from sbtest1 join sbtest2 on sbtest1.id=sbtest2.id join sbtest3 on sbtest2.id=sbtest3.id;

发现statement summary tables 中 DIGEST_TEXT 的输出和QUERY_SAMPLE_TEXT 的输出没有被截断

对这两个参数或者系统变量的作用范围还是有点懵逼

通过上述两个实验,不知道下面的猜想对不对

1 按照官方文档的描述,配置参数stmt-summary.max-sql-length 控制系统表 statement summary tables 中 DIGEST_TEXT 和 QUERY_SAMPLE_TEXT 列的最大显示长度,但从实验1来看,即使配置参数stmt-summary.max-sql-length 将参数设置为20480,但是并没有控制系统表 statement summary tables 中 DIGEST_TEXT 和 QUERY_SAMPLE_TEXT 列的最大显示长度

2 从实验2来看,当配置参数stmt-summary.max-sql-length低于系统变量tidb_stmt_summary_max_sql_length的时候,statement summary tables 中的SQL 字符串能够显示完整长度(包括DIGEST_TEXT 和QUERY_SAMPLE_TEXT )

从这2个实验来看,有个猜想不知道对不对,系统表 statement summary tables 中 DIGEST_TEXT 和 QUERY_SAMPLE_TEXT 列的最大显示长度 实际是由系统变量tidb_stmt_summary_max_sql_length来控制的?

建议注明版本,在v6.0.0之后的版本,配置参数stmt-summary.max-sql-length已经删除,改由系统变量tidb_stmt_summary_max_sql_lengt接管控制。

谢谢大佬分享

+1,v4 ~ v6 的文档得改下 https://github.com/pingcap/tidb/issues/38757