亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Transactional replication-如何跳過一個事務

2024-07-21 02:49:31
字體:
來源:轉載
供稿:網友
Transactional replication-如何跳過一個事務

在transactional replication, 經常會遇到數據同步延遲的情況。有時候這些延遲是由于在publication中執行了一個更新,例如update ta set col=? Where ?,這個更新包含巨大的數據量。在subscription端,這個更新會分解成多條命令(默認情況下每個數據行一個命令),應用到subscription上。 不得已的情況下,我們需要跳過這個大的事務,讓replication繼續運行下去。

請注意,使用該操作會導致publication和subscription兩端數據不一致,需要以后手工調整

現在介紹一下transactional replication的一些原理和具體的方法

當publication database的article發生更新時, 會產生相應的日志,Log reader會讀取這些日志信息,將他們寫入到Distribution 數據庫的msrepl_transactions和msrepl_commands中。

Msrepl_transactions中的每一條記錄都有一個唯一標識xact_seqno,xact_seqno對應日志中的LSN。 所以可以通過xact_seqno推斷出他們在publication database中的生成順序,編號大的生成時間就晚,編號小的生成時間就早。

Distributionagent包含兩個子進程,reader和writer。 Reader負責從Distribution 數據庫中讀取數據,Writer負責將reader讀取的數據寫入到訂閱數據庫.

reader是通過sp_MSget_repl_commands來讀取Distribution數據庫中(讀取Msrepl_transactions表和Msrepl_Commands表)的數據

下面是sp_MSget_repl_commands的參數定義

CREATE PROCEDURE sys.sp_MSget_repl_commands

(

@agent_id int,

@last_xact_seqno varbinary(16),

@get_count tinyint = 0, -- 0 = no count, 1 = cmd and tran (legacy), 2 = cmd only

@compatibility_level int = 7000000,

@subdb_version int = 0,

@read_query_size int = -1

)

這個存儲過程有6個參數,在Transactional replication 中,只會使用前4個(并且第三個參數和第四個參數的值是固定不變的.分別為0和10000000)。下面是一個例子:

execsp_MSget_repl_commands 46,0x0010630F000002A900EA00000000,0,10000000

@agent_id表示Distributionagentid,每個訂閱都會有一個單獨的Distributionagent來處理數據。 帶入@agent_id后,就可以找到訂閱對應的publication 和所有的article。

@last_xact_seqno 表示上一次傳遞到訂閱的LSN。

大致邏輯是:Reader讀取subscription database的MSreplication_subscriptions表的transaction_timestamp列,獲得更新的上一次LSN編號,然后讀取分發數據庫中LSN大于這個編號的數據。 Writer將讀取到的數據寫入訂閱,并更新MSreplication_subscriptions表的transaction_timestamp列。然后Reader會繼續用新的LSN來讀取后續的數據,再傳遞給Writer,如此往復。

如果我們手工更新transaction_timestamp列,將這個值設置為當前正在執行的大事務的LSN,那么distribution agent就會不讀取這個大事務,而是將其跳過了。

下面以一個實例演示一下

環境如下

Publisher: SQL108W2K8R21

Distributor: SQL108W2K8R22

Subscriber: SQL108W2K8R23

圖中高亮的publication中包含3個aritcles,ta,tb,tc

其中ta包含18,218,200萬數據,然后我們進行了一下操作

  1. 在11:00進行了更新語句,

update ta set c=-11

  1. 后續陸續對表ta,tb,tc執行一些插入操作

    insert tb values(0,0)

    insert tc values(0,0)

之后我們啟動replication monitor ,發現有很大的延遲,distribution agent一直在傳遞a)操作產生的數據

在subscription database中執行下面的語句,得到當前最新記錄的事務編號

declare @publisher sysname

declare @publicationDB sysname

declare @publication sysname

set @publisher='SQL108W2K8R22'

set @publicationDB='pubdb'

set @publication='pubdbtest2'

select transaction_timestamp From MSreplication_subscriptions

where

publisher=@publisher and

publisher_db=@publicationDB and

publication=@publication

在我的環境中,事務編號為0x0000014900004E9A0004000000000000

返回到distribution database,執行下面的語句,得到緊跟在大事務后面的事務編號. 請將參數替換成您實際環境中的數據。(請注意,如果執行下列語句遇到性能問題,請將參數直接替換成值)

declare @publisher sysname

declare @publicationDB sysname

declare @publication sysname

declare @transaction_timestamp [varbinary](16)

set @publisher='SQL108W2K8R21'

set @publicationDB='publicationdb2'

set @publication='pubtest'

set @transaction_timestamp= 0x0000014900004E9A0004000000000000

select top 1 xact_seqno from MSrepl_commands with (nolock) where xact_seqno>@transaction_timestamp and

article_id in (

select article_id From MSarticles a inner join MSpublications p on a.publication_id=p.publication_id and a.publisher_id=p.publisher_id and a.publisher_db=p.publisher_db

inner join sys.servers s on s.server_id=p.publisher_id

where p.publication=@publication and p.publisher_db=@publicationDB and s.name=@publisher

)

and publisher_database_id =(

select id From MSpublisher_databases pd inner join MSpublications p on pd.publisher_id=p.publisher_id

inner join sys.servers s on pd.publisher_id=s.server_id and pd.publisher_db=p.publisher_db

where s.name=@publisher and p.publication=@publication and pd.publisher_db=@publicationDB

)

Order by xact_seqno

在我的環境中,事務編號為0x0000018C000001000171

在subscription database中執行下面的語句,跳過大的事務。請將參數替換成您實際環境中的數據

declare @publisher sysname

declare @publicationDB sysname

declare @publication sysname

declare @transaction_timestamp [varbinary](16)

set @publisher='SQL108W2K8R22'

set @publicationDB='pubdb'

set @publication='pubdbtest2'

set @transaction_timestamp= 0x0000018C000001000171

update MSreplication_subscriptions set transaction_timestamp=@transaction_timestamp

where publisher=@publisher and publisher_db=@publicationDB and publication=@publication

執行完成后開啟distribution agent job即可。

接下來您就會發現,事務已經成功跳過,ta在訂閱端不會被更新,后續的更新會逐步傳遞到訂閱,延遲消失。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女动态图120秒| 91久久久久久国产精品| 国产精品欧美亚洲777777| 亚洲精品中文字幕女同| 国产成人免费91av在线| 国产精品一区二区电影| 热久久这里只有| 欧美成人在线网站| 亚洲精品国产拍免费91在线| 精品欧美一区二区三区| 国产日韩在线精品av| 久久人人爽国产| 精品欧美国产一区二区三区| 日韩欧中文字幕| 清纯唯美亚洲激情| 国产精品久久久久久久7电影| 欧美成人中文字幕在线| 91精品久久久久久久久久久久久久| 激情亚洲一区二区三区四区| 精品国产欧美一区二区三区成人| 国产精品一区二区久久精品| 欧美精品videosex性欧美| 欧美视频在线免费看| 深夜福利国产精品| 一区国产精品视频| 麻豆国产va免费精品高清在线| 国产精品成人国产乱一区| 欧美日韩999| 国产午夜一区二区| 久久男人的天堂| 国产suv精品一区二区三区88区| 青青草国产精品一区二区| 亚洲国产成人爱av在线播放| 日韩av在线天堂网| 亚洲国产日韩欧美在线动漫| 91精品视频在线免费观看| 久久精彩免费视频| 亚洲理论电影网| 九九热99久久久国产盗摄| 欧美专区第一页| 久久黄色av网站| 国产一区二区三区在线| 91精品久久久久久综合乱菊| 国产成人综合久久| 黑人极品videos精品欧美裸| 成人乱人伦精品视频在线观看| 精品国产精品自拍| 国产精品久久久久久婷婷天堂| 久久久精品中文字幕| 中文字幕亚洲综合久久| 国产一级揄自揄精品视频| 7777kkkk成人观看| 一区二区三区四区视频| 亚洲精品视频网上网址在线观看| 国产精品情侣自拍| 欧美成人剧情片在线观看| 日韩精品极品毛片系列视频| 91精品久久久久久久久| 国产欧美一区二区三区久久| xxxxx91麻豆| 欧日韩不卡在线视频| 九九精品在线视频| 成人欧美一区二区三区黑人孕妇| 久久777国产线看观看精品| 在线视频国产日韩| 亚洲一区二区自拍| 97精品国产97久久久久久免费| 96sao精品视频在线观看| 欧美视频第一页| 国产欧美一区二区三区四区| 日韩va亚洲va欧洲va国产| 在线观看亚洲视频| 日韩av手机在线| 欧美午夜无遮挡| 国产亚洲视频在线观看| 美日韩精品免费视频| 国产一区二区三区三区在线观看| 91精品国产高清自在线看超| 精品国模在线视频| 国产免费观看久久黄| 成人av电影天堂| 欧美日韩激情视频8区| 日日骚av一区| 欧美电影免费看| 欧美在线视频观看免费网站| 亚洲一级黄色片| 在线观看日韩av| 69av视频在线播放| 久久精品视频99| 精品国产乱码久久久久久天美| 亚洲欧美在线第一页| 亚洲三级 欧美三级| 亚洲va码欧洲m码| 亚洲天堂精品在线| 亚洲精品一区二三区不卡| 精品女厕一区二区三区| 日韩国产在线看| 欧美精品xxx| 国产午夜精品全部视频播放| 欧美成人免费在线观看| 日韩精品亚洲精品| 中文字幕一区日韩电影| 亚洲国语精品自产拍在线观看| 成人综合国产精品| 亚洲欧美国产另类| 欧美国产视频一区二区| 成人久久一区二区| 亚洲国产精品嫩草影院久久| 欧美成人免费观看| 91免费欧美精品| 国产精品高潮视频| 97免费视频在线播放| 92国产精品久久久久首页| 国产精品视频色| 亚洲男人天堂古典| 在线视频一区二区| 国产91在线播放精品91| 欧美黄网免费在线观看| 亚洲国产欧美久久| 久久99热精品这里久久精品| 国产精品久久久久久av福利软件| 国产一区在线播放| 国产精品欧美激情在线播放| 狠狠操狠狠色综合网| 亚洲午夜久久久久久久| 日韩最新av在线| 不卡av在线网站| 亚洲在线免费观看| 理论片在线不卡免费观看| 久久夜精品va视频免费观看| 久久99热这里只有精品国产| 国产亚洲一区二区精品| 最近2019中文字幕在线高清| 欧美成人自拍视频| 日韩在线视频网站| 国产成人精品免费久久久久| 精品一区二区三区四区在线| 92版电视剧仙鹤神针在线观看| 欧美电影电视剧在线观看| 亚洲国产成人久久综合一区| 日韩的一区二区| 国产日韩精品入口| 久久精品欧美视频| 亚洲国产另类 国产精品国产免费| 国产精品成人v| 国产色综合天天综合网| 亚洲福利在线观看| 欧美精品在线视频观看| 亚洲成年人在线播放| 亚洲999一在线观看www| 亚洲a成v人在线观看| 日本久久久久久久久| 日韩视频中文字幕| 成人女保姆的销魂服务| 亚洲18私人小影院| 一区二区三区无码高清视频| 国产激情视频一区| 久久天天躁夜夜躁狠狠躁2022| 亚洲大胆人体视频| 最好看的2019的中文字幕视频| 国产精品高潮呻吟久久av无限| 国产亚洲视频中文字幕视频| 亚洲一区二区三区四区在线播放| 国产精品美女免费看|