国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL主從延遲現象及原理分析詳解

2024-07-24 12:54:22
字體:
來源:轉載
供稿:網友

一、現象

凌晨對線上一張表添加索引,表數據量太大(1億+數據,數據量50G以上),造成主從延遲幾個小時,各個依賴從庫的系統無法查詢數據,最終影響業務。

現在就梳理下主從延遲的原理。

二、原理

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

master 服務器和 slave 服務器連接時,創建Binlog dump thread以發送bin log數據:

一個Binlog dump thread對應一個 slave 服務器; Binlog dump threadbin log獲取數據時會加鎖,獲取到數據后,立即釋放鎖。

當 slave 服務器收到 START_SLAVE 命令時,會創建I/O threadSQL thread

I/O thread以拉的方式,從 master 讀取事件,并存儲到 slave 服務器的relay log中; SQL threadrelay log中讀取事件并執行; slave可以按照自己的節奏讀取和更新數據,也可以隨意操作復制進程(啟動和停止)。

注: START_SLAVE命令成功啟動線程后,如果后面I/O threadSQL thread因為某些原因停止,則不會有任何的警告,業務方無法感知。可以通過查看 slave 的 error 日志,或者通過 SHOW SLAVE STATUS 查看 slave 上的線程狀態。

通過 SHOW PROCESSLIST 可查看線程狀態:

Binlog dump thread:

mysql> SHOW PROCESSLISTG*************************** 1. row ***************************  Id: 2 User: root Host: localhost:32931  db: NULLCommand: 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 PROCESSLISTG*************************** 1. row ***************************  Id: 10 User: system user Host:  db: NULLCommand: Connect Time: 11 State: Waiting for master to send event Info: NULL *************************** 2. row ***************************  Id: 11 User: system user Host:  db: NULLCommand: Connect Time: 11 State: Has read all relay log; waiting for the slave I/O   thread to update it Info: NULL

三、分析

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和硕县| 淮安市| 古浪县| 五常市| 南康市| 林甸县| 永宁县| 衡南县| 本溪| 雅安市| 尼勒克县| 汉阴县| 望江县| 绍兴县| 新蔡县| 小金县| 桑日县| 南雄市| 金门县| 奉节县| 荥阳市| 栾城县| 房山区| 玉门市| 闸北区| 乳山市| 汾西县| 鄱阳县| 灵宝市| 集安市| 霸州市| 阳高县| 高阳县| 什邡市| 梁平县| 华亭县| 简阳市| 扶沟县| 含山县| 德惠市| 海兴县|