博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql io过高
阅读量:5879 次
发布时间:2019-06-19

本文共 1106 字,大约阅读时间需要 3 分钟。

背景:

  晚上,公司业务群里发信息说,有玩家在游戏里面赠送别人礼物后,赠送记录在20多分钟以后才出现,延时太高。

问题:

  公司数据库使用mysql,配置了主从。配置的是,游戏程序写数据到主库,读数据到从库。

  数据库服务器主:A

  数据库服务器从:B

 

  1.首先查看了A主上面的赠送记录的库,发现都是正常的。然后查看B从上面赠送记录的库,发现有几个表没有通过过来。

  2.在B从上面查看,从数据库是否正常:  show slave status\G;发现如下问题:

  

根据上面圈出来的参数发现:主从存在延迟,主库执行到了mysql-bin-000077,而从库才执行到mysql-bin-000070,也可以从执行的位置,上面两个_POS看出来有延迟,根据Seconds_Behind_Master发现,大约有365360的延迟。

由上面分析可以发现,从库B虽然已经从主库拉取了所有的binlog,但是执行却没有完成。

show processlist;发现Slave_SQL线程处于:Reading event from the relay log.

经查找发现:由于主库可以并发执行,而从库只有一个slave_sql线程来进行执行,所以当事务多的时候,从库来不及处理就会出现以上情况。

 

查找是哪些资源到了瓶颈:

top发现,loadavg平均在1.7左右,内存,cpu都没有异常。cpu行中的wa%却有些偏高。'状态列'有一个程序处于D状态,即不可终端的睡眠。状态D,一般是由于wait IO造成的所谓“非中断睡眠”。

用iostat, $iostat -x 1 10   发现IO utils%一直出于70%-99%之间,发现是系统IO达到了瓶颈。

用iotop查看是哪些进程在频繁的进行IO操作,发现是mysqld和jdb2/dm-2-8

 

进行相关的优化:

由于主数据库上面也有IO瓶颈,同样是上面两个进程。

进入mysql查看show processlist,发现有1500多个任务,大部分处于sleep状态。(发现了之前公司业务发的,有些玩家登录不上游戏的原因,( ╯□╰ )),mysql配置中,max_connection最大连接数设置的才只有2000,所以很容易到达,然后满了后玩家就进不来了。

对于sleep任务太多的处理:(1)程序里每次连接数据库后,记得关闭数据库。(2)或者,在mysql配置文件中,设置mysql超时时间wait_timout,默认是八小时,设置低一点。

转载于:https://www.cnblogs.com/z-books/p/6389028.html

你可能感兴趣的文章
Web聊天工具的富文本输入框
查看>>
动手实现AsyncTask v1.1
查看>>
java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring EventListener,超时处理和空循环性能优化...
查看>>
Runc和CVE-2019-5736
查看>>
JS专题之数组展开
查看>>
javaScript原型、原型链
查看>>
55. Jump Game
查看>>
理解AJAX
查看>>
Java到底能干嘛?
查看>>
Android4.4 及以下TextView,Button等控件使用矢量图报错
查看>>
CODING 最佳实践:快课网研发效能提升之路
查看>>
记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案
查看>>
vue-router 源码阅读 - 文件结构与注册机制
查看>>
网页视频流m3u8/ts视频下载
查看>>
【Leetcode】75.颜色分类
查看>>
刷前端面经笔记(十一)
查看>>
几款常见的视频格式转换器
查看>>
使用Data URI Scheme优雅的实现前端导出csv
查看>>
第十七天-企业应用架构模式-会话状态模式
查看>>
Bytom BIP-32协议和BIP-44协议
查看>>