网硕互联技术交流社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2365|回复: 0

MySQL-负载很高排查思路

[复制链接]

主题

帖子

0

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
0
发表于 2018-9-29 10:06:21 | 显示全部楼层 |阅读模式

  工欲善其事必先利其器,我说一下思路
  思路:
  1、确定高负载的类型 htop,dstat命令看负载高是CPU还是IO
  2、监控具体的sql语句,是insert  update 还是 delete导致高负载
  3、检查mysql日志
  4、检查硬件问题
  dstat
  可以看到具体是哪个用户哪个进程占用了相关系统资源,当前CPU、内存谁在使用
  
  1. [root@cc ~]# dstat -l -m -r -c  --top-io --top-mem --top-cpu
  2.   --io/total- ------memory-usage----- --most-expensive- ----most-expensive---- -most-expensive-
  3.   read  writ| used  buff  cach  free|  memory process |     i/o process      |  cpu process   
  4.   1.90   267 |3399M  178M 3892M  400M|php-fpm: poo 372M|init       1682k  647k|flush-202:0  0.1
  5.   0  72.0 |3399M  178M 3892M  400M|php-fpm: poo 372M|php-fpm: po  10k  143k|php-fpm: pool2.0
  6.   0  8.00 |3399M  178M 3892M  399M|php-fpm: poo 372M|nginx: work 228k  229k|php-fpm: pool0.5
  7.   0  88.0 |3399M  178M 3892M  399M|php-fpm: poo 372M|nginx: work 102k  166k|php-fpm: pool 11
  8.   0  38.0 |3399M  178M 3892M  399M|php-fpm: poo 372M|php-fpm: po 787k  650B|php-fpm: pool4.8
  9.   0     0 |3399M  178M 3892M  399M|php-fpm: poo 372M|php-fpm: po 788k  723B|php-fpm: pool1.8
  10.   0   140 |3400M  178M 3892M  399M|php-fpm: poo 372M|nginx: work  38k  154k|php-fpm: pool1.2
  11.   0  12.0 |3400M  178M 3892M  399M|php-fpm: poo 372M|nginx: work 178k  364k|php-fpm: pool1.5
  12.   0     0 |3400M  178M 3892M  399M|php-fpm: poo 372M|nginx: work 758k  639k|php-fpm: pool1.5
  13.   0  12.0 |3400M  178M 3892M  399M|php-fpm: poo 372M|nginx: work 773k  616k|php-fpm: pool2.0
  14.   6.00     0 |3401M  178M 3892M  398M|php-fpm: poo 372M|nginx: work 994k  688k|nginx: worker1.5
  15.   0   272 |3401M  178M 3892M  398M|php-fpm: poo 372M|nginx: work 388k  422k|php-fpm: pool1.5
  16.   0     0 |3400M  178M 3893M  398M|php-fpm: poo 372M|nginx: work 483k  548k|php-fpm: pool1.8
  17.   0  4.00 |3400M  178M 3893M  398M|php-fpm: poo 372M|php-fpm: po 787k  650B|php-fpm: pool1.5
  18.   0  12.0 |3400M  178M 3893M  398M|php-fpm: poo 372M|nginx: work 223k  323k|php-fpm: pool1.5
  19.   0     0 |3400M  178M 3893M  398M|php-fpm: poo 372M|nginx: work 371k  474k|php-fpm: pool7.8
