MySQL案例-replication"卡死"
-------------------------------------------------------------------------------------------------短文---------------------------------------------------------------------------------------------------------------
場景:
MySQL-5.7.17, 主從架構, 業務讀寫分離, 只讀從庫的SQL執行緒卡在某一個事務兩個多小時沒有動過, IO執行緒正常;
結論:
給某個表加上了索引, 同步開始追趕 _(:з」∠)_
叮囑程式要養成加主鍵的好習慣.....ㄟ( ▔, ▔ )ㄏ
分析:
第一反應是bug?? hang住了? 在delete幾千萬的表?? _(:з」∠)_;
事務提交策略是2,0, 沒有開啟log_slave_update, 按道理來說, 純粹的執行事務, 不應該會卡住, 後臺的一些執行緒也是suspending, 不是running, 好像也不是執行緒之間的問題, 看看relaylog裡面是什麼語句...
卡住的地方, 可以看到是929064394事務
把relaylog轉義一下, 找一下這個事務, 發現確實是很多的delete語句(內容已處理)
大概統計了一下, 刪除了有15W左右的資料, 然後看了一下兩個多小時的時間, 同步進度如何...
只從速度上看, 還得卡兩個多小時, 而且之後還有類似的語句, 真要完全追上, 估計.....
於是看了眼這個tmp_log表的結構
木有主鍵..... _(:з」∠)_
同步和主鍵有什麼關係?
MySQL同步的時候, 會去利用主鍵來搜尋需要修改的行(或者是一些二級索引);
PS: 具體的資料可以參考slave_rows_search_algorithms的官方解釋, 預設的設定下, 如果沒主鍵也沒有二級索引(where條件可用), 那麼就會用全表掃描來搜尋資料;
摘抄部分
PPS: 開啟HASH_SCAN可能對這個場景有效;
PPPS: HASH_SCAN預設沒有開, 並且開啟HASH_SCAN在某些情況下會遇到bug, 升級到>=5.7.20的版本之後再考慮開HASH_SCAN;
不打算去定位"為什麼從庫TABLE_SCAN這麼慢?"了, 把表加上索引吧...
"想辦法"停掉了同步, 加上索引之後, 同步恢復正常了;
場景:
MySQL-5.7.17, 主從架構, 業務讀寫分離, 只讀從庫的SQL執行緒卡在某一個事務兩個多小時沒有動過, IO執行緒正常;
結論:
給某個表加上了索引, 同步開始追趕 _(:з」∠)_
叮囑程式要養成加主鍵的好習慣.....ㄟ( ▔, ▔ )ㄏ
分析:
第一反應是bug?? hang住了? 在delete幾千萬的表?? _(:з」∠)_;
事務提交策略是2,0, 沒有開啟log_slave_update, 按道理來說, 純粹的執行事務, 不應該會卡住, 後臺的一些執行緒也是suspending, 不是running, 好像也不是執行緒之間的問題, 看看relaylog裡面是什麼語句...
卡住的地方, 可以看到是929064394事務
把relaylog轉義一下, 找一下這個事務, 發現確實是很多的delete語句(內容已處理)
大概統計了一下, 刪除了有15W左右的資料, 然後看了一下兩個多小時的時間, 同步進度如何...
只從速度上看, 還得卡兩個多小時, 而且之後還有類似的語句, 真要完全追上, 估計.....
於是看了眼這個tmp_log表的結構
點選(此處)摺疊或開啟
-
CREATE TABLE `tmp_log` (
-
`s_id` int DEFAULT NULL,
-
`d_id` int DEFAULT NULL
- ) ENGINE=InnoDB
木有主鍵..... _(:з」∠)_
同步和主鍵有什麼關係?
MySQL同步的時候, 會去利用主鍵來搜尋需要修改的行(或者是一些二級索引);
PS: 具體的資料可以參考slave_rows_search_algorithms的官方解釋, 預設的設定下, 如果沒主鍵也沒有二級索引(where條件可用), 那麼就會用全表掃描來搜尋資料;
摘抄部分
點選(此處)摺疊或開啟
-
? The default value is TABLE_SCAN,INDEX_SCAN, which means that all searches that can use indexes do use them, and searches without any indexes use table scans.
-
? To use hashing for any searches that do not use a primary or unique key, set this option to INDEX_SCAN,HASH_SCAN. Specifying INDEX_SCAN,TABLE_SCAN,HASH_SCAN has the same effect as specifying INDEX_SCAN,HASH_SCAN.
- ? To force hashing for all searches, set this option to TABLE_SCAN,HASH_SCAN.
PPS: 開啟HASH_SCAN可能對這個場景有效;
PPPS: HASH_SCAN預設沒有開, 並且開啟HASH_SCAN在某些情況下會遇到bug, 升級到>=5.7.20的版本之後再考慮開HASH_SCAN;
不打算去定位"為什麼從庫TABLE_SCAN這麼慢?"了, 把表加上索引吧...
"想辦法"停掉了同步, 加上索引之後, 同步恢復正常了;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2149289/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL Group ReplicationMySql
- Build mysql replicationUIMySql
- Mysql Replication(轉)MySql
- 【MySQL】Semisynchronous Replication 概述MySql
- MySQL Replication淺析MySql
- On MySQL replication, again…MySqlAI
- 【Mysql】MySQL5.7.17- Group Replication搭建MySql
- An Overview of PostgreSQL & MySQL Cross ReplicationViewMySqlROS
- Mysql replication check指令碼MySql指令碼
- MySQL group replication介紹MySql
- MySQL Group Replication小試MySql
- mysql replication之GTIDMySql
- MySQL基於GTIDs的MySQL ReplicationMySql
- mysql replication /mysql 主從複製原理MySql
- 【MySql】MySQL Replication Fatal Error 1236MySqlError
- Mysql Replication學習記錄MySql
- 理解 MySQL(3):複製(Replication)MySql
- MySQL now supports an interface for semisynchronous replication:MySql
- MySQL Replication ConfigurationMySql
- mysql replication常見錯誤MySql
- MySQL Group Replication 學習(部署篇)MySql
- MySQL Replication常見錯誤整理MySql
- mysql replication複製錯誤(zt)MySql
- MySQL Replication Fatal Error 1236MySqlError
- 【MySQL】Slave can not handle replication events with the checksum ...MySql
- MYSQL Group Replication搭建過程記錄MySql
- MGR(MySQL Group Replication)部署搭建測試MySql
- MYSQL並行複製(parallel replication部署篇)MySql並行Parallel
- 【MySQL】Semisynchronous Replication 配置和引數說明MySql
- 【MySQL】5.7版本 Semisync Replication 增強MySql
- 【MySQL】MySQL Replication 一主一備搭建步驟(GTID方式)MySql
- 【MySQL】MySQL Replication 一主一備搭建步驟(傳統方式)MySql
- 配置Mysql Group Replication遇到的問題筆記MySql筆記
- MySQL Replication的複製執行緒介紹MySql執行緒
- Mysql 5.7 基於組複製(MySQL Group Replication) - 運維小結MySql運維
- MySQL8.0.16新特性:The Communication Protocol In Group ReplicationMySqlProtocol
- MySQL 5.7組複製(group replication)的要求和限制MySql
- MySQL 5.7.17 組複製(group replication)的要求和限制MySql