mysql - MySQL CPU 时间本来就这么长吗?

标签 mysql centos

我们最近在一台新服务器上运行了大量复杂的脚本,需要对 MySQL 进行大量监控。服务器一次最多只运行 20 小时。但不管怎样,Mysql的cpu使用时间只是一直持续下去。

我猜测这是注定会发生的,因为它是一个持续运行的服务,但只是想确认这一点。

根据top,mysql已经运行了380:09.23

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1697 mysql     20   0 2687376 504752  10036 S  82.3  6.3 380:09.23 mysqld

最佳答案

MySQL 是一个多线程服务。如果它一次处理多个查询,消耗多个 CPU 核心(在顶部的 CPU 列中显示为超过 100%),则在 TIME+ 列中为这一秒的物理时间添加超过一秒。

您可以通过发出以下命令来监视当前在复合 MySQL 进程中运行的线程

SHOW PROCESSLIST;

在 mysql 控制台中(即您通常向此服务器发出 SQL 语句的位置)。

添加:

我有一个低吞吐量的 MySQL 5.6 实例,自 2018 年 1 月 4 日以来就没有重新启动过。它在 debian、裸机 ARM 上运行,通常不会有很多空闲连接挂起(我现在看到两个) )。从那时起它已经消耗了大约 2225 分钟的 CPU 时间:

$ ps -eo pid,lstart,time,cmd | grep mysql
 3895 Thu Jan  4 23:09:11 2018 1-13:04:45 /usr/sbin/mysqld ...

我还刚刚进行了两次民意调查,它在 140 分钟的物理时间中增加了 15 秒的 CPU 时间:

$ date; ps aux | grep mysql
Tue Oct  1 16:37:16 UTC 2019
mysql     3895  0.2 10.7 439512 223352 ?       Sl    2018 2224:37 /usr/sbin/mysqld

$ date; ps aux | grep mysql
Tue Oct  1 18:57:50 UTC 2019
mysql     3895  0.2 10.7 439512 223352 ?       Sl    2018 2224:55 /usr/sbin/mysqld

因此,至少在这种情况下,在没有执行实际工作的情况下添加 TIME+ 指标是不正常的。

我怀疑在虚拟环境中如果没有相应的 %CPU,TIME+ 可能会增加,但是您仍然需要监视 PROCESSLIST,也许还需要 SHOW ENGINE INNODB STATUS 来捕获在这种情况下消耗 CPU 周期的内容。

关于mysql - MySQL CPU 时间本来就这么长吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183236/

相关文章:

mysql - 如何根据存储在列中的json对象的json键对mysql结果进行排序

mysql 查询 orderby groupby,

php/mysql 不能同时运行同一个文件两次

ruby-on-rails - Rails 应用程序未在默认的 80 端口上运行。但在 80 以外的所有端口上运行

centos - 问 : Where do I get security patches for CentOS 6. 7/6.5

php - 存储大型 session 是否会减慢响应时间和服务器

mysql - 为什么使用 MAX 的相关子查询会返回多行?

php - 我没有将登录用户电子邮件插入数据库

hadoop - 用于安装HAWQ插件的兼容Hortonworks Data Platform(HDP)版本是什么

mysql - 使用 IUS 依赖警告在 Centos 6.5 上升级 MySQL