MYSQL sync_relay_log對I/O thread的影響分析
搭建好的一套從庫,發現延遲很高,一直追不上,從庫的bin_log沒開,flush_log_at_trx_commit設定為0,
簡化的狀態如下:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Log_File: mysql-bin.000533
Read_Master_Log_Pos: 101151159
Relay_Log_File: relaylog.000012
Relay_Log_Pos: 897176
Relay_Master_Log_File: mysql-bin.000533
Exec_Master_Log_Pos: 99357144
Seconds_Behind_Master: 11313
發現Master_Log_File,Read_Master_Log_Pos一直進展比較緩慢,一般來說內網的瓶頸不會在網路,那麼只可能在I/O
檢視伺服器I/O情況如下:
![](https://i.iter01.com/images/8d37f2d5dd764eddb4187afb6edc483c5ee6442fd625c6bac27c15d31e4aa96f.png)
發現MYSQL執行緒LWP號為44706 的執行緒I/O非常高,但是寫入只有600來K,明顯這種情況是不正常的,一般來說LINUX
有KERNEL BUFFER/CACHE,write只是寫入到KERNEL BUFFER/CACHE就好了,例外就是以dirctor寫入方式,這種方式
依賴的是使用者態快取,還有就是寫入呼叫了大量的fsync之類的同步kernel cache/buffer到磁碟的系統呼叫。
然後檢視這個LWP號是否為I/O thread如下,因為5.7可以非常輕鬆的找到MYSQL conn_id和系統LWP之間的關係如下:
![](https://i.iter01.com/images/4009a394320d6a522a7d33e76ccc46b44caab4fd9e1555cca1eb5538c7cd0af5.png)
確實發現這個大量I/O的確實是MYSQL從庫的I/O thread,那麼接下來的就是進行strace看看到底為什麼這麼慢,strace
片段如下:
![](https://i.iter01.com/images/e14c13c98ca6b56955a13319e2ecfcf1b9d73a610d77e37f5afc969e5425323c.png)
我們發現檔案描述符fd=50的檔案有大量的寫入而且頻繁的呼叫fdatasync來同步磁碟,消耗時間非常可觀,是MUTEX呼叫和write
操作的N倍
那麼我們就看看檔案描述符50到底是什麼如下:
![](https://i.iter01.com/images/ffa0c7ca977a4cfb8dbd036e4fb35590fd4d2735c0ccafc31cce183eea05bf70.png)
確實是我們的replay log。
那麼問題就確定了,就是因為replay log的寫入呼叫了大量的fdatasync造成的I/O THREAD非常慢,那麼是哪一個引數呢?
其實引數就是sync_relay_log,這個引數用來保證relay log的安全,官方文件有如下的圖:
GTID|sync_relay_log|MASTER_AUTO_POSITION|relay_log_recovery|relay_log_info_repository|Crash type|Recovery guaranteed |Relay log impact
OFF 1 Any 1 TABLE Any Yes Lost
OFF >1 Any 1 TABLE Server Yes Lost
OFF >1 Any 1 Any OS No Lost
OFF 1 Any 0 TABLE Server Yes Remains
OFF 1 Any 0 TABLE OS No Remains
ON Any ON Any Any Any Yes Lost
ON 1 OFF 0 TABLE Server Yes Remains
ON 1 OFF 0 Any OS No Remains
我們可以看到如果不設定sync_relay_log那麼有可能造成relay log丟失的風險,其實上面的分析已經看到就是呼叫fdatasync來完成這個功能,但是
這樣的代價基本是不可接受的。官方文件有如下說明:
It is important to note the impact of sync_relay_log=1, which requires a write of to the relay log
per transaction. Although this setting is the most resilient to an unexpected halt, with at most one
unwritten transaction being lost, it also has the potential to greatly increase the load on storage. Without
sync_relay_log=1, the effect of an unexpected halt depends on how the relay log is handled by the
operating system.
A value of 1 is the safest choice because in the event of a crash you lose at most one event from the
relay log. However, it is also the slowest choice (unless the disk has a battery-backed cache, which
makes synchronization very fast).
每次事物都會呼叫fdatasync,代價太高。所以沒辦法修改了sync_relay_log的設定,預設值是10000,也就是10000個事物進行一次
fdatasync。
作者微信:
![](https://i.iter01.com/images/8882d5bd049627d8de373840fa9b993c29ce5e72e81eb6d64eb8055c3acd8bad.jpg)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2137737/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VMware 與 SmartX 超融合 I/O 路徑對比與效能影響解析
- The slave I/O thread stops because master and slave have equal MySQL server UUIDthreadASTMySqlServerUI
- mysql事務對效率的影響分析總結JILEMySql
- MySQL 8.0 Reference Manual(讀書筆記73節--Thread Concurrency for InnoDB and I/O Threads)MySql筆記thread
- MySQL alter 新增列對dml影響MySql
- MySQL在刪除表時I/O錯誤原因分析MySql
- MySQL truncate慢影響系統qps分析MySql
- 修改主機時區對Oracle的影響分析Oracle
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 16、MySQL Case-索引key對select count(*)的影響MySql索引
- MySQL之磁碟I/O過高排查MySql
- 故障案例:主從同步報錯Fatal error: The slave I/O thread stops because master and slave have equal MySQL server主從同步ErrorthreadASTMySqlServer
- 社群供稿丨 GPT-4o 對實時互動與 RTC 的影響GPT
- mysql的DDL操作對業務產生影響測試MySql
- Linux命令----分析系統I/O的瓶頸Linux
- 計算機I/O與I/O模型計算機模型
- 關於LOL成就係統對玩家影響的簡略分析
- 分析核親和性對高吞吐量的流的影響
- 影響mysql效能的因素都有哪些MySql
- 影響MySQL效能的硬體因MySql
- 影響MySQL效能的硬體因素MySql
- Hadoop的I/O操作Hadoop
- MySQL 配置InnoDB主執行緒I/O速率MySql執行緒
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- MySQL:slave_skip_errors引數對MGR可用性的影響MySqlError
- unusable index對DML/QUERY的影響Index
- Nologging對恢復的影響(二)
- 語言對思維的影響
- Nologging對恢復的影響(一)
- I/O流
- Java I/OJava
- 上海交大:新冠肺炎疫情對若干行業的影響分析行業
- 場景分析:遊戲關卡難度對玩家流失的影響遊戲
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- 浮動的盒子對img的影響
- 大資料預測分析是否對企業有影響大資料
- MySQL運維實戰(5.6) 字符集設定對mysqldump的影響MySql運維
- 第49問:如何快速判斷 IO 延遲對 MySQL 效能的影響MySql
- MySQL中join語句的基本使用教程及其欄位對效能的影響MySql