SQL Server 行版本控制,with(nolock)

一 。什麼時候可以使用WITH(NOLOCK)? 什麼時候不能使用WITH(NOLOCK),這個要視你係統業務情況,綜合考慮性能情況與業務要求來決定是否使用WITH(NOLOCK), 例如涉及到金融或會計成本之類的系統,出現髒讀那是要產生嚴重問題的。關鍵業務系統也要慎重考慮。大體來說一般有下面一些場景可以使用WITH(NOLOCK)

   1: 基礎數據表,這些表的數據很少變更。

   2:歷史數據表,這些表的數據很少變更。

   3:業務允許髒讀情況出現涉及的表。

   4:數據量超大的表,出於性能考慮,而允許髒讀。

二。SQL Server 行版本控制

當發現系統中存在大量讀寫阻塞的時候,就是我們開啓行版本的時候了。要點:寫寫阻塞的場景行版本技術解決不了

開啓方式:

1

2

3

4

5

6

7

8

9

10

11

12

-- 設置爲單用戶

ALTER DATABASE MyTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

GO

-- 開啓行版本(事務級)

ALTER DATABASE MyTest SET ALLOW_SNAPSHOT_ISOLATION ON;

GO

-- 開啓語句級行版本

ALTER DATABASE MyTest SET READ_COMMITTED_SNAPSHOT ON WITH no_wait

GO

-- 設置爲多用戶

ALTER DATABASE MyTest SET MULTI_USER WITH ROLLBACK IMMEDIATE;

GO

 開啓語句級行版本注意點:

如果將 READ_COMMITTED_SNAPSHOT 設置爲 ON,則數據庫引擎會使用行版本控制爲每個語句提供一個在事務上一致的數據快照,缺點是用戶讀到的雖然不是一個髒數據,但是可能是個正在被修改馬上就要過期的數據值。如果根據這個過期的值做數據修改,會產生邏輯錯誤。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章