哪个是最好的,用户最友好的MySQL性能工具?我想帮助找出我设置的瓶颈.是SQL语句,设置变量还是其他问题?
坏消息:有GUI工具可以帮助解决这个问题,但它是一个技术娴熟,范围广泛的工作.所以它们并不涵盖所有内容,它可能需要使用命令行stuff/sql语句等来提供帮助.我只是真的使用了命令行工具.我将对我知道/使用过的事情进行一些概述:
首先,您需要一个良好的数据库设计.如果设计不好,你只能到目前为止.这包括规范化,以及使用适当的字段类型.我会在这里留下这一点,因为我认为它有点偏僻,而不是你所追求的.
确保MySQL Query Cache已设置并正常工作,如果可以,请为其提供更多RAM,并确保您的重要查询没有做任何阻止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连接来使用此方法运行相同的查询.当然,它一直在慢速查询日志中,但这是一个非常快速和明显的方式来查看是什么.
EXPLAIN是你的朋友.除此之外,您必须依靠ad-hoc工具,测试和操作系统工具的混合来确切了解正在发生的事情.
从OS工具(有助于确定情况是CPU还是IO绑定)或者可以在MySQL本身中看到的各种变量(显示全局变量,显示引擎innodb状态等)中可以看到很多事情.
我觉得拥有一个绩效测试环境非常重要.获得一个生产规模的数据库,其中包含在您的实验室中生产级硬件上运行的类似生产的负载(使用负载模拟)(昂贵但必不可少).
一旦你完成了这个,你可以完全安全地调整你想要的任何参数,知道即使它融化了整个服务器你也可以重建它而不会影响任何东西.
除非您在性能测试环境中对它们进行测试并发现它们具有可证明的有益效果,否则不要做人们建议的具体事情.
从本质上讲,性能调优通常按以下顺序查看三个区域:
数据库本身的结构(表结构,索引等)
查询
调整服务器参数
前两个经常被忽略而支持最后一个,这可以帮助但只有在前两个完成之后.
不要低估减少服务器需要做的工作量的重要性 - 使用较小的字段,较少的行,较少的列等,总是更好.