复制代码

  htop
  htop是top的增强版,更直观

  1. [root@cc ~]# htop
  2.   1  [|||||||||||                                                                    12.4%]
  3.   2  [|||||||||                                                                       9.5%]
  4.   3  [|                                                                               1.0%]
  5.   4  [||                                                                              1.9%]
  6.   Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||3394/7869MB]
  7.   Swp[||||||||||||||                                                              75/478MB]
  8.   Tasks: 71, 12 thr; 2 running
  9.   Load average: 0.39 0.39 0.31
  10.   Uptime: 526 days(!), 17:36:38
  11.   PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
  12.   1 root       20   0 19232   396   248 S  0.0  0.0  0:01.86 /sbin/init
  13.   30752 root       20   0 52532    72    56 S  0.0  0.0  0:00.16 ├─ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
  14.   24301 root       20   0  193M  3268  1600 S  0.0  0.0  1:41.43 ├─ /usr/sbin/snmpd -LS0-6d -Lf /dev/null -p /var/run/snmpd.pid
  15.   21361 root       20   0  902M  6500  1308 S  0.0  0.1  0:07.16 ├─ php-fpm: master process (/etc/php-fpm.conf)
  16.   28627 www        20   0  962M  202M  138M S  0.0  2.6  0:34.46 │  ├─ php-fpm: pool www-c
  17.   27537 www        20   0  965M  236M  171M R  1.4  3.0  1:19.64 │  ├─ php-fpm: pool www-c
  18.   27449 www        20   0  961M  251M  189M S  0.0  3.2  1:35.54 │  ├─ php-fpm: pool www-a
  19.   26442 www        20   0  962M  280M  217M S  0.0  3.6  2:29.71 │  ├─ php-fpm: pool www-a
  20.   26310 www        20   0  917M  251M  234M S  1.9  3.2  2:46.45 │  ├─ php-fpm: pool www-a
  21.   26162 www        20   0  962M  297M  233M S  0.0  3.8  2:37.50 │  ├─ php-fpm: pool www-b
  22.   26147 www        20   0  924M  258M  233M S  0.0  3.3  2:38.37 │  ├─ php-fpm: pool www-c
  23.   25717 www        20   0  965M  302M  238M S  0.0  3.8  2:54.50 │  ├─ php-fpm: pool www-c
  24.   24585 www        20   0  964M  324M  260M S  0.0  4.1  4:15.20 │  ├─ php-fpm: pool www-b
复制代码

  
  tcpdump
  抓取mysql包分析,一般抓3306端口的数据
  
  1. [root@cc ~]# tcpdump -i eth0 -A -s 3000 port 3306 > ~/sql.log
复制代码

  然后使用awk,sort,wc 等命令进行分析
  或者
  
  1. [root@cc ~]# tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
  2.   while(<>) { chomp; next if /^[^ ]+[ ]*$/;
  3.   if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) {
  4.   if (defined $q) { print "$qn"; }
  5.   $q=$_;
  6.   } else {
  7.   $_ =~ s/^[ t]+//; $q.=" $_";
  8.   }
  9.   }'
复制代码

  就可以看出最繁忙的sql语句了
  strace
  查看系统调用是否有问题,进程是否堵塞,是否有Broken pipe
  
  1. [root@cc ~]# strace -p 26578
复制代码

  pt-query-digest
  分析mysql慢日志,查看哪些sql语句最耗时
  
  1. [root@cc ~]#  pt-query-digest slow.logs
  2.   # 390ms USER TIME, 10ms system TIME, 15.67M rss, 105.84M vsz  
  3.   # CURRENT DATE: Thu DEC 29 13:22:42 2014  
  4.   # Hostname: test   
  5.   # Files: slow.log  
  6.   # Overall: 776 total, 11 UNIQUE, 0.00 QPS, 0.00x concurrency _____________  
  7.   # TIME range: 2011-09-10 04:03:19 TO 2011-12-29 05:02:51  
  8.   # Attribute          total     MIN     MAX     avg     95%  stddev  median  
  9.   # ============     ======= ======= ======= ======= ======= ======= =======  
  10.   # EXEC TIME          5657s      2s     33s      7s     23s      6s      5s  
  11.   # LOCK TIME            33s       0     19s    43ms    98us   715ms    38us  
  12.   # ROWS sent        323.38k       0 107.36k  426.73    0.99   6.35k       0  
  13.   # ROWS examine     323.39k       0 107.36k  426.74       0   6.35k       0  
  14.   # Query SIZE       217.95k      38     562  287.61  420.77   81.78  284.79  
