中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

知方可(ke)補不(bu)足(zu)~Sqlserver發布訂閱(yue)與(yu)sql事務的關系(xi)

回到目錄

前幾講說了一下通過sqlserver的發布與訂閱來實現數據的同步,再通過EF這個ORM架構最終實現架構系統的讀寫分離,而在使用發布與訂閱來實現數據同步時,需要我們注意幾點,那就是當操作被使用在“事務上下文”時,你的同步操作有可能會(hui)被延時(shi),嘟嘟!

這個(ge)不難理解(jie),我(wo)們都(dou)知道事務(wu)有(you)一(yi)些級別,而最(zui)(zui)高級別serializable 又是.net TransactionScope默認的(de)(de)級別,所以,在程序開發(fa)中(zhong),只要用(yong)了事務(wu),基本都(dou)是serializable,而這個(ge)級別是最(zui)(zui)安全的(de)(de),當然對于SQL來說,也是最(zui)(zui)容(rong)易(yi)發(fa)生(sheng)死鎖及阻塞的(de)(de),呵呵。

如果對要SQL鎖不清楚的同學,可以看我的這篇文章《知方可補不足~Sqlserver中的幾把鎖和.net中的事務級別

下(xia)面(mian)是我總結的(de)(de),在事務(wu)為serializable級別(bie),對于發布(bu)訂(ding)訂(ding)閱同步的(de)(de)關系

set transaction isolation level serializable 
begin tran
 
select * from User_Info                --讀取所有數(shu)據,等待事務結(jie)束(shu)后(hou)才能同步 TAB(S) ,TAB(IX)    
update User_Info set Status=1 where UserInfoID=1 --更新其他數據,可以立即(ji)同步  TAB(IX),Page(IX),Key(X)
select * from User_Info where UserInfoID=1       --事務中讀取其(qi)他數據(ju),可以立即(ji)同步(bu) TAB(IS),KEY(S),Page(IS)
select * from User_Info where UserInfoID=28      --事務(wu)中讀當前數據(ju),等待事務(wu)結束后才能同步   TAB(IS),KEY(S),Page(IS)
select * from User_Info where UserInfoID<30      --事務中(zhong)讀取范圍(wei)數據(ju),包(bao)括要同步的數據(ju),等待(dai)事務結束后才能同步,tab(is), KEY(ranges-s),page(is)
select * from User_Info where UserInfoID<10      --事務中讀取范(fan)圍數(shu)據,不包括要同(tong)(tong)步(bu)的數(shu)據,可以立即同(tong)(tong)步(bu),tab(is), KEY(ranges-s),page(is)

waitfor delay '00:02:00' --等(deng)待2分(fen)鐘 
commit tran

通過上面(mian)的結果,我們可以知道,只(zhi)要(yao)當前需(xu)要(yao)同步(bu)(正在(zai)發生變(bian)化(hua)的數據,就是(shi)要(yao)同步(bu)的數據)的數據不在(zai)被鎖的范圍里(li),就不會對同步(bu)有所影響,當然,你(ni)要(yao)是(shi)在(zai)事(shi)務(wu)里(li)來個select * from table,那(nei)你(ni)就玩完(wan)了,需(xu)要(yao)等待你(ni)的事(shi)務(wu)結束(shu)后,你(ni)這(zhe)個張表發生變(bian)

化的數(shu)據(ju)才能被同步,所以(yi),經(jing)驗告訴我們,在事務里(li),能不寫(xie)查(cha)詢就不要寫(xie),呵呵。

下面圖中顯示的是在一個事務里添加了范圍鎖的例子,看上支挺恐怖的,它對應的語句是select * from User_Info where UserInfoID<10,直接查(cha)詢出10條(tiao)(tiao)數(shu)據(ju)(ju),這(zhe)時,SQL會把這(zhe)10條(tiao)(tiao)數(shu)據(ju)(ju)分別加上范圍共享鎖,以對(dui)這(zhe)10條(tiao)(tiao)數(shu)據(ju)(ju)進(jin)行保(bao)護,你此時,要(yao)想對(dui)這(zhe)10條(tiao)(tiao)數(shu)據(ju)(ju)的任何一條(tiao)(tiao)進(jin)行修(xiu)改(gai),那只能等待事(shi)務結束(shu)后了......

回到目錄

posted @ 2015-01-16 10:19  張占嶺  閱讀(1404)  評論(2)    收藏  舉報