成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

探討:在每個(gè)表后面都加onlock是否合適

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維 其他數(shù)據(jù)庫(kù)
目前參與的一個(gè)項(xiàng)目,我發(fā)現(xiàn)一個(gè)問題,就是大家在寫查詢時(shí),為了性能,往往會(huì)在表后面加一個(gè)nolock,或者是with(nolock),其目的就是查詢是不鎖定表,從而達(dá)到提高查詢速度的目的。這點(diǎn)可能很多朋友在做開發(fā)時(shí)都會(huì)遇到,不過如果說系統(tǒng)中的每個(gè)查詢語(yǔ)句中的表都加上nolock,您是否同意這么做呢?

為了更好的討論是否合適,我們先解釋一些基本問題。

什么是并發(fā)訪問:同一時(shí)間有多個(gè)用戶訪問同一資源,并發(fā)用戶中如果有用戶對(duì)資源做了修改,此時(shí)就會(huì)對(duì)其它用戶產(chǎn)生某些不利的影響,例如:

1.臟讀

一個(gè)用戶對(duì)一個(gè)資源做了修改,此時(shí)另外一個(gè)用戶正好讀取了這條被修改的記錄,然后,第一個(gè)用戶放棄修改,數(shù)據(jù)回到修改之前,這兩個(gè)不同的結(jié)果就是臟讀。

2.不可重復(fù)讀

一個(gè)用戶的一個(gè)操作是一個(gè)事務(wù),這個(gè)事務(wù)分兩次讀取同一條記錄,如果第一次讀取后,有另外用戶修改了這個(gè)數(shù)據(jù),然后第二次讀取的數(shù)據(jù)正好是其它用戶修改的數(shù)據(jù),這樣造成兩次讀取的記錄不同,如果事務(wù)中鎖定這條記錄就可以避免。

3.幻讀

指用戶讀取一批記錄的情況,用戶兩次查詢同一條件的一批記錄,第一次查詢后,有其它用戶對(duì)這批數(shù)據(jù)做了修改,方法可能是修改,刪除,新增,第二次查詢時(shí),會(huì)發(fā)現(xiàn)第一次查詢的記錄條目有的不在第二次查詢結(jié)果中,或者是第二次查詢的條目不在第一次查詢的內(nèi)容中。

為什么會(huì)在查詢的表后面加nolock標(biāo)識(shí)?為了避免并發(fā)訪問產(chǎn)生的不利影響,SQLServer有兩種并發(fā)訪問的控制機(jī)制:鎖、行版本控制,表后面加nolock是解決并發(fā)訪問的方案之一。

1>鎖,每個(gè)事務(wù)對(duì)所依賴的資源會(huì)請(qǐng)求不同類型的鎖,它可以阻止其他事務(wù)以某種可能會(huì)導(dǎo)致事務(wù)請(qǐng)求鎖出錯(cuò)的方式修改資源。當(dāng)事務(wù)不再依賴鎖定的資源時(shí),鎖將被釋放。

鎖的類型:1:表類型:鎖定整個(gè)表;2:行類型:鎖定某個(gè)行;3:文件類型:鎖定某個(gè)數(shù)據(jù)庫(kù)文件;4:數(shù)據(jù)庫(kù)類型:鎖定整個(gè)數(shù)據(jù)庫(kù);5:頁(yè)類型:鎖定8K為單位的數(shù)據(jù)庫(kù)頁(yè)。

鎖的分類還有一種分法,就是按用戶和數(shù)據(jù)庫(kù)對(duì)象來分:

1)從數(shù)據(jù)庫(kù)系統(tǒng)的角度來看:分為獨(dú)占鎖(即排它鎖),共享鎖和更新鎖

1.共享(S):用于不更改或不更新數(shù)據(jù)的操作(只讀操作),一般常見的例如select語(yǔ)句。

2.更新(U):用于可更新的資源中。防止當(dāng)多個(gè)會(huì)話在讀取、鎖定以及隨后可能進(jìn)行的資源更新時(shí)發(fā)生常見形式的死鎖。

3.排它(X):用于數(shù)據(jù)修改操作,例如INSERT、UPDATE或DELETE。確保不會(huì)同時(shí)同一資源進(jìn)行多重更新。

2)從程序員的角度看:分為樂觀鎖和悲觀鎖

1.樂觀鎖:完全依靠數(shù)據(jù)庫(kù)來管理鎖的工作。

2.悲觀鎖:程序員自己管理數(shù)據(jù)或?qū)ο笊系逆i處理。

一般程序員一看到什么鎖之類,覺的特別復(fù)雜,對(duì)專業(yè)的DBA當(dāng)然是入門級(jí)知識(shí)了。可喜的是程序員不用去設(shè)置,控制這些鎖,SQLServer通過設(shè)置事務(wù)的隔離級(jí)別自動(dòng)管理鎖的設(shè)置和控制。鎖管理器通過查詢分析器分析待執(zhí)行的sql語(yǔ)句,來判斷語(yǔ)句將會(huì)訪問哪些資源,進(jìn)行什么操作,然后結(jié)合設(shè)定的隔離級(jí)別自動(dòng)分配管理需要用到的鎖。

