一、导致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 99 0 0

sar使用具体参考:https://www.cnblogs.com/howhy/p/6396437.html

sar -d 输出每一块磁盘的使用信息(-p 显示驱动器名称)

$ sar -d -p 1 10Linux2.6.32-279.el6.x86_64 (GD6-DB-049-db-mysql.idc.vipshop.com) 04/21/2019 _x86_64_ (32CPU)02:02:09 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util02:02:10 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:02:10 PM sdb 1129.59 65.31 18375.51 16.33 0.11 0.09 0.06 6.73

02:02:10 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util02:02:11 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:02:11 PM sdb 1375.51 16.33 20628.57 15.01 0.08 0.06 0.05 7.24

sar -u 统计CPU的使用情况

# sar -u 1 10Linux3.10.0-514.26.2.el7.x86_64 (izuf60bp6kd88idp0no1urz) 04/17/2019 _x86_64_ (1CPU)08:49:16 PM CPU %user %nice %system %iowait %steal %idle08:49:17 PM all 1.00 0.00 0.00 0.00 0.00 99.00

08:49:18 PM all 0.00 0.00 1.01 0.00 0.00 98.99

sar -n 查看网卡信息

DEV显示网络接口信息

EDEV显示关于网络错误的统计数据

NFS统计活动的NFS客户端的信息

NFSD统计NFS服务器的信息

SOCK显示套接字信息

ALL显示所有5个开关。它们可以单独或者一起使用。

# sar -n DEV 1 10Linux3.10.0-514.26.2.el7.x86_64 (izuf60bp6kd88idp0no1urz) 04/17/2019 _x86_64_ (1CPU)09:11:55 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s09:11:56 PM eth0 1.00 1.00 0.06 0.15 0.00 0.00 0.00

09:11:56 PM lo 18.00 18.00 4.43 4.43 0.00 0.00 0.00

IFACE 本地网卡接口的名称

rxpck/s 每秒钟接受的数据包

txpck/s 每秒钟发送的数据库

rxKB/S 每秒钟接受的数据包大小,单位为KB

txKB/S 每秒钟发送的数据包大小,单位为KB

rxcmp/s 每秒钟接受的压缩数据包

txcmp/s 每秒钟发送的压缩包

rxmcst/s 每秒钟接收的多播数据包

其他略,具体参考

4、终极神器perf top查看cpu消耗在哪些系统调用函数

Linux 性能优化工具 perf top

参考: https://www.cnblogs.com/digdeep/p/4896235.html

案例: http://blog.chinaunix.net/uid-20785090-id-4282589.html

perf top -e xxx

1) perf top -e cpu-clock: 查看CPU的使用

2)perf top -e faults : 查看 page faults

3)perf top -e block:block_rq_issue : 查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常。 block_rq_issue 表示 block_request_issue 就是IO请求数。其实从这些可以看出,分析和调查Linux上的各种性能问题,需要我们对Linux内核有比较多的了解,不然恐怕是无从下手的。

三、查看MySQL的整体情况

1、观察show processlist输出中是否有临时表、排序、大量逻辑读、锁等待等状态

检查事务锁

--mysql 5.6

information_schema 简称I_S

innodb_trx

innodb_locks

innodb_lock_waitsSELECT lw.requesting_trx_id AS request_XID, trx.trx_mysql_thread_id asrequest_mysql_PID

, trx.trx_queryAS request_query, lw.blocking_trx_id ASblocking_XID

, trx1.trx_mysql_thread_idas blocking_mysql_PID, trx1.trx_query ASblocking_query

, lo.lock_indexASlock_indexFROMinformation_schema.innodb_lock_waits lwINNER JOIN information_schema.innodb_locks lo ON lw.requesting_trx_id =lo.lock_trx_idINNER JOIN information_schema.innodb_locks lo1 ON lw.blocking_trx_id =lo1.lock_trx_idINNER JOIN information_schema.innodb_trx trx ON lo.lock_trx_id =trx.trx_idINNER JOIN information_schema.innodb_trx trx1 ON lo1.lock_trx_id = trx1.trx_id limit 100 ;

2、观察show engine innodb status输出中是否有大事务、长事务、锁等待等状态

四、干掉垃圾SQL,常用手段

1、用explain、desc观察执行计划

2、用profiling定位sql执行的瓶颈

set profiling=1; //打开分析

run your sql1;

run your sql2;

show profiles;//查看sql1,sql2的语句分析

show profilefor query 1; //查看sql1的具体分析

show profileALL for query 1; //查看sql1相关的所有分析【主要看i/o与cpu,下边分析中有各项意义介绍】set profiling=0;

SHOW profile CPU,BLOCK IO ioFOR query 1;

3、用pt-query-digest分析慢sql

pt-query-digest --user=root --password=admin /home/data/slowlog/slow.log

样例:

slow log分析:

报告最近半个小时的慢查询:

./pt-query-digest --report --since 1800s /var/lib/mysql/slow.log

报告一个时间段的慢查询:

./pt-query-digest --report --since '2014-12-30 14:50:00' --until '2014-12-30 14:59:59' /var/lib/mysql/slow.log

报告只含select语句的慢查询:

./pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' /var/lib/mysql/slow.log

报告针对某个用户的慢查询:

./pt-query-digest --filter '($event->{user} || "") =~ m/^dbapp/i' /var/lib/mysql/slow.log

报告所有的全表扫描或full join的慢查询:

./pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") || (($event->{Full_join} || "") eq "yes")' slow.log

把查询保存到query_review表

./pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_review--create-review-table slow.log

把查询保存到query_history表

./pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_ history--create-review-table slow.log_20140401

./pt-query-digest --user=root –password=abc123--review h=localhost,D=test,t=query_history--create-review-table slow.log_20140402

通过tcpdump抓取mysql的tcp协议数据,然后再分析

tcpdump-s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 >mysql.tcp.txt

./pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

分析binlog

mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql

./pt-query-digest --type=binlog mysql-bin000093.sql > slow_report10.log

分析general log./pt-query-digest --type=genlog localhost.log > slow_report11.log

五、几个窍门

1、mysqld进程消耗CPU长时间超过90%的话,99.9%是因为没用好索引

2、cpu的%sys高的话,大概率是swap或中断不均衡导致,也可能是有多个索引且超高并发写入(更新),或者有很严重的锁等待事件

3、最大的瓶颈通常是在磁盘I/O上,因此尽量用高速磁盘设备

4、如果物理磁盘无法再升级,则通过增加内存提升性能容量

5、遇到无法诊断的问题时,试试perf top来观测跟踪

6、SQL执行慢,有时未必是效率低,也可能是因为锁等待,甚至是磁盘满了

详情戳:https://ke.qq.com/course/392646

装mysql没有反应慢_MySQL反应慢的排查思路(老叶)相关推荐

  1. mysql 查看锁_MySQL反应慢的排查思路

    一.导致MySQL慢可能的因素有 1.计算资源不足 2.系统层面未进行基本的优化,或不同进程间资源抢占 3.MySQL配置不科学(附神器: http://imysql.com/my-cnf-wizar ...

  2. centos得mysql安装教程_Centos下Mysql安装图文教程_MySQL

    Mysql是比较常用的数据库,日常开发中也是采用地比较多.工欲善其事必先利其器,本文特地来讲解下如何在centos(其他linux发行版类似)下安装Mysql.首先准备的材料:Mysql,我这里采用的 ...

  3. mysql cpu 内存占用_MySQL占用内存与CPU过高测试与解决办法

    为了装mysql环境测试,装上后发现启动后MySQL占用内存了很大,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过多少M ...

  4. mysql 安装盒子_Windows2008 装 MySQL 问题

    昨天在2008里装MySQL,遇以了一些问题,装的是mysql-5.6.20-winx64.msi版本,不知道是版本太新还是兼容,还是系统权限配置问题,老是报错,多数是杂乱的错误,这里主要记一下MyS ...

  5. mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件,运行在代码应用和MySQL数据库之间的应用. 前身: corb ...

  6. mysql数据库高可用_MySQL数据库高可用

    一.MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : corb ...

  7. mysql workbench安装出错_MYSQL及MySQL WORKBENCH安装过程遇到的问题及处理方法

    先简单介绍一下MYSQL: MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. MySQL所使用的 SQL 语言是 ...

  8. win10连接mysql服务器频繁断线_MySQL连接数过多导致服务无法正常运行

    [Mysql并发和连接数] mysql并发数:netstat -ant |find /i "ESTABLISHED" |find /i ":3306 " /c ...

  9. mysql 报1055错误_MySQL数据库报1055错误

    有点坑啊,当初装MySQL数据库的时候没有整配置文件,结果MySQL报1055错误的时候,网上的解决办法都说如果需要永久生效的话,只能通过改配置文件实现,but,我没有配置文件,蜜汁尴尬啊 1.已安装 ...

最新文章

  1. 特斯拉AI团队招兵买马:“英雄不问出处”
  2. 解决 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type的问题...
  3. javascript-----DOM文档对象模型
  4. 解析字符串,每8位将2进制转为16进制
  5. Nvidia 显卡区别(quadro、geforce、tesla)
  6. 项目中遇到Cannot read property 'length' of null
  7. Linux内核中ioremap映射的透彻理解
  8. secureCRT按回车键全屏的解决方法
  9. 堆栈溢出回答了我们不知道的Java首要问题
  10. linux必备常用重要命令汇总
  11. Tomcat加载类机制 - 我们到底能走多远系列(14)
  12. 雪花算法详解及存在问题
  13. matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法
  14. 如何在Nintendo交换机上设置家长控制
  15. 计算机网络共享服务器,办公室如何搭建共享服务器或文件共享服务器
  16. 计算机专业助我成长作文600,挫折助我成长作文(精选6篇)
  17. PostgreSQL数据库部署之 :PostgreSQL pgadmin4 the application server could not be contacted
  18. 写出HTML的基本结构的代码,HTML代码基本结构
  19. ISE verilog 综合错误提示:ERROR:Xst:880 - Johnson_source.v line 45: Cannot mix blocking and non blocking
  20. http,post请求

热门文章

  1. Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 区别使用
  2. 云和恩墨全面助力某快递公司 即时保障业务系统持续高效运行
  3. (20)打鸡儿教你Vue.js
  4. joomla添加html,Joomla如何向编辑器中插入内容模板
  5. 还在用通风放味除甲醛呢?专家教你三个小妙招,帮你轻松除甲醛!
  6. Druid 连接池 报错 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
  7. 第019讲:我的地盘听我的
  8. PL/SQL Developer 14
  9. 有测试无损音乐真假的软件,这几招教你辨析真假无损音乐,非常实用!
  10. Arduino Nano与SIM800C通讯