[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
其他
> 详细
【案例】复制静止问题一则
时间:
2016-04-14 02:12:32
阅读:
216
评论:
0
收藏:
0
[点我收藏+]
一背景
早上7点多接到一个数据库服务器空间报警,磁盘空间不足。登陆数据库查看,MySQL slave 大量延迟,有68G 的relay log。查看slave status 发现Relay_Log_Pos ,Exec_Master_Log_Pos 位点始终不变,当时的状态展示如下:
二 分析
根据slave 复制的原理可知 relay_log_pos 是指sql_thread 进程读取relay log文件的位点,exec_master_log_pos是sql_thread 执行relay log中相对于 主库master binlog file的位点。那为什么sql_thread 一直显示静止状态呢?
我们如下几个方面思考
1 主机的
IO层面,是否是服务器的io能力不足导致的呢?
从结果上看IO利用率极低,不可能导致sql_thread执行缓慢的或者静止的。
2 sql_thread 等待MySQL的MDL锁,
或者备份的flus table with read lock 等常见的所等待
登陆数据库查看 ,备库无任何业务连接,也没有备份在进行。因此可以排除MySQL 锁层面的问题。
使用 pt-pmp工具查看数据库进程此时的状态,能否获得一些线索
从pt-pmp执行结果上来看,注意 execute_command, reader_loop 函数,说明数据库一直在执行sql语句,只是执行的比较缓慢,循环读取relay log中的event 。我们进一步将问题范围缩小。
3 分析有没有大事务,全表delete 等,
sql_thread将主库的log event重新再备库上执行一遍,遇到全表delete /update且表结构设计不合理导致sql_thread 执行极其缓慢
使用工具分析当前relaylog 具体执行什么事务?
mysqlbinlog ../mysql/relay-bin.000421 --start-position=233450854 > relay.log
果然是有大事务--大批量的delete操作,查询数据库该表有1200w左右的记录,无主键(
在这里给无专职DBA的公司开发提个醒,所有的表务必要创建主键
)且没有任何索引。至此问题的原因找到了,那么如何解决呢?
可以参考的解决方法有
1 提高数据库的写速度。
set global sync_binlog
=
0
set global innodb_log_flush_at_trx_commit
=
0
;
2 在从库给表添加索引
set session sql_log_bin
=
0
;
alter table xxx
add
key idx_curday
(
current_day
)
实际过程中该问题于晚上22点左右将延迟的relaylog应用完毕,该服务器的磁盘为sas 机械盘,io能力较差。如果更换为SSD 存储介质应该会更快一些。
各位读者朋友如果还有其他想法,可以留言相互交流提供更好的解决方法。
三 小结
主从复制结构是大家常用的MySQL 高可用的方案,但是往往由于各种因素,表结构设计不合理,主库大量写,从库备份等原因导致slave延迟,影响整体的可用性。MySQL DBA 一定要仔细review 数据库表结构设计,杜绝这类延迟隐患发生。
关于slave 延迟问题,推荐之前写的拙作 《
常见slave 延迟原因以及解决方法
》。
【案例】复制静止问题一则
原文:http://blog.itpub.net/22664653/viewspace-2079472/
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!