哪一个是MySQL最好的、用户友好的性能工具?我想帮你找出我设置的瓶颈.问题出在SQL语句、设置变量还是其他方面?

推荐答案

坏消息是:有GUI工具可以帮助实现这一点,但这是一项技术娴熟、范围广泛的工作.所以它们并没有涵盖所有内容,您可能需要使用命令行stuff/sql语句等来提供帮助.我只真正使用过命令行工具.我将概述一下我知道/使用过的东西:

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

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

开始优化:将"解释"放在select前面是查看查询执行情况并确定如何改进的方法.学习解释输出:http://dev.mysql.com/doc/refman/5.0/en/using-explain.html你通常能够添加新的索引/向现有索引添加列来改进内容.但您也会遇到需要重新构造查询的情况.

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

概述,包括配置,如果它还没有记录这一点,这里是:http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html-我还发现,设置长_查询_时间为0的一天左右,以便所有查询都记录在这里的时间,是一个有用的方法,以获得准确的性能是go 哪里的 idea .但我不会马上go 那里!别忘了打开,木头会变得很大.

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

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

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

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

http://www.maatkit.org/看起来也很有前途——从未使用过它,但mk查询探查器工具在进一步研究查询速度慢的原因时应该很有用.

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

最近,我发现运行SHOW PROCESSLIST在一个遭受痛苦的服务器上也很有用.虽然它只给你实时(好吧,一个实时快照)信息,但它可以帮助你了解在给定时间发生的事情,尤其是如果你刷新几次并观察变化的话.我最近发现一台服务器使用每一个可用的mysql连接来运行相同的查询.当然,它会出现在慢速查询日志(log)中,但这是一种非常快速和明显的方式来查看发生了什么.

Mysql相关问答推荐

我可以在插件中访问SQL密钥对吗?

MySQL InnoDB:可以在没有回滚损失的情况下从运行的查询中进行大型插入吗

如何获得表中只有最大值行的一个列被另一个列分区?

MariaDB字段+1

如何防止程序中计数器出错

MySQL grant语句中的用户名区分大小写

如何查询一行

错误 2020 (HY000): 数据包大于 'max_allowed_pa​​cket' 字节,docker 容器内出现 mysql 错误

SQL 请求:REPLACE 和通配符 %.如何做正确的事?

任何值的 SQL WHERE 子句?

为什么order by子句可以利用索引?

避免重复进入mysql数据库的最佳方法

Python MYSQL 更新语句

如何在mysql select查询中获取两个日期之间的日期列表

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

在 MySQL Workbench EER 图中的多个列上创建唯一约束

MySQL - 我如何输入 NULL?

在osx的命令行中使用Mysql-找不到命令?

设计用户角色和权限系统的最佳实践?

如何允许 django 管理员将字段设置为 NULL?