最好的MySQL性能调优工具?

哪个是MySQL最好的,用户友好的性能工具? 我希望能够帮助我确定设置的瓶颈。 是在SQL语句,设置variables,还是其他的问题?

坏消息是:有GUI工具可以帮助解决这个问题,但是它是一个技术广泛的工作。 所以他们不涵盖一切,它可能需要使用命令行的东西/ SQL语句等来帮助。 我只使用了命令行工具。 我将介绍一下我所知道/已经使用过的东西:

首先,你需要一个好的数据库devise。 如果devise不好,你只能到目前为止。 这包括规范化,以及使用适当的字段types。 我想在这里留下这一点,因为我认为它有一点点偏离,而不是你在做什么。

确保MySQL查询caching设置正常,如果可以,给它多一点RAM,并确保你的重要查询没有做任何事情,防止MySQLcaching它们。 例如,在查询中使用NOW()函数会出现明显的原因 – NOW每秒都会改变! 你可以把一个时间戳放到sql中,并使用时间到最近的分钟/小时/天(可以摆脱的最大时间)来让mysql获得一些caching的好处。

开始优化事物:在select前面坚持“EXPLAIN”是查看查询如何执行的方法,并说明如何改进查询。 学习解释输出: http : //dev.mysql.com/doc/refman/5.0/en/using-explain.html您经常可以添加新的索引/添加列到现有的改进的东西。 但是你也会遇到需要重新调整查询的时间。

使用MySQL开始改进性能(假设您不知道问题查询是什么)是检查慢速查询日志 – 它将所有查询logging到文件中的时间超过x秒。

概述,包括configuration如果它不logging这已经在这里: http : //dev.mysql.com/doc/refman/5.0/en/slow-query-log.html – 我也发现,设置long_query_time 0一天左右,这样所有的查询logging在这里与时间,是一个有用的方式来得到一个确切的性能的去向的想法。 但我不会马上去那里! 不要离开它,日志可能会变得庞大。

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

它可以做的不仅仅是慢查询日志分析 – 阅读手册。 但要解释它对慢日志的作用:慢查询日志可能包含大量数据,因此可能很难确定哪些查询是最昂贵的整体 – 例如:运行次数和两次查询的因素实际上和where子句中的一个不同的id是一样的。

MySQL的所有这一切都为你。 它通过日志运行,并且可以将在where子句中相同/具有不同值的查询分组。 然后,它会根据总执行时间(默认情况下)显示前10个查询 – 这通常会带来一些惊喜,但通常是最有效的起点 – 接受最昂贵的查询并使用EXPLAIN,看看是否可以改进它。

有些查询需要很长时间,不能轻易改进。 在这种情况下,您可以以其他方式获取数据,或者至lesscaching它吗? 您甚至可能会发现需要更改数据库模式。 同样,有些查询可能位于mysqlsla输出的顶部,因为您运行它们很多(特别是如果long_query_time设置为0,则为true),即使它们运行得非常快。 也许有时间添加一些caching到你的应用程序?

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

一个完全独立的东西要看看:PHPMYADMIN中的“状态”页面(或者你可以运行所有的查询来生成这个信息….) – 它突出了它认为可能是红色的坏东西,并可以帮助你看看你可能从哪里获得分配系统资源的好处。 我对此一无所知 – 我的方法一直是,如果有什么东西是红色的,看起来不好,去阅读它,并决定它的重要性,以及我是否应该做一些事情(通常意味着分配更多的资源给MySQL通过更改configuration)。

我们发现,如果你正在运行Show PROCESSLIST,你可能还会对以下服务造成很大的帮助: 虽然它只是给你活的(当然是一个快照)信息,它可以帮助你了解特定时间发生了什么,特别是如果你刷新几次,观察变化。 我最近发现一个服务器使用每个可用的mysql连接来运行一个相同的查询使用这种方法。 当然,这应该是在慢查询日志,但这是一个非常快速和明显的方式来看看是什么。

EXPLAIN是你的朋友。 除此之外,您必须依靠特定工具,testing和操作系统工具的混合来查看到底发生了什么。

很多事情可以从操作系统工具(有助于判断一个情况是CPU还是IO界限)或MySQL本身可以看到的各种variables(显示全局variables,显示引擎innodb状态等)中有效地看到。

我觉得有一个性能testing环境是非常重要的。 使用生产级负载(使用负载模拟)在生产级硬件上运行(昂贵但基本)的生产级数据库。

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

不要做人们build议的具体事情,除非你在性能testing环境中testing了它们,发现它们是有益的。

从本质上讲,性能调优通常按以下顺序看三个方面:

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

前两个往往被忽略,而最后一个只有在前两个完成后才能提供帮助。

不要低估减less服务器工作量的重要性 – 使用更小的域,更less的行,更less的列等总是更好。

我发现MONYOG是一个巨大的帮助,当我有一个痛苦的MySQL服务器。

它是一个基于Web的系统,可以全天候分析您的系统,并为您提供更好的系统variables值,caching大小等方面的build议。

它也有一个内置的mysqlslatypes慢查询分析器function。

太糟糕了,这不是免费的。 在这里输入图像说明

MONyog- MySQL Monitor和Advisor有我喜欢的新UI,我主要喜欢这些function:

  1. 查找问题SQL – 使用慢日志,一般日志,PROCESSLIST和PROXY
  2. 关键条件警报,如 – 服务器closures,连接太多等。
  3. 定期监视你自己的查询结果
  4. 复制监视

    等…. 完整的function列表