MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,利用一些Linux常用的命令来查看Mysql对服务器的CUP和I/O使用情况,通过慢查询日志找出有待优化的sql,通过show processlist查看正在执行的sql的情况以及及时kill死锁的sql,通过EXPLAIN分析需要优化的sql语句,除此之外,MySQL内部配置参数也做相应的调整和优化。下面具体来看看:
预计阅读时间:8 分钟
**
**
1) Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量。
2)Top命令显示了实际CPU使用情况,默认情况下,它显示了服务器上占用CPU的任务信息并且每5秒钟刷新一次。你可以通过多种方式分类它们,包括PID、时间和内存使用情况。
3)iostat是sysstat包的一部分。Iostat显示自系统启动后的平均CPU时间(与uptime类似),它也可以显示磁盘子系统的使用情况,iostat可以用来监测CPU利用率和磁盘利用率。
4)Vmstat命令提供了对进程、内存、页面I/O块和CPU等信息的监控,vmstat可以显示检测结果的平均值或者取样值,取样模式可以提供一个取样时间段内不同频率的监测结果。
5)ps和pstree命令是系统分析最常用的基本命令,ps命令提供了一个正在运行的进程的列表,列出进程的数量取决于命令所附加的参数。例如ps –A 命令列出所有进程和它们相应的进程ID(PID),进程的PID是使用其他一些工具之前所必须了解的,例如pmap或者renice。
6)sar程序也是sysstat安装包的一部分。sar命令用于收集、报告和保存系统的信息。Sar命令由三个应用组成:sar用与显示数据;sa1和sa2用于收集和存储数据。默认情况下,系统会在crontab中加入自动收集和分析的操作
7)free命令显示系统的所有内存的使用情况,包括空闲内存、被使用的内存和交换内存空间。Free命令显示也包括一些内核使用的缓存和缓冲区的信息。当使用free命令的时候,需要记住linux的内存结构和虚拟内存的管理方法,比如空闲内存数量的限制,还有swap空间的使用并不标志一个内存瓶颈的出现。
8)pmap命令显示一个或者多个进程使用内存的数量,你可以用这个工具来确定服务器上哪个进程占用了过多的内存从而导致内存瓶颈。
9)strace截取和记录进程的系统调用信息,还包括进程接受的命令信号。这是一个有用的诊断和调试工具,系统管理员可以通过strace来解决程序上的问题。命令格式,需要指定需要监测的进程ID。这个多为开发人员使用。
10)mpstat命令也是sysstat包的一部分。Mpstat命令用于监测一个多CPU系统中每个可用CPU的情况。Mpstat命令可以显示每个CPU或者所有CPU的运行情况,同时也可以像vmstat命令那样使用参数进行一定频率的采样结果的监测。
(1)性能瓶颈定位
Mysql> show status —— 显示状态信息(扩展show status like ‘XXX’)
Mysql> show variables —— 显示系统变量(扩展show variables like ‘XXX’)
Mysql> show innodb status —— 显示InnoDB存储引擎的状态
Mysql> show processlist —— 查看当前SQL执行,包括执行状态、是否锁表等
Shell> mysqladmin variables -u username -p password —— 显示系统变量
Shell> mysqladmin extended-status -u username -p password —— 显示状态信息
我常用的主要有show status和show processlist。
(2)慢查询日志分析法
慢查询日志开启方法有两种,具体如下:
方法1:在配置文件 my.cnf 或 my.ini 中在[mysqld]一行下面加入两个配置参数:
log-slow-queries=/data/mysqldata/slow-query.log
(注:log-slow-queries参数为慢查询日志存放的位置)
long_query_time=2
(注:long_query_time=2中的2表示查询超过两秒才记录)
方法2:通过命令行设置变量来即时启动慢日志查询
(3)explain(执行计划)分析查询
通过explain命令可以得到:
– 表的读取顺序
– 数据读取操作的操作类型
– 哪些索引可以使用
– 哪些索引被实际使用
– 表之间的引用
– 每张表有多少行被优化器查询
(4)profiling 分析查询
profiling默认是关闭的,打开方式 :
mysql>set profiling=1;
**
**
(1)慢查询(分析出问题的sql)开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过慢日志查询可以知道哪些SQL语句执行效率低下。
(2)Explain(显示了mysql如何使用索引来处理select语句以及连接表,通过explain我们可以得知SQL语句的具体执行情况,还可以结合show命令查看执行状态。
(3)Profile(查询到 SQL 会执行多少时间, 并看出CPU/Memory 使用量),通过profiling命令得到更准确的SQL执行消耗系统资源的信息。