Mysql性能排查—主机资源排查方法

Posted 翔之天空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql性能排查—主机资源排查方法相关的知识,希望对你有一定的参考价值。

 

 

 

mysql数据库主机服务器 遇到资源性能问题时的 一般排查方法:

从CPU 、IO 、内存三个方面排查问题:

如下:

 


mysql版本:5.6.34



--mysql运行一个数据量大sql 排序且无索引。  因为是无索引的大量数据 会造成IO和内存压力大,还有无索引的排序  会造成CPU很高
mysql> select  time from table order by  time limit 20;
+---------------------+
| time                |
+---------------------+
| 2017-07-22 10:28:38 |
| 2017-07-22 10:28:41 |
| 2017-07-22 10:29:44 |
| 2017-07-22 10:29:47 |
| 2017-07-22 10:29:48 |
| 2017-07-22 10:29:58 |
| 2017-07-22 10:31:22 |
| 2017-07-22 10:31:52 |
| 2017-07-22 10:32:04 |
| 2017-07-22 10:32:42 |
| 2017-07-22 10:32:45 |
| 2017-07-22 10:32:58 |
| 2017-07-22 10:32:58 |
| 2017-07-22 10:32:59 |
| 2017-07-22 10:33:32 |
| 2017-07-22 10:33:44 |
| 2017-07-22 10:33:46 |
| 2017-07-22 10:33:46 |
| 2017-07-22 10:34:19 |
| 2017-07-22 10:35:12 |
+---------------------+
20 rows in set (2 min 28.48 sec)



--查看会话可以看出有sql在做排序操作  Creating sort index,  可以排查出来。  下面是从系统资源方面的查看
mysql> show processlist;
+----+-------------+-----------+--------------+---------+------+-----------------------------------------------------------------------------+---------------------------------------------+
| Id | User        | Host      | db           | Command | Time | State                     | Info                                                                                          |
+----+-------------+-----------+--------------+---------+------+-----------------------------------------------------------------------------+---------------------------------------------+
| 16 | root        | localhost | sysbendbtest | Query   |    6 | Creating sort index       | select  time from table order by  time limit 20                                               |
| 17 | root        | localhost | NULL         | Query   |    0 | init                      | show processlist                                                                              |
+----+-------------+-----------+--------------+---------+------+-----------------------------------------------------------------------------+---------------------------------------------+
4 rows in set (0.06 sec)




--1、查看cpu  用top工具  查看mysqld的cpu(%CPU)、IO(%wa)、内存(%MEM)都有点高
[root@hostmysql ~]# top

top - 17:33:56 up  3:31,  7 users,  load average: 0.66, 0.23, 0.13
Tasks: 131 total,   1 running, 130 sleeping,   0 stopped,   0 zombie
Cpu0  :  4.2%us,  0.0%sy,  0.0%ni, 76.1%id, 19.4%wa,  0.4%hi,  0.0%si,  0.0%st
Cpu1  : 46.8%us,  8.6%sy,  0.0%ni,  0.0%id, 40.5%wa,  0.0%hi,  4.1%si,  0.0%st
Mem:    489600k total,   483356k used,     6244k free,    12112k buffers
Swap:  4095996k total,   308796k used,  3787200k free,    63644k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                   
2137 mysql      20   0 1752m 285m 2524 S 70.5 59.7   8:16.63 mysqld  
   46 root      20   0     0    0    0 S  1.0  0.0   0:12.42 kswapd0                                                                                                   
   28 root      20   0     0    0    0 S  0.3  0.0   0:03.35 kblockd/0   



