Mysql数据库insert报慢查询
来源:互联网 发布:筑巢奖网络投票排名 编辑:程序博客网 时间:2024/06/15 20:48
原文:http://blog.csdn.net/mchdba/article/details/77758316
同事报告说有个cdb mysql实例最近很慢,写入速度巨慢,而且是间歇性的有的时候每隔7到8分钟就卡一会,有的时候每隔12分钟就卡一会,问他们是否有定时任务在拉数据?他们说没有。
那是否有很多比较慢的sql把io资源消耗光了呢,去看慢查询记录,结果发现一条select都没有,反而是有很多insert语句,见鬼啦,这咋回事呢?
慢查询有很多记录,如下所示,insert on duplicate key update,粗粗一看,肯定是on duplicate key update的问题,如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
但是实际上,准备2条无用的insert into … values… on duplicate key update …..,很快就执行完了,不到0.01s,那为啥那个时候,还有那么多的慢查询记录呢?
去查看了cdb的监控记录,select、udpate、insert没有啥间隙性的尖刀出现,虽然有起伏有上升空间,但是都比较平稳,没有尖刀,大家看下面的图L
想到既然是insert语句,那么就去看binlog日志吧,看下所有的binlog日志,看看那个卡的时间点,到底都执行了些啥操作呢?
结果一看binlog列表,发现binlog每隔8分钟就会flush下,而这个flush的时间和慢查询的时间正好吻合。
binlog日志生成时间:
慢查询记录时间:
OK,那么问题很明显了,binlog日志太大,flush的时候导致binlog写入时间变慢,因为要写入新的binlog,需要时间。解决方案就是调整binlog最大值,将1G降低到128M。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
之后观察了3个小时,再也没有比较慢的insert语句了,而且开发那么反应这段时间也基本没有卡顿的现象了,事情暂时解决了,告一段落啦。
反思,互联网场景中,max_binlog_size值确实不宜过大,这点需要谨记。
问题扩展:
查看当前正在使用的binlog缓存情况:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
查看binlog的cache设置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
binlog_cache_size:
为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存。binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数;binlog_cache_use表示 用binlog_cache_size缓存的次数;当对应的Binlog_cache_disk_use 值比较大的时候而且Binlog_cache_use也比较大的时候,我们可以考虑适当的调高 binlog_cache_size 对应的值
进一步分析:
我们这里可以看到Binlog_cache_disk_use已经是1.27M,而且Binlog_cache_use值为264437761表示已经执行了2亿多次了,而且这2个值一直在变大,就表名,binlog_cache_size远远不够用,所以这里就可以提高binlog_cache_size的值了。
- 1
- 2
- 3
- 4
引申下max_binlog_cache_size:
max_binlog_cache_size 表示的是binlog 能够使用的最大cache 内存大小,当我们执行多语句事务的时候 所有session的使用的内存超过max_binlog_cache_size的值时,就会报错:“Multi-statement transaction required more than ‘max_binlog_cache_size’ bytes ofstorage”,设置太大的话,会比较消耗内存资源;设置太小又会使用到临时文件即disk
- Mysql数据库insert报慢查询
- mysql数据库开启慢查询
- mysqlsla分析MySQL数据库慢查询日志
- 数据库学习--mysql开启慢查询日志
- Mysql数据库的优化,慢查询
- mysql数据库开启慢查询日志
- MySQL数据库慢查询日志开启和查询工具
- MySQL数据库中的日志文件---(3)慢查询日志
- MySQL数据库查询变慢的分析及解决过程
- mysql 数据库优化 慢查询日志的开启
- Mysql数据库优化---2.慢查询(一)
- 通过创建索引解决MySQL数据库查询慢的问题
- MySQL数据库order by 主键(索引) 查询慢解决方案
- mysql 慢查询分析
- mysql 慢查询
- mysql 查询慢分析
- mysql慢查询设置
- mysql 慢查询分析
- mui 封装的Ajax
- LaTeX 中的特殊符号
- Android 多线程断点下载 Okhttp+AsyncTask 封装下载任务
- Android持久化----LitePal
- 双目视觉计算距离
- Mysql数据库insert报慢查询
- 利用session_set_save_handler()函数将session保存到MySQL数据库中
- windows10 激活工具
- Nginx 做代理服务器时浏览器加载大文件失败 ERR_CONTENT_LENGTH_MISMATCH 的解决方案
- Error:Could not resolve all dependencies for configuration ':app:prodDebugCompileClasspath'. Cannot
- 根据ebayno爬取可见信息 本地+数据库
- 深度学习word embedding
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- 对数组中N个整数由小到大排序的几种方法