怎么查询digest对应的SQL语句

【 TiDB 使用环境】线上、测试、调研
【 TiDB 版本】
【遇到的问题】
集群版本:4.0.6
一个SQL没有commit,通过查看 INFORMATION_SCHEMA.CLUSTER_PROCESSLIST,能够查询到DIGEST,怎么查看这个DIGEST对应的SQL语句呢?

【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

1 个赞

关联下CLUSTER_STATEMENTS_SUMMARY这个表或者STATEMENTS_SUMMARY_HISTORY看看

select QUERY_SAMPLE_TEXT from INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY_HISTORY where DIGEST='xxxxx'

可能slow_query里能查到相应的sql语句

这两个表里面找不到。

根据txn_start_ts或者digest查看cluster_slow_quey表,都没有找到。

时间太久了,被清空了吧。

https://docs.pingcap.com/zh/tidb/v4.0/statement-summary-tables

1 个赞

我刚刚做的测试。

1 个赞

我这边6.1版本测试是可以的。cluster_slow_quey里没有正常,本身执行很快仅仅没提交的不会记录。可以适当调大上面的参数看看,有可能是SQL种类太多,被移除了。

我这个是个人的测试环境。

我感觉cluster_statements_summary(这个视图现在总的记录条数也就15条)这个视图查看出来的信息不准呀,我刚刚执行了一个SQL,然后在这个视图里面就查看不到。

1 个赞

select QUERY_SAMPLE_TEXT from INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY a join INFORMATION_SCHEMA.processlist b on a.DIGEST=b.DIGEST;

试试这个行吗,我这没问题

你这样试一试,看看两次出来的SQL是一样的吗?

SESSION1:

use testdb;

begin;

update t set name=‘aaa’ where id=1;

—查看这个DIGEST对应的SQL

commit;

update t set name=‘bbb’ where id=2;

—查看这个DIGEST对应的SQL

1 个赞

两条都有,因为他们的DIGEST相同。

我测试了好几遍,有时候准,有时候不准,感觉就是INFORMATION_SCHEMA.CLUSTER_STATEMENTS_SUMMARY里面的内容更新的不及时,不准。

1 个赞

重新复测了一遍,还是有问题,过程如下:

tidb_stmt_summary_history_size=24

tidb_stmt_summary_max_sql_length=4096

tidb_stmt_summary_max_stmt_count=200

tidb_stmt_summary_refresh_interval=1800

问题:

多次执行类似 update tabname set name=? where id=? 形式的SQL,查看表中记录的SQL内容,只能看到第一次执行对应的SQL语句。

测试过程:

SESSION1:

begin;

update zjp set name=‘DDD’ where id=3;

SESSION2:

查看这个SQL对应的DIGEST,查看该DIGEST对应的SQL文本

select query_sample_text from information_schema.cluster_statements_summary where digest=‘xxx’;

查看到的文本就是刚才执行的SQL语句。

SESSION1:

commit;将刚才的修改提交

update zjp set name=‘BBB’ where id=2;

SESSION2:

select query_sample_text from information_schema.cluster_statements_summary where digest=‘xxx’;

查看到的文本仍然是第一次执行的SQL文本,没有看到第二次的(update zjp set name=‘BBB’ where id=2;)。

1 个赞
  • DIGEST :这类 SQL 的 digest
  • DIGEST_TEXT :规一化后的 SQL
  • QUERY_SAMPLE_TEXT :这类 SQL 的原 SQL 语句,多条语句只取其中一条

digest是归一化后的SQL计算的指纹

1 个赞

那有什么方法,可以找到这个实际执行的SQL吗?

好像没地能查去,记录SQL信息的就这些地方,前面基本都提到了

把慢日志设置成最小,从慢日志查吧

事务如果不提交的话,慢日志里面应该没有内容。

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。