暂无图片
暂无图片
10
暂无图片
暂无图片
4
暂无图片

MySQL 性能查看&分析之Top命令

原创 CuiHulong 2025-01-16
735

在Linux中,Top命令详细展示了系统当前的资源使用情况。它能够实时更新并显示系统的整体负载情况、CPU使用率、内存使用情况、交换空间使用情况等信息,帮助用户了解系统的实时运行状态‌,同时显示系统中各个进程的资源使用情况。

在使用MySQL场景中,通过使用Top命令,可以很好的了解性能瓶颈,故障原因等。下面介绍Top命令展示的指标,在MySQL中应对的问题点。

shell # top
top - 11:04:55 up 97 days, 19:37,  2 users,  load average: 0.63, 0.19, 0.06
Tasks: 111 total,   2 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.7 sy,  0.0 ni, 97.9 id,  0.0 wa,  0.7 hi,  0.0 si,  0.0 st
MiB Mem :   1826.7 total,    101.3 free,   1066.2 used,    659.1 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    610.6 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                    
1553087 mysql     20   0 1199896 450476  20140 S   0.0  24.1  48:12.09 mysqld                                                                                     
1758836 mysql     20   0 1109004 444076  44020 S   1.4  23.7   4:35.92 mysqld                                                                                     
    556 root      20   0  236752  81160  74676 S   0.0   4.3   3:04.30 systemd-journal                                                                            
复制

1.整体情况

top显示系统的CPU负载情况。指标如下:

top - 11:04:55 up 97 days, 19:37,  2 users,  load average: 0.63, 0.19, 0.06
复制
指标 说明
11:04:55 表示当前系统时间
up 97 days, 19:3 表示系统运行时间
2 users 表示当前登录用户人数
load average 表示1分钟/5分钟/15分钟 系统负载情况 对于单核cpu 1.0 表示满负载

备注:
这里关键指标load average平均负载。把它比喻成是一条单向马路,把CPU任务比作汽车(假设系统是单CPU单内核):

  • 当车不多的时候,load <1;
  • 当车占满整个马路的时候 load=1;
  • 当马路都站满了,而且马路外还堆满了汽车的时候,load>1;

结合具体情况具体分析,单核场景下(来自互联网,写的很好):

  • 1分钟Load>1,5分钟Load<1,15分钟Load<1:短期内繁忙,中长期空闲,初步判断是一个"抖动",或者是"拥塞前兆"
  • 1分钟Load>1,5分钟Load>1,15分钟Load<1:短期内繁忙,中期内紧张,很可能是一个"拥塞的开始"
  • 1分钟Load>1,5分钟Load>1,15分钟Load>1:短、中、长期都繁忙,系统"正在拥塞"
  • 1分钟Load<1,5分钟Load>1,15分钟Load>1:短期内空闲,中、长期繁忙,不用紧张,系统"拥塞正在好转"

在系统负载方面,多核CPU与多个CPU效果类似,所以考虑负载时,必须考虑这台服务器有几个CPU、每个CPU有几个核心。然后,把系统负载除以总的核心数,只要每个核心的负载不超过1.0,就表明服务器正常运行。通常需要先看15分钟load,如果load很高,再看5分钟和1分钟负载,查看是否有下降趋势。

通过这些指标,可以了解MySQL并发能力情况和执行语句情况。Load高说明,有可能存在以下情况:

  • 并发高,活动连接数非常高
  • 存在大量的慢SQL语句
  • 执行DDL语句

2.任务执行情况

Tasks: 111 total,   2 running, 109 sleeping,   0 stopped,   0 zombie
复制
指标 说明
Tasks 表示进程情况
111 total 总任务数
2 running 运行进程数
109 sleeping 当前睡眠状态数量
0 stopped 停止进程数量载
0 zombie 僵尸进程数量

备注
主要看running执行,zombie僵死进程是否存在。这些任务有可能卡着资源不释放等问题。在MySQL里体现存在一些备份任务 或则 hang住的进程存在,大批量的数据导出导入。

3.cpu使用情况

%Cpu(s):  0.7 us,  0.7 sy,  0.0 ni, 97.9 id,  0.0 wa,  0.7 hi,  0.0 si,  0.0 st
复制
指标 说明
%Cpu(s): 表示这行表示cpu状态
0.3 us: 用户空间
0.7 sy: 内核空间
0.0 ni: 用户定义的优先级
98.9 id: 空闲
0.0 wa: 等待IO的CPU百分比
0.0 hi: 硬中断
0.0 si: 软中断
0.1 st: 虚拟机

