如何测量 MySQL 服务器的当前负载?

Posted

技术标签:

【中文标题】如何测量 MySQL 服务器的当前负载?【英文标题】:How to measure current load of MySQL server? 【发布时间】:2009-10-01 15:23:22 【问题描述】:

我知道我可以测量不同的东西,如 CPU 使用率、RAM 使用率、磁盘 IO 等,但是否有通用的负载测量,例如服务器处于 40% 负载等?

【问题讨论】:

【参考方案1】:
mysql> SHOW GLOBAL STATUS;

找到here。

【讨论】:

我相信 OP 想要一个单一的负载度量,而不是状态查询提供的细粒度细节。 没有明确要求此要求。【参考方案2】:

“40% 负载”的概念并没有明确定义。您的特定应用程序可能会对不同资源的限制做出不同的反应。应用程序通常会受到以下三个因素之一的约束:可用(物理)内存、可用 CPU 时间和磁盘 IO。

在 Linux(或可能的其他 *NIX)系统上,您可以使用 vmstatiostat(提供有关磁盘 IO 的更多详细信息)获取这些快照。

但是,要将这些连接到“40% 负载”,您需要了解数据库在典型负载下的性能特征。最好的方法是在不同负载量下使用典型查询进行测试,直到您观察到响应时间急剧增加(这意味着您遇到了内存、CPU 或磁盘的瓶颈)。此负载应视为您不想超过的临界水平。

【讨论】:

【参考方案3】:

使用 top 或 htop 可以实时跟踪 Linux 中的使用情况

【讨论】:

top 不显示磁盘使用情况,并且在大多数情况下,对于数据库来说,磁盘使用情况更为重要【参考方案4】:

是否有通用的负载度量,例如服务器处于 40% 负载?

是的!有:

SELECT LOAD_FILE("/proc/loadavg")

在 linux 机器上工作。它显示过去 1、5 和 15 分钟的系统负载平均值。

系统负载平均值是处于可运行或不可中断状态的平均进程数。处于可运行状态的进程要么正在使用 CPU,要么正在等待使用 CPU。 处于不可中断状态的进程正在等待一些 I/O 访问,例如等待磁盘。取三个时间间隔的平均值。负载平均值未针对数量进行标准化 系统中的 CPU,因此平均负载为 1 意味着单个 CPU 系统一直在加载,而在 4 CPU 系统上则意味着它有 75% 的时间处于空闲状态。

所以如果你想规范化,你还需要计算 cpu 的数量。

你也可以这样做

SELECT LOAD_FILE("/proc/cpuinfo")

另见'man proc'

【讨论】:

两个函数都返回一个 NULL 值。在 Ubuntu 和 Osx 上都试过【参考方案5】:

在基于 linux 的系统上,标准检查通常是正常运行时间,根据here 描述的指标返回负载索引。

【讨论】:

【参考方案6】:

除了这个页面上所有的好答案(SHOW GLOBAL STATUS、VMSTAT、TOP...)之外,还有一个由 Jeremy Zawodny 编写的非常简单易用的工具,非常适合非管理员用户。它被称为“mytop”。更多信息@http://jeremy.zawodny.com/mysql/mytop/

【讨论】:

【参考方案7】:

嗨,朋友,根据我的研究,我们有一些命令,例如

MYTOP:使用PERL语言编写的开源程序 MTOP: 也是一个基于 PERL 编写的开源程序,它的工作方式与 MYTOP 相同,但它会监控耗时较长的查询,并在特定时间后将其杀死。

Link for details of above command

【讨论】:

以上是关于如何测量 MySQL 服务器的当前负载?的主要内容,如果未能解决你的问题,请参考以下文章

如何在负载测试期间测量 CPU 和内存

测量同一服务器上特定 IIS 网站的 CPU 负载

MySQL慢查询的可能原因及解决思路

如何测量复制mongo数据库的时间?

如何使用 nodejs 将消息发送到 RabbitMQ 队列

系统负载高,如何排查?