如何衡量mySQL的瓶颈?

时间:2011-07-02 06:50:19

标签: mysql

我们应该查看哪些mySQL服务器变量以及以下问题场景的重要阈值:

  1. CPU绑定
  2. 磁盘读取绑定
  3. 磁盘写入绑定
  4. 对于每种情况,建议使用哪些解决方案来改进它们,而不是获得更好的硬件或将数据库扩展到多个服务器?

1 个答案:

答案 0 :(得分:2)

这是一个复杂的领域。影响三个类别中每个类别的“阈值”重叠很多。

  1. 如果您的操作遇到CPU限制问题,那么您肯定需要查看: (a)数据库的结构 - 是否完全标准化。糟糕的数据库结构会导致复杂的查询进入处理器。 (b)您的索引 - 您的查询所需的一切都已充分索引。缺乏索引可能会严重影响处理器和内存。要检查索引,请执行“EXPLAIN ... your query”。在结果说明中没有使用索引的任何行,您需要仔细查看,如果可能,添加索引。 (c)尽可能使用准备好的陈述。这些可以节省CPU进行相当多的运算。 (d)使用适合您的CPU的更好的编译器和优化。这是一个专用类型,但它可以在这里和那里收集奇怪的额外百分比。

  2. 如果您的操作被读取绑定有问题 (a)确保您尽可能缓存。检查query_cache_limit和query_cache_size的配置变量。这不是一个神奇的修复,但提高这些可以帮助。 (b)如上所述,检查索引。好的索引可以减少需要读取的数据量。

  3. 如果您的操作遇到问题,请写入绑定 (a)查看您是否需要当前拥有的所有索引。索引是好的,但是它们改善查询时间的权衡是维护这些索引会影响编写数据所花费的时间并使它们保持最新。通常情况下,如果有疑问你会想要索引,但有时候你对写一个表比你从中读取表更感兴趣。 (b)可以使用INSERT DELAYED来“排队”写入数据库。请注意,这是一个神奇的修复,通常不合适,但在适当的情况下可以提供帮助。 (c)检查同时严重读取和写入的表格,例如:一个访问列表,不断更新访问者的会话数据,并从中读取。很容易优化一个表来读取和写入,但不是真的可以设计一个表格来擅长两者。如果您遇到这种情况并且它是瓶颈,请考虑是否可以拆分其功能或将使用该表的任何复杂操作移动到临时表,您可以定期更新为块。

  4. 请注意,上面唯一具有主要效果的内容是良好的查询设计/索引。除此之外,您还想开始考虑使用更好的硬件。特别是,您可以从RAID-0阵列中获得很多好处,这对于编写绑定问题没有太大作用,但是可以为读取绑定问题创造奇迹。它可以是一个非常便宜的解决方案,可以大大提升。

    您还错过了列表中的两项内容。

    1. 内存限制。如果您遇到内存问题,那么必须检查可以被编入索引的所有索引。如果由于某种原因您使用了很多与数据库的离散连接,您还可以查看更大的连接池。

    2. 网络绑定。如果你遇到网络限制问题......你可能不是,但如果你是,你需要另一个网卡或更好的网络。

    3. 注意,分析数据库性能的一种简便方法是打开log_slow_queries选项并将long_query_time设置为0以获取所有内容,或者将0.3或类似内容设置为捕获可能保留数据库的任何内容。您还可以打开log-queries-not-using-indexes以查看是否有任何有趣的内容。请注意,这种日志记录可以终止繁忙的实时服务器。在开发盒上试一试即可。

      希望有所帮助。我会对任何人对上述内容的评论感兴趣。