zoukankan      html  css  js  c++  java
  • 深入理解Mysql数据库主从延迟

    1什么会增加主从延迟?

    1 网络不好
    2 从库硬件差
    3 索引没做好,从库执行慢
    4 从库锁等待,多见于myisam
    5 主库写频繁,从库单线程执行慢
    6 使用row复制,或mix使用行复制

    2如何优化,减少延迟时间?

    1 如何写频繁,水平拆分,减少单片写数量
    2 避免复杂DML操作

    3几个因为主从延迟发送异常的场景

    1 一个事务内有读和写操作
    2 修改后紧接着接口访问

    4业务上如何解决主从延迟?

    解决这个问题有以下几个思路:

    1. 流程优化避免写后立即读取
    	a 业务流程上:写完成后接口返回,客户端再次调用接口获取数据,在这个过程中同步已经完成;
    	b 代码上:写完成后缓存结果到局部变量,内存或缓存中,下次读取直接走缓存;
    
    
    2. 避免主从延迟,保证读写强一致性
    	 a  如果是一主一从,可以使用数据库提供的半同步复制,写完成时会等待从库同步完成后返回;但是强一致性会降低写吞吐量
    	 b  mysql5.6以后可以使用semi-sync功能,实现强一致性;
    	 c  线上读写都是使用主库,从库只做线下运营,分析使用;为了缓解数据库读写压力,在数据库上架构缓冲层;
    
    3. 强制读走主库
    
    4. 配置经验延迟时间,延迟时间范围内的查询走主库;
    	  a 中间件实现。很多中间件提供这种配置
    	  b 应用层实现。架构一个缓存层,对数据修改后将key保存在cache总,设置生存时间为经验延迟时间。查询时首先查询cache,如果找到key则强制走主库;
    
    

    另外,通过show slave status 字段‘Second_Behind_Master’可以检测主从延迟时间,在延迟较大时,将读切到读库,如果是使用中间件,可以配置强制读主库的延迟:slaveThreshold;这种方式不能保证读到脏数据,对一致性要求不高时可以使用;

  • 相关阅读:
    Android——继续深造——从安装Android Studio 2.0开始(详)
    PHP——安装wampserver丢失MSVCR110.dll
    Marza Gift for GDC 2016
    Retrieve OpenGL Context from Qt 5.5 on OSX
    Space Time Varying Color Palette
    Screen Space Depth Varying Glow based on Heat Diffusion
    Visualization of Detail Point Set by Local Algebraic Sphere Fitting
    Glass Dragon
    Jump Flood Algorithms for Centroidal Voronoi Tessellation
    京都之行
  • 原文地址:https://www.cnblogs.com/java-maowei/p/8037686.html
Copyright © 2011-2022 走看看