最好的MySQL性能调优工具?

时间:2008-12-12 08:40:43

标签: mysql performance

哪个是最好的,用户最友好的MySQL性能工具?我想帮助找出我设置的瓶颈。是SQL语句,设置变量还是其他什么问题?

3 个答案:

答案 0 :(得分:74)

坏消息:有GUI工具可以帮助解决这个问题,但这是一项技术娴熟,范围广泛的工作。所以它们并不涵盖所有内容,它可能需要使用命令行stuff / sql语句等来提供帮助。我只是真的使用了命令行工具。我将概述一下我所知道/已经使用过的东西:

首先,您需要一个良好的数据库设计。如果设计不好,你只能到目前为止。这包括规范化,以及使用适当的字段类型。我会在这里留下这一点,因为我认为它有点偏僻,而不是你所追求的。

确保MySQL查询缓存已设置并正常工作,如果可以,请为其提供更多内存,并确保您的重要查询没有做任何阻止mysql缓存它们的操作。例如,在查询中使用NOW()函数可以做到这一点 - 出于显而易见的原因 - NOW每秒都会更改!您可以将时间戳放入sql中,并将时间用于最接近的分钟/小时/天(您可以逃脱的最大时间段),以允许mysql获得一些缓存优势。

开始优化:在select之前粘贴“EXPLAIN”是查看查询执行方式的方法,并确定如何改进查询。学习解释输出:http://dev.mysql.com/doc/refman/5.0/en/using-explain.html您通常可以添加新索引/向现有索引添加列以改进。但是您也会遇到需要重新构建查询的时间。

开始使用MySQL提高性能(假设您还不知道问题查询是什么)是检查慢查询日志 - 它会将所有查询记录到文件中的时间超过x秒。

概述,包括配置,如果它还没有记录这个,请在​​这里:http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - 我还发现将long_query_time设置为0一天左右,以便所有查询都记录在这里,并且花费时间,是一种有用的方法来了解性能的确切位置。但我不会立刻去那里!并且不要把它打开,日志会变得很大。

一旦你有几天的日志记录,我就从这里找到了mysqlsla(mysql慢日志分析器):http://hackmysql.com/mysqlsla是一个很好的工具。

它可以做的不仅仅是慢速查询日志分析 - 阅读手册。但要解释它对慢速日志的作用:慢速查询日志可能包含大量数据,因此很难确定哪些查询总体上最昂贵 - 例如:考虑它们运行的​​次数和两次查询的时间实际上与where子句中的不同id相同。

MySQL sla为您完成这一切。它遍历日志,并可以对where子句中相同/具有不同值的查询进行分组。然后它会(默认情况下)向您显示前10个查询的总执行时间 - 这通常会有一些惊喜,但通常是最有效的起点 - 采取最昂贵的查询并使用EXPLAIN,看看您是否可以改进它

有些查询需要很长时间,而且无法轻易改进。在这种情况下,您可以用另一种方式获取数据,或者至少缓存它吗?您甚至可能发现需要更改数据库架构。类似地,一些查询可能位于mysqlsla输出的顶部,因为你经常运行它们(特别是如果long_query_time设置为0),即使它们运行得非常快。也许是时候为你的应用添加一些缓存了吗?

http://www.maatkit.org/看起来很有前途 - 从未使用它,但mk-query-profiler工具应该对进一步研究查询缓慢的原因有用。

一个完全独立的东西:PHPMYADMIN中的“状态”页面(或者您可以运行所有查询来生成此信息....) - 它突出显示它认为可能是红色的东西,以及可以帮助您了解从分配系统资源中获益的位置。我对此知之甚少 - 我的方法一直是,如果某些东西是红色的并且看起来很糟糕,那就去阅读它并决定它是否重要以及我是否应该做某事(通常意味着为MySQL分配更多资源)通过改变配置。)

最近我发现运行SHOW PROCESSLIST对于正在遭受痛苦的服务器也很有用。虽然它只为您提供实时(好的,实时快照)信息,但它可以帮助您了解在给定时间发生的事情,特别是如果您刷新几次并观察更改。我最近发现一个服务器使用每个可用的mysql连接来使用此方法运行相同的查询。当然,它一直在慢速查询日志中,但这是一个非常快速和明显的方式来查看是什么。

答案 1 :(得分:6)

EXPLAIN是你的朋友。除此之外,您必须依靠ad-hoc工具,测试和操作系统工具的混合来确切了解正在发生的事情。

很多事情都可以从OS工具中有效地看到(有助于确定情况是CPU还是IO绑定)或者可以在MySQL本身看到的各种变量(显示全局变量,显示引擎innodb状态等) )。

我觉得拥有一个绩效测试环境非常重要。获得一个生产规模的数据库,在您的实验室中使用生产级硬件(昂贵但必不可少)运行类似生产的负载(使用负载模拟)。

完成后你可以完全安全地调整你想要的任何参数,知道即使它融化整个服务器你也可以重建它而不会影响任何东西。

除非您在性能测试环境中对其进行测试并发现它们具有可证明的有益效果,否则请勿执行人们建议的特定事项。

基本上,性能调整通常按以下顺序查看三个区域:

  • 数据库本身的结构(表结构,索引等)
  • 查询
  • 调整服务器参数

前两个经常被忽略而支持最后一个,这可能有所帮助,但只有在完成前两个之后。

不要低估减少服务器需要做的工作量的重要性 - 使用更小的字段,更少的行,更少的列等等,总是更好。

答案 2 :(得分:3)

当我有一个痛苦的mysql服务器时,我发现MONyog是一个很大的帮助。

这是一个基于网络的系统,可以全天候分析您的系统,并为您提供更好的系统变量,缓存大小等值的建议......

它还具有内置的mysqlsla类型慢查询分析器功能。

太糟糕了,它不是免费的。 MONyog screenshot: Current Connections

MONyog- MySQL监视器和顾问有我喜欢的新UI,我最喜欢这些功能:

  1. 查找问题SQL - 使用慢速日志,常规日志,PROCESSLIST和PROXY
  2. 警告关键条件,例如 - 服务器关闭,连接太多等等。
  3. 定期监控您自己的查询结果
  4. 复制监控

    等.... Complete feature list