【问题标题】:Best MySQL performance tuning tool? [closed]最好的 MySQL 性能调优工具? [关闭]
【发布时间】:2010-09-26 14:35:45
【问题描述】:

对于 MySQL,哪个是最好的、对用户最友好的性能工具?我需要帮助确定我的设置的瓶颈。问题出在 SQL 语句、设置变量还是其他方面?

【问题讨论】:

    标签: mysql performance


    【解决方案1】:

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

    首先,您需要一个良好的数据库设计。如果设计不好,你只能做到这一点。这包括规范化,以及为字段使用适当的类型。我将把这一点留在这里,因为我认为它有点旁白,而不是你想要的。

    确保 MySQL 查询缓存已设置并正常工作,如果可以的话,给它更多的 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 连接来使用这种方法运行相同的查询。当然,它会在慢查询日志中,但这是查看发生了什么的一种非常快速且明显的方式。

    【讨论】:

    • 哇...很高兴看到它在将近一年后被接受:)
    • +1 用于解释,在这里对我的项目有很大帮助!
    • 据我了解,mysqlsla 和 maatkit 合并为 percona 工具包。尽管如此,好的 mysql 慢查询日志查看器是基于 Web 的 github.com/benkaiser/mysql-slow-query-log-visualizer
    • 我认为,如果您想要功能强大且用户友好的东西,Navicat Monitor for MySQL/MariaDB 是您的最佳选择。它有一个查询分析器,专门用于根除滞后查询、死锁等。它还可以监控您可以想象的任何其他指标,包括服务器信息,如服务器负载、可用性、磁盘使用情况、网络 I/O、表锁等. 你应该试一试。我认为这会让你的生活更轻松。
    【解决方案2】:

    EXPLAIN 是你的朋友。除此之外,您必须同时使用临时工具、测试和操作系统工具才能准确了解发生了什么。

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

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

    完成后,您可以在完全安全的情况下调整所需的任何参数,知道即使它融化了整个服务器,您也可以重建它而不会影响任何东西。

    除非您在性能测试环境中对其进行了测试并发现它们确实有益,否则不要执行人们建议的具体操作。

    本质上,性能调优通常按以下顺序着眼于三个方面:

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

    前两个经常被忽略,而最后一个则有帮助,但只有在前两个完成后才能有所帮助。

    不要低估减少服务器需要做的工作量的重要性 - 使用更小的字段、更少的行、更少的列等总是更好。

    【讨论】:

      【解决方案3】:

      我发现MONyog 对我的 mysql 服务器有很大帮助。

      这是一个基于网络的系统,可以 24/7 全天候分析您的系统,并为您提供关于系统变量、缓存大小等更好值的合理建议......

      它还具有内置的 mysqlsla 类型的慢查询分析器功能。

      可惜它不是免费的。

      MONyog- MySQL Monitor and Advisor 有我喜欢的新 UI,我最喜欢这些功能:

      1. 查找问题 SQL - 使用慢日志、一般日志、PROCESSLIST 和通过 PROXY

      2. 在严重情况下发出警报,例如 - 服务器已关闭、连接过多等。

      3. 定期监控自己的查询结果

      4. 复制监控

        等等……Complete feature list

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多