备注
这里所有指标都有很大意义。

  • us高说明MySQL处理的并发任务非常多,达到了一定的瓶颈。
  • sy值说明内核处理占用大量cpu资源,通常是MySQL的调用的内置函数比如时间,还有内存不足,需要大量整理内存碎片,同时swap的大量调用。
  • wa因为IO受到大量冲击,大批量操作(删除大量数据,大数据导入导出),binlog落盘需要等待。
  • hi,si, st本身CPU分配的特性有关。st是指虚拟CPU等待实际CPU的时间的百分比,服务器上的另一个虚拟机可能拥有更大更多的CPU时间片,存在大量竞争CPU资源情况。(目前很多MySQL数据库跑在虚拟机上,需要关注下这个指标)

4.内存使用情况

各内存使用情况。

MiB Mem :   1826.7 total,    101.3 free,   1066.2 used,    659.1 buff/cache
复制
指标 说明
KiB Mem: kib 表示单位 mem表示物理内存
total: 总量
free: 空闲
used: 已使用
buff/cache: 内核缓存用量

备注
主要考虑MySQL使用的内存使用是否过高,还有内存泄漏 或 参数和内存策略(vm.swappiness)设置不合理,导致CPU不停的整理碎片情况。

5.交换区状态

使用swap可能导致数据库响应缓慢,swap是硬盘上的一个区域,用于当物理内存不足时暂时存储数据。同时从慢速的硬盘上读取数据。

MiB Swap:      0.0 total,      0.0 free,      0.0 used.    610.6 avail Mem 
复制
指标 说明
KiB Swap: kib 表示单位 Swap表示交换区
total: 总量
free: 空闲
used: 已使用
avail Mem: 可用内存,这部分指标与Swap没关系

备注
在MySQL场景中,体现在内存不足,内核参数(vm.swappiness)设置不合理,numa架构问题,内存泄漏等问题导致的。

详细进程

每个应用都有对应进程ID,同时显示占有的资源情况。

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                    
1553087 mysql     20   0 1199896 450476  20140 S   0.0  24.1  48:12.09 mysqld   
复制
指标 说明
PID: 进程ID
USER: 进程用户
PR: 优先级
NI: NICE 值 取值-20 到19 数值越小优先级越高
VIRT: 进程使用的虚拟内存量
RES: 进程使用的驻留内存量
SHR : 共享内存量
S: 进程状态 S 代表睡眠状态 R代表运行状态 Z 代表僵尸状态 T 停止或者跟踪状态
%CPU: CPU使用率
%MEM: 内存使用率
TIME+: CPU总时间
COMMAND: 具体软件名

备注
通过MySQL的进程,可以查看MySQL实际使用的CPU和内存情况。也可以进一步使用top -H -p <mysqld进程id>
查看CPU飙高的mysql线程,具体SQL语句。

#top -H -p 1821
top - 21:04:24 up 10 min,  1 user,  load average: 0.00, 0.02, 0.04
Threads:  31 total,   0 running,  31 sleeping,   0 stopped,   0 zombie
%Cpu(s):  90.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1867048 total,   390212 free,  1227176 used,   249660 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   454824 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                               
  1942 mysql     20   0 12.327g 1.082g  12004 S  90 60.8   0:00.26 mysqld                                                                                                
  1821 mysql     20   0 12.327g 1.082g  12004 S  90 60.8   0:13.02 mysqld                                                                                                
  1924 mysql     20   0 12.327g 1.082g  12004 S  90 60.8   0:00.00 mysqld   
复制

根据具体PID,定位问题SQL

SELECT a.THREAD_OS_ID,b.id,b.user,b.host,b.db,b.command,b.time,b.state,b.info
FROM performance_schema.threads a,information_schema.processlist b
WHERE b.id = a.processlist_id and a.THREAD_OS_ID=<具体pid>;
复制

总结

Top命令是Linux系统下分析MySQL资源使用情况的利器。其默认安装、使用简便的特点,在日常工作中不可或缺的工具之一。通过使用Top命令对监控和优化MySQL性能有很大的意思。

最后修改时间:2025-02-06 09:23:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

小草
暂无图片
1月前
评论
暂无图片 0
MySQL 性能查看&分析之Top命令
1月前
暂无图片 点赞
评论
鲁鲁
暂无图片
2月前
评论
暂无图片 0
MySQL 性能查看&分析之Top命令
2月前
暂无图片 点赞
评论
星星之火
暂无图片
2月前
评论
暂无图片 0
对于高可用复制关系,这里可以选择两种,一是配置成双主,二是复制通道清理,重新搭建复制通道。
2月前
暂无图片 点赞
评论
筱悦星辰
暂无图片
2月前
评论
暂无图片 0
背上行囊,踏上归途,久别重逢的欢喜会让所有的奔波都值得。
2月前
暂无图片 点赞
评论