一、导致MySQL慢可能的因素有
1、计算资源不足
2、系统层面未进行基本的优化,或不同进程间资源抢占
3、MySQL配置不科学(附神器:http://imysql.com/my-cnf-wizard.html)
4、垃圾SQL满天飞
二、查看系统层面负载手段
1、top查看整体负载情况,快速确认哪个进程系负载高
VIRT:virtualmemory usage 虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存1、除了自身进程的共享内存,也包括其他进程的共享内存2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小3、计算某个进程所占的物理内存大小公式:RES – SHR4、swap out后,它将会降下来
2、free查看内存情况,是否有内存泄露和用了swap等风险
3、vmstat/sar查看当前系统瓶颈到底在哪,如CPU、IO、网络等
# sudo vmstat 1procs-----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo incs us sy id wa st2 0 0 95740 136752 729052 0 0 0 4 8 4 0 0 100 0 0
0 0 0 95740 136752 729088 0 0 0 0 353 1038 1 0 99 0 0
0 0 0 95740 136752 729088 0 0 0 0 332 1016 1 1 98 0 0
0 0 0 95740 136752 729088 0 0 0 0 329 993 0 0 100 0 0
0 0 0 95616 136752 729088 0 0 0 0 345 1036 1 0 99 0 0
3 0 0 95616 136752 729088 0 0 0 68 340 1012 0 1