【问题标题】:MySQL "SET NAMES" near the top of the slow query logMySQL“SET NAMES”靠近慢查询日志的顶部
【发布时间】:2010-10-05 12:50:13
【问题描述】:

在最近推出的一个网站上,我注意到,在网站上的实际繁重查询中,在数百万个查询中,成本最高的请求实际上是 SET NAMES,它的平均时钟超过 2.3 秒,而各种多-join 联合查询远低于 2 秒。最后,这将它放在了慢查询日志的顶部附近,我只是想不出优化它的方法。

这似乎不是一个常见的问题,因为我在谷歌上没有发现它的引用。

由于 SET NAMES 是关于排序的,这里是相关信息:

  • MySQL 字符集是 UTF-8 Unicode (utf8)
  • 数据库连接排序规则是 utf8_unicode_ci
  • 数据库及其所有表使用utf8_general_ci

FWIW,这是运行 MySQL 5.0.45-log。数据库服务器是 localhost。

【问题讨论】:

    标签: mysql performance logging


    【解决方案1】:

    如果所有查询都很慢,SET NAMES 在服务器上的优先级可能很低,因此要等到负载停止。如果您有很多其他查询需要很长时间执行,您可能需要先尝试优化这些查询。

    这个“问题”的另一个解决方案,可能是将它添加到服务器上的 my.cnf:

    [mysqld]
    init-connect = 'SET NAMES utf8'
    

    这确保了当客户端连接时字符集设置为 UTF-8,因此客户端不必等待此“查询”的结果。您可能希望在您的软件中禁用 SET NAMES 查询。

    主要是,除非你真的有很多 SET NAMES 需要这么长时间,否则我不会太担心。

    【讨论】:

    • 感谢您的建议。没有那么多慢查询,这就是为什么集合名称在 count*duration 方面是最慢的:它每天吃几分钟,不像实际的繁重查询。我会尝试你的建议几天;我没想过这样使用 my.cnf。
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2015-10-31
    • 2011-01-01
    • 2010-10-09
    相关资源
    最近更新 更多