2>:行版本控制:當(dāng)啟用了基于行版本控制的隔離級(jí)別時(shí),數(shù)據(jù)庫(kù)引擎將維護(hù)修改的每一行的版本。應(yīng)用程序可以指定事務(wù)使用行版本查看事務(wù)或查詢開始時(shí)存在的數(shù)據(jù),而不是使用鎖保護(hù)所有讀取。通過使用行版本控制,讀取操作阻止其他事務(wù)的可能性將大大降低。也就是相當(dāng)于針對(duì)所有的表在查詢時(shí)都會(huì)加上nolock,同樣會(huì)產(chǎn)生臟讀的現(xiàn)象,但差別在于在一個(gè)統(tǒng)一管理的地方。說到了基于行版本控制的隔離級(jí)別,這里有必要說下隔離級(jí)別的概念。

隔離級(jí)別的用處:控制鎖的應(yīng)用,即什么場(chǎng)景應(yīng)用什么樣的鎖機(jī)制。

最終目的:解決并發(fā)處理帶來的種種問題。

隔離級(jí)別的分類:

1.未提交讀,隔離事務(wù)的最低級(jí)別,只能保證不讀取物理上損壞的數(shù)據(jù);

2.已提交讀,數(shù)據(jù)庫(kù)引擎的默認(rèn)級(jí);

3.可重復(fù)讀;

4.可序列化;隔離事務(wù)的最高級(jí)別,事務(wù)之間完全隔離。

小結(jié)

NOLOCK語(yǔ)句執(zhí)行時(shí)不發(fā)出共享鎖,允許臟讀,等于READUNCOMMITTED事務(wù)隔離級(jí)別。nolock確實(shí)在查詢時(shí)能提高速度,但它并不是沒有缺點(diǎn)的,起碼它會(huì)引起臟讀。

nolock的使用場(chǎng)景(個(gè)人觀點(diǎn)):

1.數(shù)據(jù)量特別大的表,犧牲數(shù)據(jù)安全性來提升性能是可以考慮的;

2.允許出現(xiàn)臟讀現(xiàn)象的業(yè)務(wù)邏輯,反之一些數(shù)據(jù)完整性要求比較嚴(yán)格的場(chǎng)景就不合適了,像金融方面等。

3.數(shù)據(jù)不經(jīng)常修改的表,這樣會(huì)省于鎖定表的時(shí)間來大大加快查詢速度。

綜上所述,如果在項(xiàng)目中的每個(gè)查詢的表后面都加nolock,這種做法并不科學(xué),起碼特別費(fèi)時(shí)間,不如行版本控制來的直接有效。而且會(huì)存在不可預(yù)期的技術(shù)問題。應(yīng)該有選擇性的挑選最適合的表來放棄共享鎖的使用。

最后說下nolock和with(nolock)的幾個(gè)小區(qū)別:

1.SQL05中的同義詞,只支持with(nolock);

2.with(nolock)的寫法非常容易再指定索引。

【編輯推薦】

  1. 詳解MySQL分組查詢Group By實(shí)現(xiàn)原理
  2. 用并行查詢讓SQL Server加速運(yùn)行
  3. 解決Oracle分頁(yè)查詢中排序與效率問題
責(zé)任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2021-01-26 12:53:12

ReduxReact前端

2024-06-26 00:34:12

2024-04-17 14:03:55

CIOITCEO

2020-03-11 16:22:59

戴爾

2020-12-22 13:49:23

開發(fā)編碼框架

2015-04-08 10:39:10

云存儲(chǔ)云存儲(chǔ)技術(shù)標(biāo)準(zhǔn)

2019-06-03 09:15:15

KubernetesKafka數(shù)據(jù)庫(kù)

2020-04-20 18:15:46

開發(fā)自信技術(shù)

2019-07-19 11:21:48

云安全云計(jì)算數(shù)據(jù)

2012-07-11 14:13:36

bug開發(fā)者程序員

2018-03-26 05:11:15

2011-04-13 09:31:50

Oracle

2011-11-17 09:55:38

SAPiPad

2019-09-16 11:37:07

大數(shù)據(jù)數(shù)據(jù)分析工具

2011-04-06 15:25:38

GameSaladApp Store

2021-06-11 11:07:40

云計(jì)算財(cái)務(wù)運(yùn)營(yíng)FinOps

2024-12-10 08:38:15

2023-04-26 10:54:50

2024-04-24 15:08:17

2012-12-25 10:27:55

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩精品在线观看一区二区 | av三级在线观看 | 精品国产一区二区在线 | 久久久久国产 | 免费网站国产 | 国产精品久久久久久久久图文区 | 91新视频 | 久久精品视频12 | 精品视频久久久久久 | 最新日韩在线视频 | 亚洲精品在线91 | 成人免费网视频 | 四虎影院一区二区 | v亚洲| 国产欧美日韩精品一区 | 天天色官网 | 日韩欧美在线视频观看 | 91视频一区 | 久久99精品国产99久久6男男 | 免费黄色录像片 | 精品欧美一区免费观看α√ | 日韩久久久久 | 国产精品亚洲片在线播放 | 国产精品高清一区二区三区 | 色性av | 欧美二区在线 | 亚洲一区二区三区四区在线观看 | 久久久久久久国产 | 欧美福利精品 | 欧美亚洲另类丝袜综合网动图 | 国产成人精品综合 | 免费国产精品久久久久久 | www.国产精品 | 久热免费在线 | 日本三级网站在线 | 久久精品91| 黄色大片观看 | 中文字幕av高清 | 天天干夜夜操 | 黄色毛片网站在线观看 | 日本久久精品 |