--2、查看下整体IO情况  用iostat 查看r/s+w/s为IOPS 是500多、rkB/s+wkB/s是每秒的读写(kb) 也很大  、%util 是IO的使用率也不低
[root@hostmysql mysql_setup]# iostat -x -k -d 3
Linux 2.6.32-573.el6.x86_64 (hostmysql)         09/10/2019      _x86_64_        (2 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.66     0.00  371.85    0.00 39470.20     0.00   212.29     1.81    4.90   2.03  75.60

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda              27.15     0.99  358.94    1.66 39409.27    10.60   218.64     1.76    4.87   2.07  74.67

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  367.44    0.00 43518.94     0.00   236.88     1.18    3.22   1.89  69.27

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.32  512.66    0.65 61055.84     3.90   237.91     1.15    2.24   1.27  65.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  506.31    0.00 60006.64     0.00   237.03     1.03    2.03   1.26  63.72

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.33  512.83    0.66 60386.84     3.95   235.22     1.11    2.17   1.30  66.58

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  502.99    0.00 59817.94     0.00   237.85     1.10    2.19   1.30  65.38

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.33  448.50    1.00 53641.20     5.32   238.69     1.22    2.71   1.53  68.84






--3、用pidstat 综合查看 CPU、内存、IO的具体进程 mysqld的都高
[root@hostmysql ~]# pidstat -u -r -d 3
Linux 2.6.32-573.el6.x86_64 (hostmysql)         09/10/2019      _x86_64_        (2 CPU)


04:44:21 PM       PID    %usr %system  %guest    %CPU   CPU  Command
04:44:24 PM        28    0.00    0.33    0.00    0.33     0  kblockd/0
04:44:24 PM        46    0.00    1.00    0.00    1.00     0  kswapd0
04:44:24 PM      2137   49.17   14.95    0.00   64.12     1  mysqld
04:44:24 PM      5394    0.00    0.66    0.00    0.66     0  pidstat

04:44:21 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
04:44:24 PM      2137      0.00      0.66 1794348 292476  59.74  mysqld
04:44:24 PM      5394    132.89      0.00  101112    900   0.18  pidstat

04:44:21 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:44:24 PM      2137  54706.98      0.00      0.00  mysqld


04:44:24 PM       PID    %usr %system  %guest    %CPU   CPU  Command
04:44:27 PM        46    0.00    1.00    0.00    1.00     0  kswapd0
04:44:27 PM      2137   47.67   14.67    0.00   62.33     1  mysqld
04:44:27 PM      5376    0.33    0.00    0.00    0.33     1  top
04:44:27 PM      5394    0.33    0.00    0.00    0.33     1  pidstat

04:44:24 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
04:44:27 PM      1693      0.67      0.00  386136    692   0.14  automount
04:44:27 PM      2137      0.00      0.67 1794348 292484  59.74  mysqld
04:44:27 PM      5394    135.33      0.00  101112    932   0.19  pidstat

04:44:24 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:44:27 PM      2137  46729.33      0.00      0.00  mysqld




--4、用perf工具可以具体的看出 哪个函数占用cpu高,这里为mysqld的row_search_for_mysql(查找记录函数)和filesort(排序函数  说明有sql在做排序操作) 。
注:mysqld的buf_calc_page_new_checksum 函数是对page头的前四个字节checksum重新计算,耗时耗力
[root@hostmysql ~]# perf top -g -p 2137   
Samples: 205K of event 'cpu-clock', Event count (approx.): 3547155648                                                                                                   
  Children      Self  Shared Object       Symbol                                                                                                                       
+   20.76%    19.56%  mysqld              [.] buf_calc_page_new_checksum                                                                                               
+   13.25%     0.02%  libaio.so.1.0.1     [.] io_submit                                                                                                                
+    9.37%     9.37%  [kernel]            [k] _spin_unlock_irqrestore                                                                                                  
+    8.78%     8.78%  [kernel]            [k] finish_task_switch                                                                                                       
+    8.19%     2.76%  mysqld              [.] row_search_for_mysql                                                                                                     
+    6.23%     0.86%  mysqld              [.] ha_innobase::general_fetch                                                                                               
+    6.07%     0.68%  mysqld              [.] filesort                                                                                                                 
+    6.05%     0.70%  mysqld              [.] ha_partition::rnd_next   

 

以上是关于Mysql性能排查—主机资源排查方法的主要内容,如果未能解决你的问题,请参考以下文章

Mysql性能排查—结合操作系统线程 查看mysql中的sql资源消耗

Mysql性能排查—结合操作系统线程 查看mysql中的sql资源消耗

排查MySQL同步延迟思路

redmine在linux上的mysql性能优化方法与问题排查方案

MySQL 集群架构性能问题排查和优化方法 | 进阶技巧

MySql性能优化(排查慢查询SQL)