Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最佳MySQL性能调优工具?_Mysql_Performance - Fatal编程技术网

最佳MySQL性能调优工具?

最佳MySQL性能调优工具?,mysql,performance,Mysql,Performance,哪一个是MySQL最好的、用户友好的性能工具?我想得到帮助,找出我的设置瓶颈。SQL语句、设置变量或其他方面有问题吗?坏消息:有GUI工具可以帮助解决这一问题,但这是一项熟练且广泛的工作。因此,它们并没有涵盖所有内容,您可能需要使用命令行stuff/sql语句等来提供帮助。我只真正使用过命令行工具。我将概述一下我知道/使用过的东西: 首先,您需要一个好的数据库设计。如果设计不好,你只能走这么远。这包括归一化,以及对字段使用适当的类型。我将把这一点留在这里,因为我认为这有点旁敲侧击,而不是你想要的

哪一个是MySQL最好的、用户友好的性能工具?我想得到帮助,找出我的设置瓶颈。SQL语句、设置变量或其他方面有问题吗?

坏消息:有GUI工具可以帮助解决这一问题,但这是一项熟练且广泛的工作。因此,它们并没有涵盖所有内容,您可能需要使用命令行stuff/sql语句等来提供帮助。我只真正使用过命令行工具。我将概述一下我知道/使用过的东西:

首先,您需要一个好的数据库设计。如果设计不好,你只能走这么远。这包括归一化,以及对字段使用适当的类型。我将把这一点留在这里,因为我认为这有点旁敲侧击,而不是你想要的

确保MySQL查询缓存已设置并正常工作,如果可以的话,给它多一点RAM,并确保重要查询没有做任何阻止MySQL缓存它们的事情。例如,在查询中使用NOW()函数可以做到这一点——原因很明显——NOW每秒都会更改!相反,您可以在sql中添加一个时间戳,并使用最接近的分钟/小时/天(您可以避开的最大时间段)的时间来允许mysql获得一些缓存好处

开始优化:在select前面粘贴“EXPLAIN”是查看查询执行情况并确定如何改进查询的方法。学习解释输出:您通常能够添加新索引/向现有索引添加列以改进内容。但您也会遇到需要重新构造查询的情况

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

概述,包括配置,如果它还没有记录这一点,在这里:-我还发现,将long_query_time设置为0一天左右,以便所有查询都记录在这里,并记录所用的时间,这是一个有用的方法,可以准确了解性能的发展方向。但我不会马上去那里!不要让它开着,木头会变得很大

一旦您有了几天的日志记录,我就从这里找到了mysqlsla(mysql慢速日志分析器):这是一个很好的工具

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

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

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

看起来也很有希望-从未使用过它,但是mk query profiler工具应该可以用于进一步研究查询速度慢的原因

还有一件完全不同的事情要看:PHPMYADMIN中的“状态”页面(或者您可以运行所有查询来生成此信息…)-它以红色突出显示它认为可能不好的事情,并可以帮助您查看从分配系统资源中可能获得的好处。我对此不太了解——我的方法一直是,如果某个东西是红色的,看起来不好,就去阅读它,决定它是否重要,以及我是否应该做些什么(通常意味着通过更改配置为MySQL分配更多资源)


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

他是你的朋友。除此之外,您还必须依靠各种特殊工具、测试和操作系统工具来准确地了解正在发生的事情

从操作系统工具(有助于确定某个情况是CPU绑定还是IO绑定)或MySQL本身可以看到的各种变量(显示全局变量、显示引擎innodb状态等),可以有效地看到很多东西

我觉得拥有一个性能测试环境非常重要。在实验室的生产级硬件上运行类似于生产的负载(使用负载模拟)的生产级数据库(价格昂贵但必不可少)

一旦这样做了,您就可以在完全安全的情况下调整任何参数,知道即使它融化了整个服务器,您也可以在不影响任何东西的情况下重建它

不要做人们建议的特定事情,除非你已经在你的性能测试环境中对它们进行了测试,并且发现它们确实是有益的

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

  • 数据库本身的结构(表结构、索引等)
  • 询问
  • 调整服务器参数
前两个经常被忽视,而支持最后一个,即c