采集延時(shí)信息的命令:
show slave status;
查看 seconds_behind_master的值;
1.?有些部署條件下寂拆,備庫(kù)所在機(jī)器的性能要比主庫(kù)所在的機(jī)器性能差(或者備庫(kù)都放在同一
個(gè)機(jī)器上样漆,主要是競(jìng)爭(zhēng)資源很激烈晌缘,特別是IO);
2. 備庫(kù)上的壓力(備庫(kù)上的查詢可能耗費(fèi)了大量的CPU資源亿鲜,影響了同步的速度允蜈,造成了主
備延時(shí)。這種情況可以通過(guò)配置一主多從來(lái)分擔(dān)備庫(kù)的壓力)狡门;
3. 大事務(wù)(重點(diǎn))
因?yàn)橹鲙?kù)上必須等事務(wù)執(zhí)行完成才會(huì)寫入 binlog陷寝,再傳給備庫(kù)。所以其馏,如果一個(gè)主庫(kù)上的語(yǔ)句
執(zhí)行 10 分鐘凤跑,那這個(gè)事務(wù)很可能就會(huì)導(dǎo)致從庫(kù)延遲 10 分鐘。
大事務(wù)場(chǎng)景:
1)不要一次性地用 delete 語(yǔ)句刪除太多數(shù)據(jù)叛复。其實(shí)仔引,這就是一個(gè)典型的大事務(wù)場(chǎng)景扔仓。
????刪除數(shù)據(jù)的時(shí)候,要控制每個(gè)事務(wù)刪除的數(shù)據(jù)量咖耘,分成多次刪除翘簇。
2)大表 DDL
? ??建議使用 gh-ost 方案
4.?備庫(kù)的并行復(fù)制能力
? ? MySQL官方在MySQL5.6以后支持sql_thread線程多線程進(jìn)行復(fù)制。
5. 主庫(kù)DML語(yǔ)句并發(fā)大儿倒,從庫(kù)的qps高版保;
6.?主庫(kù)和從庫(kù)的參數(shù)配置不一樣
7.?從庫(kù)上在進(jìn)行備份操作
8. 備庫(kù)空間不足的情況下
9. 表上無(wú)主鍵的情況(主庫(kù)利用索引更改數(shù)據(jù),備庫(kù)回放只能用全表掃描,這種情況可以調(diào)整slave_rows_search_algorithms參數(shù)適當(dāng)優(yōu)化下)
檢查鎖情況:
show engine innodb status\G;
由于主備延遲的存在,所以在主備切換的時(shí)候夫否,就相應(yīng)的有不同的策略彻犁。
1.?可靠性優(yōu)先策略
2.?可用性優(yōu)先策略
MySQL 5.7 的并行復(fù)制策略
由參數(shù) slave-parallel-type 來(lái)控制并行復(fù)制策略:
1.?置為 DATABASE,表示使用 MySQL 5.6 版本的按庫(kù)并行策略凰慈;
2.?配置為 LOGICAL_CLOCK汞幢,表示的就是類似 MariaDB 的策略。不過(guò)微谓,
????MySQL 5.7 這個(gè)策略森篷,針對(duì)并行度做了優(yōu)化。
MySQL 5.7 并行復(fù)制策略的思想是:
1.?同時(shí)處于 prepare 狀態(tài)的事務(wù)豺型,在備庫(kù)執(zhí)行時(shí)是可以并行的仲智;
2.?處于 prepare 狀態(tài)的事務(wù),與處于 commit 狀態(tài)的事務(wù)之間触创,在備庫(kù)執(zhí)行時(shí)也是可以并行的坎藐。
MySQL并行復(fù)制策略
MySQL 5.7.22版本,MySQL新增了基于WRITESET 的并行復(fù)制
通過(guò)參數(shù) binlog-transaction-dependency-tracking來(lái)控制是否開(kāi)啟:
1.?COMMIT_ORDER:根據(jù)同時(shí)進(jìn)入 prepare 和 commit 來(lái)判斷是否可以并行的策略哼绑。
2.?WRITESET
? ??表示的是對(duì)于事務(wù)涉及更新的每一行岩馍,計(jì)算出這一行的 hash 值,組成集合 writeset抖韩。
? ? 如果兩個(gè)事務(wù)沒(méi)有操作相同的行蛀恩,也就是說(shuō)它們的 writeset 沒(méi)有交集,就可以并行茂浮。
3.?WRITESET_SESSION
? ??是在 WRITESET 的基礎(chǔ)上多了一個(gè)約束双谆,即在主庫(kù)上同一個(gè)線程先后執(zhí)行的兩個(gè)事務(wù),
????在備庫(kù)執(zhí)行的時(shí)候席揽,要保證相同的先后順序顽馋。
這個(gè) hash 值是通過(guò)“庫(kù)名 + 表名 + 索引名 + 值”計(jì)算出來(lái)的。如果一個(gè)表上除了有主鍵索引
外幌羞,還有其他唯一索引寸谜,那么對(duì)于每個(gè)唯一索引,insert 語(yǔ)句對(duì)應(yīng)的 writeset 就要多增加一個(gè)
?hash 值属桦。
優(yōu)勢(shì):
? ?1.? writeset 是在主庫(kù)生成后直接寫入到 binlog 里面的熊痴,這樣在備庫(kù)執(zhí)行的時(shí)候他爸,不需要解
????????析 binlog 內(nèi)容(event 里的行數(shù)據(jù)),節(jié)省了很多計(jì)算量果善;
? ?2.?不需要把整個(gè)事務(wù)的 binlog 都掃一遍才能決定分發(fā)到哪個(gè) worker诊笤,更省內(nèi)存;
? ?3.?由于備庫(kù)的分發(fā)策略不依賴于 binlog 內(nèi)容巾陕,所以 binlog 是 statement 格式也是可以的讨跟。