溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

對(duì)Big Table進(jìn)行全表更新,導(dǎo)致 Replication 同步數(shù)據(jù)的過(guò)程十分緩慢

發(fā)布時(shí)間:2020-06-20 02:38:41 來(lái)源:網(wǎng)絡(luò) 閱讀:516 作者:胡壯壯 欄目:網(wǎng)絡(luò)安全

    

在Publisher database中更新一個(gè)big table,數(shù)據(jù)行數(shù)是3.4億多。由于沒(méi)有更新 clustered Index key,因此,只產(chǎn)生了3.4億多個(gè)Update Commands 和 1個(gè)Transaction,數(shù)據(jù)量還是很大的。在 Log reader 將 Commands 插入到 distribution.dbo.MSrepl_commands 的過(guò)程中,幾乎所有的Distribution Agent 都拋出 Performance Critical 的Warning,Log Reader 插入Commands的速度十分緩慢,初步預(yù)測(cè),僅僅是將Update Commands插入到 MSrepl_commands的時(shí)間就需要12hours。為了不影響其他數(shù)據(jù)的同步,我打算將該表的Publication 和 Subscription 刪除,然后手動(dòng)同步數(shù)據(jù)。

Scenario1:

在Subscriber中,成功刪除Subscription。鏈接到Publisher,在刪除Publication時(shí),SSMS 先是 NO Responding,然后報(bào)錯(cuò)。查看Subscriber運(yùn)行的Session,發(fā)現(xiàn) Distribution Agents 的 sessions 都被block。刪不掉Publication的原因,估計(jì)是Log Reader 正在讀取Commands,這個(gè)操作不能被異常終止。為了避免損壞其他數(shù)據(jù),只能等待 Log Reader 將 Update commands 插入到 distribution中了。Leader只給一天的緩沖期,必須在明天解決這個(gè)問(wèn)題。

Scenario2:

在Log Reader 將 Publisher的所有commands都插入到 distribution.dbo.MSrepl_commands 之后,由于在Scenario1已經(jīng)將Subscription刪除,Update Commands沒(méi)有同步到Target table,但也沒(méi)有被刪除,依然存儲(chǔ)在MSrepl_commands中。如果運(yùn)行 Distribution clean up job,減少 Commands Retition的時(shí)間,肯定會(huì)影響其他數(shù)據(jù)的同步。

EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 120

所以,必須手動(dòng)從 MSrepl_commands 刪除相應(yīng)的commans,同時(shí)必須從 distribution.dbo.MSrepl_transactions 刪除相應(yīng)的Transaction。

根據(jù) MSrepl_transactions 中的 publisher_database_id 和 entry_time,篩選出相應(yīng)的 xact_seqno(Replication用于同步Commands的事務(wù)ID),根據(jù)publisher_database_id 和 xact_seqno 查看 MSrepl_commands 的中命令的數(shù)量,用以 verify 事務(wù)的 xact_seqno。

select count(0)from distribution.dbo.MSrepl_commands with(nolock)where xact_seqno=0x000055A8000069610001 and publisher_database_id=19

也可以使用 sp_browsereplcmds 查看 msrepl_commands 中的SQL語(yǔ)句,最終確定事務(wù)的 xact_seqno,根據(jù) publisher_database_id 和 xact_seqno從 distribution 刪除commands 和 transaction。

對(duì)Big Table進(jìn)行全表更新,導(dǎo)致 Replication 同步數(shù)據(jù)的過(guò)程十分緩慢

deletefrom distribution.dbo.MSrepl_commands 
where xact_seqno=0x000055A8000069610001 and publisher_database_id=19deletefrom distribution.dbo.MSrepl_transactionswhere xact_seqno=0x000055A8000069610001 and publisher_database_id=19

對(duì)Big Table進(jìn)行全表更新,導(dǎo)致 Replication 同步數(shù)據(jù)的過(guò)程十分緩慢

耗時(shí) 3個(gè)小時(shí),終于將commands 和 transaction刪除,Replication 恢復(fù)正常。
Mark:在更新Big Table時(shí),最好將 SQL Server Replication關(guān)閉,手動(dòng)在Publisher 和 Subscriber中更新,在更新完成之后,再重建Replication。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI