防止 SQL 语句被“性能报告”部分中的 MySQL 的 Workbench 截断

Preventing SQL statements from getting truncated by MySQL's Workbench in `Performance Reports` section

最近有人向我介绍了 MySQL 的新功能:performance_schema,它很棒。特别是当它与 MySQL Workbench 的 Performance Reports 结合时。我发现 High Cost SQL Statements 部分非常有用和实用。它只有一个缺点,保存已执行 SQL 语句的 SQL 列在长情况下会被截断。

我相信它被 Workbench 而不是 performance_schema 截断了,但我没有确凿的证据来证明这一点。有谁知道如何获得SQL的完整版本?

我自己想出来了。

MySQL Workbench 的仪表板中显示的信息是使用 sys 数据库中定义的一系列视图提取的。上述视图是基于 performance_schema 数据库中的 table 创建的。负责保存 SQL 语句的字段位于 sys.x$statement_analysis 视图中,该视图依次从 performance_schema.events_statements_summary_by_digest table 中获取。尽管这个字段被定义为LONGTEXT并且可以容纳4G的字符,但是SQL语句在插入时被截断了。

插入 DIGEST_TEXT 的最大字符长度由 max_digest_length 配置控制。它的默认值设置为 1024 并且可以增加到 1048576。但请记住,此配置可以设置在 MySQL 版本更高仅比 5.6.24!!