哪一种是MySQL最佳,用户友好的性能工具?我需要帮助来确定我的设置的瓶颈。是SQL语句,设置变量还是其他问题?
坏消息是:有GUI工具可以帮助解决此问题,但这是一项熟练而广泛的工作。因此,它们不能涵盖所有内容,可能您需要使用命令行的东西/ 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连接使用此方法运行相同的查询。当然,它一直在缓慢的查询日志中,但这确实是查看结果的一种快速而明显的方法。