复制代码

  show processlist
  查看系统到底在干什么
  
  1. mysql> show full processlist;
  2.   +-----------+---------------+---------------------+---------------------+---------+------+---------------+---------------------------+
  3.   | Id        | User          | Host                | db                  | Command | Time | State         | Info                      |
  4.   +-----------+---------------+---------------------+---------------------+---------+------+---------------+---------------------------+
  5.   | 184498848 | testdb_rr1356 | 10.11.211.120:61343 | testdb_rr1356_db121 | Sleep   | 1384 |               | NULL                      |
  6.   | 184508740 | testdb_rr1356 | 10.11.211.120:11809 | testdb_rr1356_db121 | Sleep   |   87 |               | NULL                      |
  7.   | 184509415 | testdb_rr1356 | 10.11.211.120:12760 | testdb_rr1356_db121 | Query   |    0 | NULL          | show full processlist     |
  8.   | 184509451 | testdb_rr1356 | 10.11.211.120:12804 | testdb_rr1356_db121 | Sleep   |   10 |               | NULL                      |
  9.   | 184509528 | testdb_rr1356 | 10.11.211.120:12919 | testdb_rr1356_db121 | Query   |    0 | freeing items | DESCRIBE test_channel     |
复制代码

  检查mysql配置参数是否有问题,引起大量的IO或者高CPU操作
  innodb_flush_log_at_trx_commit 、innodb_buffer_pool_size 、key_buffer_size 等重要参数
  
  1. mysql> show variables like '%innodb%';
  2.   +---------------------------------+----------------------------+
  3.   | Variable_name                   | Value                      |
  4.   +---------------------------------+----------------------------+
  5.   | have_innodb                     | YES                        |
  6.   | ignore_builtin_innodb           | ON                         |
  7.   | innodb_adaptive_flushing        | ON                         |
  8.   | innodb_adaptive_hash_index      | ON                         |
  9.   | innodb_additional_mem_pool_size | 2097152                    |
  10.   | innodb_autoextend_increment     | 8                          |
  11.   | innodb_autoinc_lock_mode        | 1                          |
  12.   | innodb_buffer_pool_size         | 2013265920                 |
  13.   | innodb_change_buffering         | inserts                    |
  14.   | innodb_checksums                | ON                         |
复制代码

  通过show engine innodb status查看当前事务,内存使用
  
  1. mysql> show engine innodb status  \G
  2.   LATEST DETECTED DEADLOCK
  3.   ------------------------
  4.   150731 10:36:50
  5.   *** (1) TRANSACTION:
  6.   TRANSACTION EBFBBEC, ACTIVE 0 sec, process no 20691, OS thread id 47345217033984 inserting
  7.   mysql tables in use 1, locked 1
  8.   LOCK WAIT 5 lock struct(s), heap size 1248, 4 row lock(s), undo log entries 2
  9.   MySQL thread id 143249904, query id 1286731854 10.135.21.120 tybuser2014 update
  10.   #此处具体sql省略
  11.   ----------------------
  12.   BUFFER POOL AND MEMORY
  13.   ----------------------
  14.   Total memory allocated 2058485760; in additional pool allocated 0
  15.   Dictionary memory allocated 819282
  16.   Buffer pool size   122879
  17.   Free buffers       97599
  18.   Database pages     24313
  19.   Old database pages 8954
  20.   Modified db pages  7
  21.   Pending reads 0
  22.   Pending writes: LRU 0, flush list 0, single page 0
  23.   Pages made young 6, not young 0
  24.   0.00 youngs/s, 0.00 non-youngs/s
  25.   Pages read 1049, created 41853, written 30401604
  26.   0.00 reads/s, 0.00 creates/s, 1.75 writes/s
  27.   Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
  28.   Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
  29.   LRU len: 24313, unzip_LRU len: 0
  30.   I/O sum[45]:cur[0], unzip sum[0]:cur[0]
复制代码

  最后通过zabbix或者cacti等监控来查看IO、CPU、MEMORY、磁盘等是否有异常
  这样基本上就可以把问题找出来了
  仅供参考,当然,不同的DBA肯定还有其他更好的方式

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|网硕互联技术交流社区

GMT+8, 2024-4-20 22:22 , Processed in 0.207758 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表