装mysql没有反应慢_MySQL反应慢的排查思路(老叶)
一、导致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反应慢的排查思路(老叶)相关推荐
- mysql 查看锁_MySQL反应慢的排查思路
一.导致MySQL慢可能的因素有 1.计算资源不足 2.系统层面未进行基本的优化,或不同进程间资源抢占 3.MySQL配置不科学(附神器: http://imysql.com/my-cnf-wizar ...
- centos得mysql安装教程_Centos下Mysql安装图文教程_MySQL
Mysql是比较常用的数据库,日常开发中也是采用地比较多.工欲善其事必先利其器,本文特地来讲解下如何在centos(其他linux发行版类似)下安装Mysql.首先准备的材料:Mysql,我这里采用的 ...
- mysql cpu 内存占用_MySQL占用内存与CPU过高测试与解决办法
为了装mysql环境测试,装上后发现启动后MySQL占用内存了很大,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过多少M ...
- mysql 安装盒子_Windows2008 装 MySQL 问题
昨天在2008里装MySQL,遇以了一些问题,装的是mysql-5.6.20-winx64.msi版本,不知道是版本太新还是兼容,还是系统权限配置问题,老是报错,多数是杂乱的错误,这里主要记一下MyS ...
- mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置
一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件,运行在代码应用和MySQL数据库之间的应用. 前身: corb ...
- mysql数据库高可用_MySQL数据库高可用
一.MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : corb ...
- mysql workbench安装出错_MYSQL及MySQL WORKBENCH安装过程遇到的问题及处理方法
先简单介绍一下MYSQL: MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. MySQL所使用的 SQL 语言是 ...
- win10连接mysql服务器频繁断线_MySQL连接数过多导致服务无法正常运行
[Mysql并发和连接数] mysql并发数:netstat -ant |find /i "ESTABLISHED" |find /i ":3306 " /c ...
- mysql 报1055错误_MySQL数据库报1055错误
有点坑啊,当初装MySQL数据库的时候没有整配置文件,结果MySQL报1055错误的时候,网上的解决办法都说如果需要永久生效的话,只能通过改配置文件实现,but,我没有配置文件,蜜汁尴尬啊 1.已安装 ...
最新文章
- 特斯拉AI团队招兵买马:“英雄不问出处”
- 解决 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type的问题...
- javascript-----DOM文档对象模型
- 解析字符串,每8位将2进制转为16进制
- Nvidia 显卡区别(quadro、geforce、tesla)
- 项目中遇到Cannot read property 'length' of null
- Linux内核中ioremap映射的透彻理解
- secureCRT按回车键全屏的解决方法
- 堆栈溢出回答了我们不知道的Java首要问题
- linux必备常用重要命令汇总
- Tomcat加载类机制 - 我们到底能走多远系列(14)
- 雪花算法详解及存在问题
- matlab实验数据拟合,利用Matlab对实验数据拟合曲线与函数方法
- 如何在Nintendo交换机上设置家长控制
- 计算机网络共享服务器,办公室如何搭建共享服务器或文件共享服务器
- 计算机专业助我成长作文600,挫折助我成长作文(精选6篇)
- PostgreSQL数据库部署之 :PostgreSQL pgadmin4 the application server could not be contacted
- 写出HTML的基本结构的代码,HTML代码基本结构
- ISE verilog 综合错误提示:ERROR:Xst:880 - Johnson_source.v line 45: Cannot mix blocking and non blocking
- http,post请求
热门文章
- Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 区别使用
- 云和恩墨全面助力某快递公司 即时保障业务系统持续高效运行
- (20)打鸡儿教你Vue.js
- joomla添加html,Joomla如何向编辑器中插入内容模板
- 还在用通风放味除甲醛呢?专家教你三个小妙招,帮你轻松除甲醛!
- Druid 连接池 报错 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
- 第019讲:我的地盘听我的
- PL/SQL Developer 14
- 有测试无损音乐真假的软件,这几招教你辨析真假无损音乐,非常实用!
- Arduino Nano与SIM800C通讯