TRANSACTION ISOLATION vs LOCK
話說SQL server有支援下列幾種隔離模式
當中READ COMMITTED為內定所採用的模式。內定採用這樣的模式是好?是壞?見仁見智吧~不過,有時還真的是需要READ UNCOMMITTED模式。所以做個測試,著手把connection的模式修改為READ UNCOMMITTED模式…
在ASP中的作法如下…
修改好後,跑個ASP來測試,卻發結果並非我所想像,依舊因為LOCK問題,導致程式卡在那兒~
(我在 SQL Server Management Studio Express上直接下 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ,結果卻是我所預期--不會受到 lock影響,依舊可以抓到資料)
於是,只好到google上找找資料,看看為何設定後卻無效果~說法千奇百怪…結果,還是在MS官方資料上看到一句很關鍵的話,照者測試的結果,果真有效…
程式修改如下
不過,這樣感覺有點脫褲子放屁…看來,以後還是直接用下列方式就好了…
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SNAPSHOT(2005新增)
- SERIALIZABLE
當中READ COMMITTED為內定所採用的模式。內定採用這樣的模式是好?是壞?見仁見智吧~不過,有時還真的是需要READ UNCOMMITTED模式。所以做個測試,著手把connection的模式修改為READ UNCOMMITTED模式…
在ASP中的作法如下…
db.IsolationLevel = adXactReadUncommitted
或者
db.IsolationLevel = 256
或者
db.IsolationLevel = 256
修改好後,跑個ASP來測試,卻發結果並非我所想像,依舊因為LOCK問題,導致程式卡在那兒~
(我在 SQL Server Management Studio Express上直接下 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ,結果卻是我所預期--不會受到 lock影響,依舊可以抓到資料)
select * from [test_table]
於是,只好到google上找找資料,看看為何設定後卻無效果~說法千奇百怪…結果,還是在MS官方資料上看到一句很關鍵的話,照者測試的結果,果真有效…
程式修改如下
db.BeginTrans()
select * from [test_table]
db.RollBackTrans
select * from [test_table]
db.RollBackTrans
不過,這樣感覺有點脫褲子放屁…看來,以後還是直接用下列方式就好了…
select * from [test_table] WITH (NOLOCK)
留言