SqlServer的with(nolock)關鍵字的用法介紹

?

舉個例子

下面就來演示這個情況。

為了演示兩個事務死鎖的情況,我們下面的測試都需要在SQL Server Management Studio中打開兩個查詢窗口。保證事務不被干擾。?

--1、 沒有提交的事務,NOLOCK 和 READPAST處理的策略:
--查詢窗口一請執行如下腳本:
CREATE TABLE t1 (c1 int IDENTITY(1,1), c2 int)
go
BEGIN TRANSACTION
insert t1(c2) values(1) 

select count(*) from t1 WITH(NOLOCK)
select count(*) from t1 WITH(READPAST) 
--結果與分析:

?

?

查詢窗口二依次顯示統計結果為:1、0

查詢窗口一的命令沒有提交事務,所以 READPAST 不會計算沒有提交事務的這一條記錄,這一條被鎖住了,READPAST 看不到;而NOLOCK則可以看到被鎖住的這一條記錄。?

select count(*) from t1 

如果這時候我們在查詢窗口二中執行:

select count(*) from t1 就會看到這個執行很久不能執行完畢,因為這個查詢遇到了一個死鎖。

?

?

清除掉這個測試環境,需要在查詢窗口一中再執行如下語句:

ROLLBACK TRANSACTION
drop table t1

演示二:對被鎖住的記錄,NOLOCK 和 READPAST處理的策略

這個演示同樣需要兩個查詢窗口。

請在查詢窗口一中執行如下語句:

CREATE TABLE t2 (UserID int , NickName nvarchar(50))
go
insert t2(UserID,NickName) values(1,'lucas')
insert t2(UserID,NickName) values(2,'fuckcpp')
goBEGIN TRANSACTION
update t2 set NickName = 'fuckcpp.net' where UserID = 2 

?

請在查詢窗口二中執行如下腳本:

select * from t2 WITH(NOLOCK) where UserID = 2
select * from t2 WITH(READPAST) where UserID = 2

?

?

結果與分析:

查詢窗口二中, NOLOCK 對應的查詢結果中我們看到了修改后的記錄,READPAST對應的查詢結果中我們沒有看到任何一條記錄。這種情況下就可能發生臟讀

三、with(nolock)的適用場景

1、數據量特別大的表,犧牲數據時效性來提升性能是可以考慮的;

2、允許出現臟讀現象的業務邏輯,反之一些數據完整性要求比較嚴格的場景就不合適了,像電商、金融方面等。

3、數據不經常修改的表,這樣會省掉鎖定表的時間來加快查詢速度。

4、當使用NoLock時,它允許閱讀那些已經修改但是還沒有交易完成的數據。因此如果有需要考慮transaction事務數據的實時完整性時,使用WITH (NOLOCK)就要好好考慮一下

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43341.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【馬蹄集】第二十三周——進位制專題

進位制專題 目錄 MT2186 二進制?不同!MT2187 excel的煩惱MT2188 單條件和MT2189 三進制計算機1MT2190 三進制計算機2 MT2186 二進制?不同! 難度:黃金 ?? 時間限制:1秒 ?? 占用內存:128M 題目…

Kotlin的Map

在 Kotlin 中,Map 是一種鍵值對的集合數據結構,用于存儲一組關聯的鍵和值。Kotlin 標準庫提供了 Map 接口和多種實現類,使得操作和處理鍵值對數據更加方便。下面詳細描述 Kotlin 的 Map 的用法: 創建 Map Kotlin 提供了幾種方式…

SQL力扣練習(十一)

目錄 1.樹節點(608) 示例 1 解法一(case when) 解法二(not in) 2.判斷三角形(610) 示例 1 解法一(case when) 解法二(if) 解法三(嵌套if) 3.只出現一次的最大數字(619) 示例 1 解法一(count limit) 解法二(max) 4.有趣的電影(620) 解法一 5.換座位(626) 示例 …

同步jenkinsfile流水線(sync-job)

環境 變量:env(環境變量:sit/dev/simulation/prod/all),job(job-name/all)目錄:/var/lib/jenkins/jenkinsfile environment.json: [roottest-01 jenkinsfile]# cat env…

C++ string類的模擬實現

模擬實現string類不是為了造一個更好的輪子,而是更加理解string類,從而來掌握string類的使用 string類的接口設計繁多,故而不會全部涵蓋到,但是核心的會模擬實現 庫中string類是封裝在std的命名空間中的,所以在模擬…

webpack5和webpack4的一些區別

