前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql主从延迟解决办法

Mysql主从延迟解决办法

作者头像
MySQL轻松学
发布2018-03-09 15:22:51
1.9K0
发布2018-03-09 15:22:51
举报
文章被收录于专栏:MYSQL轻松学MYSQL轻松学

1.MIXED模式无索引或SQL慢

在从库上pager grep -v Sleep;show processlist 查看到正在执行的SQL。

解决方法:

a. SQL比较简单, 则检查是否缺少索引,并添加索引。比如update操作where条件没有索引。

b. 另一类是 insert into select from的语句,如果select 里包含group by,多表关联,可能效率会比较低。这类可以到主库把binlog_format改成row。

2. 主库上有大事务,导致从库延时 现象解析binlog 发现类似于下图的情况看

解决方法:

与开发沟通,增加缓存,异步写入数据库,减少直接对db的大量写入。

3. 主库写入频繁,从库压力跟不上导致延时

此类原因的主要现象是数据库的IUD(插改删) 操作非常多,slave由于sql_thread单线程的原因追不上主库。 解决方法:

a. 升级从库的硬件配置,比如ssd、fio

b. 设置日志刷新频率:

set global innodb_flush_log_at_trx_commit=0;

setglobal sync_binlog=0;

  • innodb_flush_log_at_trx_commit=0每秒将log_buffer刷新到logfile,并且将日志同步刷新到磁盘。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
  • innodb_flush_log_at_trx_commit=1每次commit将log_buffer刷新到logfile,并且将日志同步刷新到磁盘
  • innodb_flush_log_at_trx_commit=2 每次commit将log_buffer刷新到logfile,但是flush(刷到磁盘)操作并不会同时进行,每秒将日志刷新到磁盘。

4. 数据库中存在大量myisam表,在备份的时候导致slave延迟

由于xtrabackup工具备份到最后会执行flash tables with read lock,对数据库进行锁表以便进行一致性备份,然后对于myisam表锁,会阻碍salve_sql_thread停滞运行进而导致hang。

该问题目前的比较好的解决方式是修改表结构为innodb存储引擎的表。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MYSQL轻松学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档