MySQL数据库服务器逐渐变慢分析与解决方法分享
程序员文章站
2023-12-20 22:46:52
一、检查系统的状态 通过操作系统的一些工具检查系统的状态,比如cpu、内存、交换、磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能...
一、检查系统的状态
通过操作系统的一些工具检查系统的状态,比如cpu、内存、交换、磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可能正等待io的完成。除此之外,还应观注那些占用系统资源(cpu、内存)的进程。
1.使用sar来检查操作系统是否存在io问题
#sar-u210— 即每隔2秒检察一次,共执行20次。
结果示例:
注:在redhat下,%system就是所谓的%wio。
linux2.4.21-20.elsmp (yy075)05/19/2005
10:36:07amcpu%user%nice%system%idle
10:36:09amall0.000.000.1399.87
10:36:11amall0.000.000.00100.00
10:36:13amall0.250.000.2599.49
10:36:15amall0.130.000.1399.75
10:36:17amall0.000.000.00100.00
其中:
%usr指的是用户进程使用的cpu资源的百分比;
%sys指的是系统资源使用cpu资源的百分比;
%wio指的是等待io完成的百分比,这是值得观注的一项;
%idle即空闲的百分比。
如果wio列的值很大,如在35%以上,说明系统的io存在瓶颈,cpu花费了很大的时间去等待i/o的完成。idle很小说明系统cpu很忙。像以上的示例,可以看到wio平均值为11,说明i/o没什么特别的问题,而idle值为零,说明cpu已经满负荷运行了。
2.使用vmstat监控内存 cpu资源
[root@mysql1 ~]# vmstat
procs ———–memory———-—swap– —–io—-–system– —–cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 72 25428 54712672264 0 0 14 43 53 59 1 198 0 0
vmstat 的输出那些信息值得关注?
io bo: 磁盘写的数据量稍大,如果是大文件的写,10m以内基本不用担心,如果是小文件写2m以内基本正常
① cpu问题
下面几列需要被察看,以确定cpu是否有问题
processesinthe run queue (procs r)
usertime (cpu us)
system time (cpu sy)
idle time (cpu id)
问题情况:
如果processes in run queue (procs r)的数量远大于系统中cpu的数量,将会使系统便慢。
如果这个数量是cpu的4倍的话,说明系统正面临cpu能力短缺,这将使系统运行速度大幅度降低
如果cpu的idle时间经常为0的话,或者系统占用时间(cpu sy)是用户占用时间(cpu us)两辈的话,系统面临缺少cpu资源
解决方案 :
解决这些情况,涉及到调整应用程序,使其能更有效的使用cpu,同时增加cpu的能力或数量
②内存问题
主要查看页导入的数值(swap中的si),如果该值比较大就要考虑内存,大概方法如下:
最简单的,加大ram
减少ram的需求
3.磁盘io问题
处理方式:做raid10提高性能
4.网络问题
telnet一下mysql对外开放的端口,如果不通的话,看看防火墙是否正确设置了。另外,看看mysql是不是开启了skip-networking的选项,如果开启请关闭。
通过操作系统的一些工具检查系统的状态,比如cpu、内存、交换、磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可能正等待io的完成。除此之外,还应观注那些占用系统资源(cpu、内存)的进程。
1.使用sar来检查操作系统是否存在io问题
#sar-u210— 即每隔2秒检察一次,共执行20次。
结果示例:
注:在redhat下,%system就是所谓的%wio。
linux2.4.21-20.elsmp (yy075)05/19/2005
10:36:07amcpu%user%nice%system%idle
10:36:09amall0.000.000.1399.87
10:36:11amall0.000.000.00100.00
10:36:13amall0.250.000.2599.49
10:36:15amall0.130.000.1399.75
10:36:17amall0.000.000.00100.00
其中:
%usr指的是用户进程使用的cpu资源的百分比;
%sys指的是系统资源使用cpu资源的百分比;
%wio指的是等待io完成的百分比,这是值得观注的一项;
%idle即空闲的百分比。
如果wio列的值很大,如在35%以上,说明系统的io存在瓶颈,cpu花费了很大的时间去等待i/o的完成。idle很小说明系统cpu很忙。像以上的示例,可以看到wio平均值为11,说明i/o没什么特别的问题,而idle值为零,说明cpu已经满负荷运行了。
2.使用vmstat监控内存 cpu资源
[root@mysql1 ~]# vmstat
procs ———–memory———-—swap– —–io—-–system– —–cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 72 25428 54712672264 0 0 14 43 53 59 1 198 0 0
vmstat 的输出那些信息值得关注?
io bo: 磁盘写的数据量稍大,如果是大文件的写,10m以内基本不用担心,如果是小文件写2m以内基本正常
① cpu问题
下面几列需要被察看,以确定cpu是否有问题
processesinthe run queue (procs r)
usertime (cpu us)
system time (cpu sy)
idle time (cpu id)
问题情况:
如果processes in run queue (procs r)的数量远大于系统中cpu的数量,将会使系统便慢。
如果这个数量是cpu的4倍的话,说明系统正面临cpu能力短缺,这将使系统运行速度大幅度降低
如果cpu的idle时间经常为0的话,或者系统占用时间(cpu sy)是用户占用时间(cpu us)两辈的话,系统面临缺少cpu资源
解决方案 :
解决这些情况,涉及到调整应用程序,使其能更有效的使用cpu,同时增加cpu的能力或数量
②内存问题
主要查看页导入的数值(swap中的si),如果该值比较大就要考虑内存,大概方法如下:
最简单的,加大ram
减少ram的需求
3.磁盘io问题
处理方式:做raid10提高性能
4.网络问题
telnet一下mysql对外开放的端口,如果不通的话,看看防火墙是否正确设置了。另外,看看mysql是不是开启了skip-networking的选项,如果开启请关闭。