Kev 建议这个问题(https://stackoverflow.com/questions/10524981/php-script-to-show-mysql-health-status)更适合这里。
我知道 phpMyAdmin 可以显示 MySQL vars 的列表和类似的东西。
但是我希望有一个脚本来显示,例如,如果 MySQL 配置或某些图形工具有问题,可以查看当前的 MySQL 健康状态。
有没有类似的东西?例如,我如何知道当前设置是否不适合我的机器?
假设我将 innodb 缓冲池大小设置为 64MB,而我的 INNODB 表之一是 1GB。这一点都不好。这只是 innodb 池大小的一个例子。我认为可能还有许多其他设置需要知道基于 Web 的脚本可以帮助监控。
yes123 提出的问题非常相关,因为我们都想知道在不触及使用该数据的应用程序的情况下,我们可以做些什么来提高 MySQL 的性能。什么是让一切变得更好的完美配置?尽管没有一个程序可以简单地吐出完美的配置,但有一些方法可以在不触及任何代码的情况下显着提高服务器的效率。首先,我从服务器的健康状况以及该服务器注定要提供的数据类型开始。
了解 MySQL 数据库服务器的健康状况以及如何更好地配置它必须包括基于大量变量的许多因素。您的 MySQL 服务器用于什么用途,博客、电子商务、报告?您使用的主要引擎是什么,InnoDB、MyISAM?什么是操作系统、Windows、Linux、Unix?是否涉及复制?
了解这一点很重要,因为您配置 MySQL 的方式取决于所有这些因素以及安装 MySQL 的机器的健康状况。通常,人们很快就会将系统范围内的问题归咎于 MySQL。如果您在只有 1 个 CPU、1Gb 内存的服务器上设置 Magento,并且由于您有 1000 个在 Apache 上同时竞争而导致内存不足,这是 MySQL 的错吗?明显不是。
所以在你开始问自己,MySQL 怎么样之前,问问你自己,它安装的服务器怎么样?
例如,在处理 Linux 服务器时,以下是我执行一般健康检查所遵循的步骤
对于 Windows Server,我将使用 perfmon 或进程资源管理器。
如果我没有剩余磁盘空间,没有剩余内存和/或您的网络带宽饱和,则可能不是 MySQL 的错。由于 MySQL 停止工作或超时,我可能认为 MySQL 只是另一个问题的受害者
一个非常好的免费的 Linux 图形程序称为 ksar http://sourceforge.net/projects/ksar/。您可以使用ksar根据 sar 服务收集的统计信息生成图表。sar 可以很容易地安装在 debian 和 centos 上,并收集有关内存、cpu、磁盘、网络使用情况的统计信息。sar 本身会在数字报告中为您提供该信息。ksar 更进一步,将这些信息放入基于时间的图表中,帮助可视化您的服务器在一天中的任何给定时间点或过去任何给定日期的运行状况。
在 Windows 中,您需要可以做同样事情的东西,例如 Process Explorer http://technet.microsoft.com/en-us/sysinternals/bb896653或 perfmon。ksar 和 process explorer 都是免费的。
一旦我消除了服务器或其他应用程序(如 Apache)作为可能的罪魁祸首,那就是我开始研究 MySQL 的时候。
如果有错误日志,我将从 MySQL 的错误日志开始,然后查找磁盘空间错误、表损坏错误或其他突出的消息。如果我没有发现任何异常,我会使用我最喜欢的工具 Jet Profiler http://www.jetprofiler.com。
Jet Profiler为您提供给定时间段内 MySQL 服务器状态的实时统计信息。这比任何给定时刻的简单活动快照要有用得多。了解您的服务器在低高峰和高峰时段的行为最终将揭示基础设施的薄弱环节,这就是 Jet Profiler 的用武之地。它的分析和统计基于服务器随时间推移的工作负载。
查找有问题的查询
作为第一步,我尝试确定哪些有问题的查询。检查顶部查询和慢查询,并比较它们各自的相对线程负载。可能,其中一些会从其他人中脱颖而出(根据 90/10 规则左右)。这些是要关注的查询,因为它们将在每次修复时提供最大的性能改进。
负载模式
负载模式也可能是服务器在大多数时间内运行良好,但有时会出现重复的峰值。放大峰值以发现在该时间范围内哪些查询很繁重将非常有帮助。即,如果您有每天运行一次的繁重 cron 作业,它们可能不会在过去 24 小时内的热门查询中显示得太高,因此您可能不会考虑它们。但是,它们仍然会导致如此多的负载和拥塞,以至于服务器在午夜变得非常缓慢。我分析的一个数据库具有这种模式 - 开发人员添加了每日 cron 作业,这些作业执行各种清理、归档和统计计算。问题是所有作业都从 0 0 * * * 开始。虽然服务器可以处理其中的一两个工作并且仍然为常规网站访问者提供服务,但 5+ 并发工作太多了。所以网站每个午夜都会停机一两分钟。但是除非我们查看那个特定的峰值,否则这些查询可能不会出现。
更进一步,我继续讨论特定于我的 MySQL 表使用 MyISAM 或 InnoDB 的引擎的统计信息。
不过,在此之前,我问自己一个重要的问题。数据库主要是 InnoDB 表还是 MyISAM 表?
MySQL 中的许多生产数据库成为 InnoDB 和 MyISAM 的混合体。这需要对两个引擎的 MySQL 进行优化。
InnoDB 特定信息
MyISAM 特定信息
锁定查询:由于锁定,查询很容易在 MyISAM 表中相互阻塞。Jet Profiler 将向您显示哪些查询被锁定以及在哪些表上。然后,您可以通过将表引擎从 MyISAM 切换到 InnoDB 轻松解决此问题。
MyISAM 缓存:这也应该尽可能接近 100%。如果没有,您可以增加键缓冲区缓存来解决问题和/或构建更好的索引。
接下来我看看全球正在发生什么。
全球因素
关联 KSAR 和 Jet Profiler 统计数据
使用 Ksar 和 Jet Profiler 的图表,您实际上可以将服务器性能图表与 MySQL 的性能图表关联起来。MySQL 开始运行该批处理作业时服务器的行为如何。如果您在 MySQL 处理大量导入时注意到 KSAR 中的大量主要页面错误,而当 MySQL 正在同时为 1000 个用户提供服务时,您看到在 Jet Profiler 中作为 Top Query 运行,那么您可以简单地在存在时运行导入没有那么多传入连接。
然后还有其他因素,例如是否打开了跳过名称解析功能。如果 MySQL 必须花时间解析域名,那么它在检索数据上花费的时间就更少了。我还查看了查询计划缓存以确保它也是 100%
就网络解决方案而言。我开始发现 Zabbix 的乐趣http://www.zabbix.com/。它旨在同时监控多台服务器,但能够提供有关 MySQL 以及所有类型的服务器和技术的非常精确的详细信息。
拥有这样完美的配置是可能的。通过对您的操作系统的透彻了解、对服务器运行状况的智能分析、查询其处理以及您要求它处理的工作负载类型,您可以专注于那些需要您关注的领域。只需在缓冲池中添加几 GB 或获得更快的磁盘可能会提高服务器的性能,但是为什么要在 ram 和更快的磁盘上花钱,因为解决方案可能只需要花费几个小时来分析服务器的工作负载及其如何即使您不在那里监视它也能表现得很好。
这个空间有几个选项。
mysqltuner.pl是缓冲池太小等信息的最爱。开发人员做了一个很好的技巧,您可以通过运行
wget mysqltuner.pl
. 它输出类似的东西正如 PythianMoore 提到的,pt-variable-advisor是另一种选择。它检查与 mysqltuner.pl 不同的东西。例如,它输出
这些是我遇到的人使用的主要两个。祝你好运!
您可以运行此查询来检查 innodb 缓冲池大小。它将根据您的数据库的工作负载、数据大小、索引等对您必须设置的 innodb 缓冲池的实际大小给出建议。
使用这个查询来检查你的 innodb 缓冲池的使用情况