欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL主從延遲現(xiàn)象及原理分析詳解

 更新時(shí)間:2019年02月12日 09:31:15   作者:wlmmmm  
今天小編就為大家分享一篇關(guān)于MySQL主從延遲現(xiàn)象及原理分析詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

一、現(xiàn)象

凌晨對(duì)線(xiàn)上一張表添加索引,表數(shù)據(jù)量太大(1億+數(shù)據(jù),數(shù)據(jù)量50G以上),造成主從延遲幾個(gè)小時(shí),各個(gè)依賴(lài)從庫(kù)的系統(tǒng)無(wú)法查詢(xún)數(shù)據(jù),最終影響業(yè)務(wù)。

現(xiàn)在就梳理下主從延遲的原理。

二、原理

根據(jù) MySQL 官方文檔 MySQL Replication Implementation Details 中的描述,MySQL 主從復(fù)制依賴(lài)于三個(gè)線(xiàn)程:master一個(gè)線(xiàn)程(Binlog dump thread),slave兩個(gè)線(xiàn)程(I/O threadSQL thread)。主從復(fù)制流程如下圖:

master 服務(wù)器和 slave 服務(wù)器連接時(shí),創(chuàng)建Binlog dump thread以發(fā)送bin log數(shù)據(jù):

  • 一個(gè)Binlog dump thread對(duì)應(yīng)一個(gè) slave 服務(wù)器;
  • Binlog dump threadbin log獲取數(shù)據(jù)時(shí)會(huì)加鎖,獲取到數(shù)據(jù)后,立即釋放鎖。

當(dāng) slave 服務(wù)器收到 START_SLAVE 命令時(shí),會(huì)創(chuàng)建I/O threadSQL thread

  • I/O thread以拉的方式,從 master 讀取事件,并存儲(chǔ)到 slave 服務(wù)器的relay log中;
  • SQL threadrelay log中讀取事件并執(zhí)行;
  • slave可以按照自己的節(jié)奏讀取和更新數(shù)據(jù),也可以隨意操作復(fù)制進(jìn)程(啟動(dòng)和停止)。

注: START_SLAVE命令成功啟動(dòng)線(xiàn)程后,如果后面I/O threadSQL thread因?yàn)槟承┰蛲V梗瑒t不會(huì)有任何的警告,業(yè)務(wù)方無(wú)法感知??梢酝ㄟ^(guò)查看 slave 的 error 日志,或者通過(guò) SHOW SLAVE STATUS 查看 slave 上的線(xiàn)程狀態(tài)。

通過(guò) SHOW PROCESSLIST 可查看線(xiàn)程狀態(tài):

Binlog dump thread:

mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
  Id: 2
 User: root
 Host: localhost:32931
  db: NULL
Command: Binlog Dump
 Time: 94
 State: Has sent all binlog to slave; waiting for binlog to
   be updated
 Info: NULL

I/O thread 和 SQL thread:

mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
  Id: 10
 User: system user
 Host:
  db: NULL
Command: Connect
 Time: 11
 State: Waiting for master to send event
 Info: NULL
 *************************** 2. row ***************************
  Id: 11
 User: system user
 Host:
  db: NULL
Command: Connect
 Time: 11
 State: Has read all relay log; waiting for the slave I/O
   thread to update it
 Info: NULL

三、分析

根據(jù)上面的原理,由于slave是單線(xiàn)程(I/O thread)讀取數(shù)據(jù),單線(xiàn)程(SQL thread)更新數(shù)據(jù),而master是多線(xiàn)程寫(xiě)入,那么只要master寫(xiě)入的頻率大于slave讀取更新的頻率,就有可能出現(xiàn)主從延遲的情況,如:

  1. master寫(xiě)入tps較高,大于slave更新速度;
  2. slave執(zhí)行某些語(yǔ)句耗時(shí)較長(zhǎng),如持有鎖等;
  3. master執(zhí)行某些DDL語(yǔ)句時(shí),執(zhí)行的時(shí)間較長(zhǎng),在slave也執(zhí)行相同的時(shí)間;

此處創(chuàng)建了索引,咨詢(xún) DBA,產(chǎn)生的bin log文件有100多G,數(shù)據(jù)量太大,導(dǎo)致從庫(kù)I/O thread一直讀取DDL操作產(chǎn)生的bin log事件,而影響到正常的業(yè)務(wù)DML事件的更新,從而表現(xiàn)為主從同步延遲。

四、解決方案