自動清除打包目錄 webpack4 // bash npm i clean-webpack-plugin -D //webpack.config.js const {CleanWebpackPlugin} require(clean-webpack-plugin); module.exports {plugins: [new CleanWebpackPlugin()} } webpack5 module.exports {output: {clean: true} } topLevel…

使用PostgreSQL構建強大的Web應用程序:最佳實踐和建議

PostgreSQL是一個功能強大的開源關系型數據庫,它擁有廣泛的用戶群和活躍的開發社區。越來越多的Web應用選擇PostgreSQL作為數據庫 backend。如何充分利用PostgreSQL的特性來構建健壯、高性能的Web應用?本文將給出一些最佳實踐和建議。 一、選擇合適的PostgreSQL數據類型 Pos…

【Vue】Mixin 混入

Vue Mixin 混入 1.簡介 混入(mixin)提供了一種非常靈活的方式,來分發 Vue 組件中的可復用功能。一個混入對象可以包含任意組件選項(如data、methods、mounted等等)。當組件使用混入對象時,所有混入對象的…

Java將時間戳轉化為特定時區的日期字符串

先上代碼: ZonedDateTime dateTime ZonedDateTime.ofInstant(Instant.ofEpochMilli(System.currentTimeMillis()),zone ); //2019-12-01T19:01:4608:00String formattedDate dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd") ); //2019-12-…

.git內存清理方式

查看前15個大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk {print$1})"刪除文件夾(public/housimg文件夾目錄) git filter-branch --tree-filter rm -rf publ…

解決使用element ui時el-input的屬性type=number,仍然可以輸入e的問題。

使用element ui時el-input的屬性typenumber,仍然可以輸入e, 其他的中文特殊字符都不可以輸入,但是只有e是可以輸入的,原因是e也輸入作為科學計數法的時候,e是可以被判定為數字的, 但是有些場景是需要把e這種…

DICOM圖像的常用一些參數解析

醫學圖像DICOM醫學影像文件格式詳解 Dicom文件基本操作 DICOM圖像參數? 像素:構成圖片的小色點。圖像每個維度的像素個數——該維度一共有多少個均勻分布的像素點。 分辨率(單位DPI):每英寸(Inch&#xf…

鴻蒙剝離 AOSP 不兼容 Android 熱門問題匯總,不吹不黑不吵

上周發了一篇 《鴻蒙終于不套殼了?純血 HarmonyOS NEXT 即將到來》的相關資訊,沒想到大家「討(fa)論(xie)」的熱情很高,莫名蹭了一波流量,雖然流量對我來說也沒什么用,但…

私密數據采集:隧道爬蟲IP技術的保密性能力探究

作為一名專業的爬蟲程序員,今天要和大家分享一個關鍵的技術,它能夠為私密數據采集提供保密性能力——隧道爬蟲IP技術。如果你在進行敏感數據采集任務時需要保護數據的私密性,那么這項技術將是你的守護神。 在進行私密數據采集任務時&#xff…

不了解UI設計需要掌握的技能? 優漫動游

很多人聽說過UI設計行業,知道它是用來制作界面的高薪技術,但對于做UI設計需要什么技能卻不是很清楚。且看本文的分析。? 不了解UI設計需要掌握的技能? ??UI設計是英文User和interface的縮寫,是指對軟件的人機交互、操作邏輯、界…

Java基礎知識題(二)

系列文章目錄 Java基礎知識題(一) 文章目錄 系列文章目錄 前言 1. Java中的 組合、聚合和關聯有什么區別? 2. 解釋為什么Java被稱作是“平臺無關的編程語言”? 3. 簡述什么是值傳遞和引用傳遞?重點 4. 詳細闡述Java進程和線程的區別 …

Java # JVM

一、1.8之前 運行時數據區(進程共享) 運行時常量池為什么要有方法區: jvm完成類裝載后,需要將class文件中的常量池轉入內存,保存在方法區中為什么是常量: 常量對象操作較多,為了避免頻繁創建和…

圖像去雨-雨線清除-圖像處理-(計算機作業附代碼)

背景 多年來,圖像去雨已經被廣泛研究,使用傳統方法和基于學習的方法。然而,傳統方法如高斯混合模型和字典學習方法耗時,并且無法很好地處理受到嚴重雨滴影響的圖像塊。 算法 通過考慮雨滴條狀特性和角度分布,這個問…

【Leetcode】98. 驗證二叉搜索樹

一、題目 1、題目描述 給你一個二叉樹的根節點 root ,判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下: 節點的左子樹只包含 小于 當前節點的數。節點的右子樹只包含 大于 當前節點的數。所有左子樹和右子樹自身必須也是二叉搜索樹。示例1: 輸入:root = …