Otter同步延遲導致數據庫反查(使用Otter遇到的問題二)

Otter同步延遲導致數據庫反查

背景

在使用Otter進行雙向同步時,A<---->B雙向同步,A爲主站點,當在A上執行大事務時,會導致延遲很高,出現反查的情況。

問題描述

Otter Channel配置:
在這裏插入圖片描述
環境爲雙A同步,即A和B均會對數據進行更新。
一致性反查數據庫的閾值爲:60秒,即延遲超過60秒,則會反查源端數據庫,獲取數據的最新版本。

How to repeat?

CREATE TABLE `delaytesttb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT 'www',
  `addr` varchar(30) DEFAULT 'Hangzhou,Zhejiang,China',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8


----在delaytesttb中插入數據----
mysql> select * from delaytesttb limit 1;
+----+------+-------------------------+
| id | name | addr                    |
+----+------+-------------------------+
|  1 | www  | Hangzhou,Zhejiang,China |
+----+------+-------------------------+
1 row in set (0.01 sec)

----插入大概40萬條數據,目的是爲了讓同步產生大於60秒的延遲(也可以降低閾值,更爲方便)----
mysql> select count(*) from delaytesttb;
+----------+
| count(*) |
+----------+
|   490372 |
+----------+
1 row in set (0.10 sec)



批量插入數據

insert into tb1(name,status) select name,2 from tb1;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0


select * from tb1;
+----+------+--------+
| id | name | status |
+----+------+--------+
|  2 | abc  |     10 |
|  3 | abc  |      2 |
+----+------+--------+
2 rows in set (0.00 sec)

同步延遲情況
當Otter發現延遲超過閾值後,會使用主鍵反查數據庫,獲取到最新版本,在目標端重放。(整個過程可以通過binlog和審計可以看到)

數據庫反查從一定程度上提高了數據一致性檢驗的效率,但是可能會帶來新的問題(後續驗證後再進行討論),所以在使用同步通道時,可以採用以下方式進行監控:

  1. 監控通道的延遲情況,可以從otter.delay_stat表中得到
  2. 不執行大事務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章