從主從延遲的原因來(lái)看,解決方案可以從以下幾個(gè)方向入手:

  1. 業(yè)務(wù)選型,對(duì)于無(wú)法忍受從庫(kù)延遲的架構(gòu),可選擇分布式架構(gòu)等,避開(kāi)從庫(kù)延遲問(wèn)題
  2. 執(zhí)行時(shí)間,對(duì)大表進(jìn)行線(xiàn)上DDL操作盡量選擇凌晨等業(yè)務(wù)量較小的時(shí)候
  3. 硬件配置,升級(jí)從庫(kù)硬件配置,如SSD
  4. 減少請(qǐng)求,增加緩存層,減少讀請(qǐng)求落庫(kù)

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • mysql格式化小數(shù)保留小數(shù)點(diǎn)后兩位(小數(shù)點(diǎn)格式化)

    mysql格式化小數(shù)保留小數(shù)點(diǎn)后兩位(小數(shù)點(diǎn)格式化)

    今天遇到一個(gè)問(wèn)題,格式化浮點(diǎn)數(shù)的問(wèn)題,用format(col,2)保留兩位小數(shù)點(diǎn),出現(xiàn)一個(gè)問(wèn)題,例如下面的語(yǔ)句,后面我們給出解決方法
    2013-12-12
  • MYSQL的存儲(chǔ)過(guò)程和函數(shù)簡(jiǎn)單寫(xiě)法

    MYSQL的存儲(chǔ)過(guò)程和函數(shù)簡(jiǎn)單寫(xiě)法

    簡(jiǎn)單的說(shuō),就是一組SQL語(yǔ)句集,功能強(qiáng)大,可以實(shí)現(xiàn)一些比較復(fù)雜的邏輯功能,類(lèi)似于JAVA語(yǔ)言中的方法,這里就為大家簡(jiǎn)單介紹一下,需要的朋友可以參考下
    2018-05-05
  • 詳解GaussDB for MySQL性能優(yōu)化

    詳解GaussDB for MySQL性能優(yōu)化

    GaussDB(for MySQL)數(shù)據(jù)庫(kù)在寫(xiě)入性能上,在業(yè)界同類(lèi)產(chǎn)品中是最好的,這主要得益于GaussDB(for MySQL)在MySQL內(nèi)核方面的諸多優(yōu)化。其中有一項(xiàng)從“送快遞”得來(lái)靈感的優(yōu)化——事務(wù)異步提交,值得我們分析。
    2021-05-05
  • MySQL case when使用方法實(shí)例解析

    MySQL case when使用方法實(shí)例解析

    這篇文章主要介紹了MySQL case when使用方法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Xtrabackup使用指南 InnoDB數(shù)據(jù)備份工具

    Xtrabackup使用指南 InnoDB數(shù)據(jù)備份工具

    Xtrabackup是一個(gè)對(duì)InnoDB做數(shù)據(jù)備份的工具,支持在線(xiàn)熱備份(備份時(shí)不影響數(shù)據(jù)讀寫(xiě)),是商業(yè)備份工具InnoDB Hotbackup的一個(gè)很好的替代品
    2011-10-10
  • MySQL用戶(hù)與權(quán)限的管理詳解

    MySQL用戶(hù)與權(quán)限的管理詳解

    這篇文章主要介紹了MySQL用戶(hù)與權(quán)限的管理,詳細(xì)分析了mysql用戶(hù)密碼、權(quán)限設(shè)置與使用相關(guān)操作原理及注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • MySQL 加鎖控制并發(fā)的方法

    MySQL 加鎖控制并發(fā)的方法

    這篇文章主要介紹了MySQL 加鎖控制并發(fā)的方法,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2021-01-01
  • linux下mysql的安裝步驟

    linux下mysql的安裝步驟

    本文分步驟給大家介紹了linux下mysql的安裝步驟及執(zhí)行命令,需要的朋友可以參考下
    2018-03-03
  • 詳解監(jiān)聽(tīng)MySQL的binlog日志工具分析:Canal

    詳解監(jiān)聽(tīng)MySQL的binlog日志工具分析:Canal

    Canal主要用途是基于MySQL數(shù)據(jù)庫(kù)增量日志解析,提供增量數(shù)據(jù)訂閱和消費(fèi),目前主要支持MySQL。接下來(lái)通過(guò)本文給大家介紹監(jiān)聽(tīng)MySQL的binlog日志工具分析:Canal的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2020-10-10
  • linux服務(wù)器下查看mysql的安裝信息

    linux服務(wù)器下查看mysql的安裝信息

    這篇文章主要介紹了linux服務(wù)器下查看mysql的安裝信息,需要的朋友可以參考下
    2017-05-05

最新評(píng)論