【问题标题】:how to determine slow queries?如何确定慢查询?
【发布时间】:2012-10-14 00:52:31
【问题描述】:

我的网站正在经历一个非常缓慢的加载时间。我怀疑可能是 javascript 或 php 导致加载时间更长,但我已经在 YSlow 中测试了我的网站,它的等级是 B,我认为还不错。

现在我想检查我的数据库,如果查询有问题,数据库索引会导致我的网站加载速度变慢。

是否有一些教程或技巧我可以阅读或尝试测试数据库以确定是否存在慢查询?数据库管理有什么技巧吗?

【问题讨论】:

    标签: mysql indexing database-management mysql-slow-query-log


    【解决方案1】:

    关于 sql 性能的好教程 - focused on MySql。对于连接,如果您无法摆脱它们 - 请使用正确的连接:LEFT JOIN、RIGHT、INNER、OUTER

    【讨论】:

      【解决方案2】:

      我在 PDO(以前位于 MySQL)之上有一个精简的数据库抽象层,我已经烘焙了简单的查询日志记录,我可以打开和关闭它 - 它允许我获取查询报告以及如何每一个都花了很长时间。因此,我可以查看所有查询时间,而不是简单的截断 - 某事要么是长查询,要么不是 - 我可以看到所有的查询时间。

      MySQL 的慢查询日志不错,但它的一秒分辨率不足以满足我的需求。对我来说,很多时候,一个耗时 200 毫秒的查询表明有问题

      我在这里显示我的年龄。在快速查看 MySQL 手册后,发现 MySQL 的 long_query_time 可以指定为自 MySQL 5.1.27 以来的微秒分辨率!尽管如此,我的方法还是很方便的。

      【讨论】:

      • 可以分享一下你使用的方法吗?我会很有帮助,真的很有帮助。
      • 好吧,这一切都很好地嵌入了我自己的数据库处理代码中,因此对其他人的使用可能有限。 Herehere 是完整的代码 = 寻找 debug->starttask( 的使用 - 调试类记录所有内容,我可以稍后将其记录为 $debug->getnoticestext()
      • 我也会尝试这个,我会使用任何可能的方法来做到这一点。谢谢。
      【解决方案3】:

      为了更快地执行查询,我总是回退到 2 条咒语 -

      1. 索引、索引和索引。
      2. 尽量摆脱JOINS

      有一些久经考验的方法可以清除慢查询。您需要打开slow query log。这会记录所有执行时间超过 x 秒的查询。 x 由你在 mysql.conf 中指定。

      一旦慢查询开始记录在日志中。您可以使用EXPLAIN 分析每个查询,并适当添加索引以加快查询执行速度。

      【讨论】:

      • 感谢您的回答。但是我可以为生产服务器设置的最佳 x 秒是多少,在我的本地开发服务器上设置的最佳 x 秒是多少?任何想法?谢谢
      • x 的真正价值确实会有所不同,并且取决于您想要的性能。例如,Google Adsense 在 mysql 上运行,我知道任何花费超过 500 毫秒的东西都被认为很慢。但是如果查询需要 1 秒,我们大多数人都可以接受。你需要问问自己——如果我是用户,我在这个网站上等待的最长时间是多少?
      • 将其设置为 0(捕获所有内容)并通过工具运行日志可能不是一个坏主意,例如 pt-query-digest
      • @TheVedge 所说的很好,但请注意,即使在流量适中的网站中,这也会使查询日志非常快速地变大。再加上您的磁盘 I/O 将飞速发展。
      • 是的,我也这么认为。虽然我的客户有足够的磁盘空间来存储日志,但我知道它可能高达 1Gb+。我如何检查这么大的日志? @Srikar 感谢这些事实。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      相关资源
      最近更新 更多