2  选择数据库,Mysql 高负载排查思路

发布时间:2020-02-04  栏目:数据  评论:0 Comments

正文源自:

开掘标题top命令查看服务器负荷,开采mysql竟然常常百分之七十几的cpu,引起Mysql负载这么高的案由,估算首要应该是索引难点和一些反常SQL语句.排查思路1.明确高负载的项目,top命令看负载高是CPU照旧IO。2.反省慢查询日志,假如前端上了新代码,大概是慢查询引起负载高。3.检查硬件难点,是还是不是磁盘故障难点变成的。4.检查监督检查平台,比较此机器分裂一时候间的载重。记录慢查询编辑Mysql配置文件(my.cnf卡塔尔,在[mysqld]字段增添以下几行:log_slow_queries=/usr/local/mysql/var/slow_queries.log#慢查询日志路线long_query_time=5#笔录SQL查询超过5s的语句log-queries-not-using-indexes=1#记录未有运用索引的sql查看慢查询日志tail/usr/local/mysql/var/slow_queries.log#Time:1303087:56:39#User@Host:user[xxxx]@xxxx[]#Query_time:0.001118Lock_time:0.000301Rows_sent:26Rows_examined:52SETtimestamp=1362711399;SELECT*FROMcomWHEREisused=1ANDcategory_idIN(‘1’)ORDERBYvieworderASC;4个参数Query_time:0Lock_time:0Rows_sent:1Rows_examined:54各自意思为:查询时间锁如时期查询结果行数扫描行数重要看扫描行数多的言语,然后去数据库加上对应的目录,再优化下变态的sql语句。极端气象killsql进度搜索占用cpu时间过长的sql,在mysql下实施如下命令:showprocesslist;鲜明后一条sql处于Query状态,且Time时间过长,锁定它的ID,推行如下命令:killQUE中华VY269815764;注意:杀死sql进程,可能变成数据错失,所以实行前要衡量数据的主要。

tail -f /var/run/mysqld/slow_querys.log

慢日志设置

1 连接数据库

    mysql -h127.0.0.1 -P3306-uroot -pxxxxx;

2  选拔数据库

     use mysql;

3  查看慢日志的设置

    show variables like ‘%query%’;

    long_query_time:单位秒,脚本运维的时光操作这些装置为慢查询

   slow_query_log: 慢日志的按钮

   slow_query_log_file:慢日志保存的不二诀窍

图片 1


介意:杀死 sql进度,恐怕引致数据错失,所以进行前要衡量数据的重大。

翻开慢查询

1 慢日志下载

透过sz 命令把慢日志下载到当地开展剖析

找出占用cpu时间过长的sql,在mysql 下执行如下命令: show processlist; 确定后一条sql处于Query状态,且Time时间过长,锁定它的ID,执行如下命令: kill QUERY 269815764; 

long_query_time

       由于系统在临蓐条件运行了生龙活虎段时间,发掘系统超时的接口的央浼越多,通过服务器的日记发掘相符的接口,有时候会超越2s,  不时候又几百微秒就水到渠成,通过把 接口的 sql拿出去剖析施行,职业量有一点点大。幸而在此之前mysql张开了慢日志的开关,通过对mysql的慢日志举办深入分析,能够解决大多数的难点。


 

set global slow_query_log=ON;set global long_query_time=3;

慢日志剖析

Mysql 高负荷各个调查思路

2.不能将服务器实践的持有查询记录到慢速日志中。即便MySQL普通日志记录了有着查询,可是它们是解析查询此前就记录下来了。那意味常常日志不能包罗诸如实行时间,锁表时间,检查行数等音讯。

背景

  1. 明确高负载的门类,top命令看负载高是CPU依旧IO。
  2. mysql 下实行查看当前的连接数与推行的sql 语句。
  3. 反省慢查询日志,只怕是慢查询引起负载高。
  4. 自小编研讨硬件难点,是不是磁盘故障难点变成的。
  5. 自己商量督察平台,比较此机器分裂时间的载荷。

总结

4数码分析结果

由此上述的一声令下,查找到查询时间相比较长的
sql,找到相应的作业开展优化,优化的思绪:

1 通过规范的涉及减少查询的数据量

2因而确立目录加速查询

3经过工作手段减弱数据量的查询

 
 举例:日常的种类都有分页作用的查询,必要查询到需要的总量据,由于当下亟待出示总量,未有章程制止不查询总数,这些查询会趁着数据量的充实而变慢,只可以通过业务手段实行拍卖,比方只是查询有些时刻段的数量,并非询问全部的数目标数目。

log_slow_queries = /usr/local/mysql/var/slow_queries.log  #慢查询日志路径 long_query_time = 10                    #记录SQL查询超过10s的语句 log-queries-not-using-indexes = 1             #记录没有使用索引的sql 
mysql show variables like 'long%';+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.00 sec)mysql show variables like 'slow%';+---------------------+---------------+| Variable_name | Value |+---------------------+---------------+| slow_launch_time | 2 || slow_query_log | ON || slow_query_log_file | /tmp/slow.log |+---------------------+---------------+3 rows in set (0.00 sec)

3慢日志深入分析的吩咐

-s, 是表示根据何种措施排序,

       c: 访问计数

       l: 锁定时间

       r: 再次来到记录

       t: 查询时间

       al:平均锁准时间

       ar:平均重回记录数

      at:平均查询时间

-t, 是top n的情趣,即为再次来到前面多少条的数目;

-g, 前边能够写叁个正则相配格局,大小写不灵活的;

比如

拿到重返记录集最多的12个SQL。

mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log

收获访谈次数最多的拾个SQL

mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log

获得依据时间排序的前10条里面富含左连接的询问语句。

mysqldumpslow -s t -t 10 -g “left join”
/database/mysql/mysql06_slow.log

其余提出在利用这一个命令时组合 | 和more 使用 ,不然有相当大恐怕现身刷屏的景观。

mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more

top - 10:14:18 up 23 days, 11:01, 1 user, load average: 124.17, 55.88, 24.70 Tasks: 138 total,  1 running, 137 sleeping,  0 stopped,  0 zombie Cpu(s): 2.4%us, 1.0%sy, 0.0%ni, 95.2%id, 2.0%wa, 0.1%hi, 0.2%si, 0.0%st Mem:  3090528k total, 2965772k used,  124756k free,  93332k buffers Swap: 4192956k total, 2425132k used, 1767824k free,  756524k cached        PID USER   PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND 30833 mysql   15  0 6250m 2.5g 4076 S 257.1 49.9 529:34.45 mysqld 

MySQL会将从未应用索引的询问记录到slow
query日志中。无论它推行有多快,查询语句未有接纳索引,都会被记录。一时,有个别未有运用引索的查询不慢(例如扫描超级小的表State of Qatar,但也许有望引致服务器变慢,以至还或然会选用多量的磁盘空间。

2慢日志的格式表达

# Time: 150401 11:24:27

# User@Host: root[root] @ localhost [127.0.0.1] Id: 7

# Query_time: 0.034002 Lock_time: 0.000000 Rows_sent: 3
Rows_examined: 3

use libu;

SET timestamp=1427858667;

select * from aaa;

浅析如下:

(1State of Qatar Time: 试行时间

(2卡塔尔国 User@Host: 试行sql的主机音信

(3) Query_time: sql的实行新闻,

      Lock_time: 锁按期期, 

      Rows_sent: 发送(结果)行数,

      Rows_examined:扫描的行数

(4State of Qatar timestamp: 实践时间

(5) select * from aaa; : 查询语句内容

 

深入分析慢查询日志

相关文章

留下评论

网站地图xml地图