【问题标题】:INFORMATION_SCHEMA.key_column_usage query takes 28 seconds to loadINFORMATION_SCHEMA.key_column_usage 查询需要 28 秒才能加载
【发布时间】:2020-01-22 19:49:37
【问题描述】:

我有一个 Cakephp 3 应用程序正在运行并且 mysql 服务器版本:5.6.32-78.1-log - Percona Server (GPL), Release 78.1, Revision 8bb53b6 of MySQL 和查询 INFORMATION_SCHEMA.key_column_usage 表时的性能真的很差.

SELECT
    * 
FROM
    information_schema.key_column_usage AS kcu 
    INNER JOIN
        information_schema.referential_constraints AS rc 
        ON ( kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME 
        AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA ) 
WHERE
    kcu.TABLE_SCHEMA = 'DBNAME' 
    AND kcu.TABLE_NAME = 'TABLENAME' 
    AND rc.TABLE_NAME = 'TABLENAME'

平均需要 28 秒才能返回 0 行。

我几乎参考了所有帖子,但还没有运气。由于mysql版本大于5.6,我检查了innodb_stats_on_metadata是OFF,请大家帮忙。我将不胜感激..

【问题讨论】:

    标签: mysql cakephp schema innodb information-schema


    【解决方案1】:

    这个语句是 Cakephp 生成的吗?为什么?他们找不到更好的方法吗?

    information_schema 在 8.0 版(及其数据字典)之前实现不佳。

    DBNAME 中有多少张桌子?表越多,需要的时间就越长。

    如果您第二次运行相同的查询,它的运行速度有多快?

    可能是某些设置导致此查询特别慢。你有多少内存? SHOW VARIABLES;SHOW GLOBAL STATUS; 的值是什么?

    【讨论】:

    • 表并不多,但我在 Debugkit SQL 日志中看到 informationm_schema 查询需要 30 秒才能加载并返回 0 行,这意味着如果我运行它不会有任何区别查询或不查询,因为在所有页面中,行都是 0。第二次运行查询时,它被缓存并快速加载,但 30 秒后再次需要时间,可能是由于元数据缓存和 all.u所以我删除了那个查询,我的应用程序应该很快..
    【解决方案2】:

    我们针对 AWS 无服务器 Aurora/MySQL 数据库使用 Cake 3.7。所以我们只能更新 MySQL 版本。在对我们的应用程序进行负载测试时,我们在一定程度上遇到了数据库性能的对数缩放问题。这是由于这些查询堆积如山。为了解决这个问题,我们只需在应用程序配置中的“Datasources”下设置“cacheMetadata”=> true。

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 2017-02-24
      • 1970-01-01
      • 2015-09-02
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多