當前位置:首頁 » 編程語言 » sqlserver並發鎖
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlserver並發鎖

發布時間: 2022-07-10 20:27:48

A. sqlserver 並發讀寫中時間戳與行鎖哪個好

一直對時間戳這個概念比較模糊,相信有很多朋友也都會誤認為:時間戳是一個時間欄位,每次增加數據時,填入當前的時間值。其實這誤導了很多朋友。 時間戳:資料庫中自動生成的唯一二進制數字,與時間和日期無關的, 通常用作給錶行加版本戳的機制。存儲大小為 8個位元組。 每個資料庫都有一個計數器,當對資料庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。該計數器是資料庫時間戳。這可以跟蹤資料庫內的相對時間,而不是時鍾相關聯的實際時間。一個表只能有一個 timestamp 列。每次修改或插入包含 timestamp 列的行時,就會在 timestamp 列中插入增量資料庫時間戳值。這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。對行的任何更新都會更改 timestamp 值,從而更改鍵值。如果該列屬於主鍵,那麼舊的鍵值將無效,進而引用該舊值的外鍵也將不再有效。如果該表在動態游標中引用,則所有更新均會更改游標中行的位置。如果該列屬於索引鍵,則對數據行的所有更新還將導致索引更新。 使用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以後是否發生了更改。如果對行進行了更改,就會更新該時間戳值。

B. SQLserver是怎麼處理並發控制(同時有多個用戶操作修改資料庫中同一條記錄)server和客戶端分別如何處理

sqlserver
本身通過不同等級的鎖處理並發控制。
有記錄鎖、頁鎖、表鎖。
如果多個用戶同時操作一個記錄,只有第一個能修改,後面的修改時處理等等狀態。
但是在一般程序界面上,多個人同時打開了同一個記錄要進行修改,資料庫往往是保存最後一個修改的數據。可以在保存前做驗證,如果發現打開的數據已改變(界面和資料庫一不致了),則提示數據已改變,重新獲取新數據,然後才能修改和保存。

C. 並發問題,鎖,怎麼處理死鎖,臟數據處理

您好,很高興能幫助您,
db2 是對某表某一條記錄操作的時候,他會對整個表進行表鎖定,如果設置的事務級別是可重復的讀,那麼另外一個人的同步操作就會被回滾,不過可以通過sql語句指定鎖定級別,sqlserver默認是對行數據進行鎖定,你如果要看這個問題,你可以先研究一下資料庫的鎖定方式和鎖定級別,死鎖是一定存在的,特別是在並發操作很多的情況,這個和你資料庫的設計有關系,關鍵是捕獲到死鎖後怎麼樣對死鎖進行釋放
你的採納是我前進的動力,還有不懂的地方,請你繼續「追問」!
如你還有別的問題,可另外向我求助;答題不易,互相理解,互相幫助!

D. sql server 2005 update與並發問題

update是寫鎖,select是讀鎖,肯定是不能同時執行的.
樓主學過操作系統的話,就知道的.只能讀鎖和讀鎖可同時執行,讀鎖和寫鎖,寫鎖和寫鎖都不能.
不知到樓主說的開發,指的是,資料庫應用開發,還是指dbms本身的開發.應用開發的話,update的存儲過程設定依賴關系,保證它按你想要的順序跑不就可以了嗎?
一般情況下,update的時間瓶頸肯定是磁碟I/O,如果你保證操作相同數據的程序,盡可能連續的執行,提高緩沖區的命中率,應該也可以達到並發的效果.

E. 並發控制為什麼要使用意向鎖

給你個最詳細的吧可能有你要的內容鎖的概述一.為什麼要引入鎖多個用戶同時對資料庫的並發操作時會帶來以下數據不一致的問題:丟失更新A,B兩個用戶讀同一數據並進行修改,其中一個用戶的修改結果破壞了另一個修改的結果,比如訂票系統臟讀A用戶修改了數據,隨後B用戶又讀出該數據,但A用戶因為某些原因取消了對數據的修改,數據恢復原值,此時B得到的數據就與資料庫內的數據產生了不一致不可重復讀A用戶讀取數據,隨後B用戶讀出該數據並修改,此時A用戶再讀取數據時發現前後兩次的值不一致並發控制的主要方法是封鎖,鎖就是在一段時間內禁止用戶做某些操作以避免產生數據不一致二鎖的分類鎖的類別有兩種分法:1.從資料庫系統的角度來看:分為獨占鎖(即排它鎖),共享鎖和更新鎖MS-SQLServer使用以下資源鎖模式。鎖模式描述共享(S)用於不更改或不更新數據的操作(只讀操作),如SELECT語句。更新(U)用於可更新的資源中。防止當多個會話在讀取、鎖定以及隨後可能進行的資源更新時發生常見形式的死鎖。排它(X)用於數據修改操作,例如INSERT、UPDATE或DELETE。確保不會同時同一資源進行多重更新。意向鎖用於建立鎖的層次結構。意向鎖的類型為:意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。架構鎖在執行依賴於表架構的操作時使用。架構鎖的類型為:架構修改(Sch-M)和架構穩定性(Sch-S)。大容量更新(BU)向表中大容量復制數據並指定了TABLOCK提示時使用。共享鎖共享(S)鎖允許並發事務讀取(SELECT)一個資源。資源上存在共享(S)鎖時,任何其它事務都不能修改數據。一旦已經讀取數據,便立即釋放資源上的共享(S)鎖,除非將事務隔離級別設置為可重復讀或更高級別,或者在事務生存周期內用鎖定提示保留共享(S)鎖。更新鎖更新(U)鎖可以防止通常形式的死鎖。一般更新模式由一個事務組成,此事務讀取記錄,獲取資源(頁或行)的共享(S)鎖,然後修改行,此操作要求鎖轉換為排它(X)鎖。如果兩個事務獲得了資源上的共享模式鎖,然後試圖同時更新數據,則一個事務嘗試將鎖轉換為排它(X)鎖。共享模式到排它鎖的轉換必須等待一段時間,因為一個事務的排它鎖與其它事務的共享模式鎖不兼容;發生鎖等待。第二個事務試圖獲取排它(X)鎖以進行更新。由於兩個事務都要轉換為排它(X)鎖,並且每個事務都等待另一個事務釋放共享模式鎖,因此發生死鎖。若要避免這種潛在的死鎖問題,請使用更新(U)鎖。一次只有一個事務可以獲得資源的更新(U)鎖。如果事務修改資源,則更新(U)鎖轉換為排它(X)鎖。否則,鎖轉換為共享鎖。排它鎖排它(X)鎖可以防止並發事務對資源進行訪問。其它事務不能讀取或修改排它(X)鎖鎖定的數據。意向鎖意向鎖表示SQLServer需要在層次結構中的某些底層資源上獲取共享(S)鎖或排它(X)鎖。例如,放置在表級的共享意向鎖表示事務打算在表中的頁或行上放置共享(S)鎖。在表級設置意向鎖可防止另一個事務隨後在包含那一頁的表上獲取排它(X)鎖。意向鎖可以提高性能,因為SQLServer僅在表級檢查意向鎖來確定事務是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務是否可以鎖定整個表。意向鎖包括意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。鎖模式描述意向共享(IS)通過在各資源上放置S鎖,表明事務的意向是讀取層次結構中的部分(而不是全部)底層資源。意向排它(IX)通過在各資源上放置X鎖,表明事務的意向是修改層次結構中的部分(而不是全部)底層資源。IX是IS的超集。與意向排它共享(SIX)通過在各資源上放置IX鎖,表明事務的意向是讀取層次結構中的全部底層資源並修改部分(而不是全部)底層資源。允許頂層資源上的並發IS鎖。例如,表的SIX鎖在表上放置一個SIX鎖(允許並發IS鎖),在當前所修改頁上放置IX鎖(在已修改行上放置X鎖)。雖然每個資源在一段時間內只能有一個SIX鎖,以防止其它事務對資源進行更新,但是其它事務可以通過獲取表級的IS鎖來讀取層次結構中的底層資源。獨占鎖:只允許進行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執行數據更新命令時,SQLServer會自動使用獨占鎖。當對象上有其他鎖存在時,無法對其加獨占鎖。共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執行Select時,SQLServer會對對象加共享鎖。更新鎖:當SQLServer准備更新數據時,它首先對數據對象作更新鎖鎖定,這樣數據將不能被修改,但可以讀取。等到SQLServer確定要進行更新數據操作時,他會自動將更新鎖換為獨占鎖,當對象上有其他鎖存在時,無法對其加更新鎖。2.從程序員的角度看:分為樂觀鎖和悲觀鎖。樂觀鎖:完全依靠資料庫來管理鎖的工作。悲觀鎖:程序員自己管理數據或對象上的鎖處理。MS-SQLSERVER使用鎖在多個同時在資料庫內執行修改的用戶間實現悲觀並發控制三鎖的粒度鎖粒度是被封鎖目標的大小,封鎖粒度小則並發性高,但開銷大,封鎖粒度大則並發性低但開銷小SQLServer支持的鎖粒度可以分為為行、頁、鍵、鍵范圍、索引、表或資料庫獲取鎖資源描述RID行標識符。用於單獨鎖定表中的一行。鍵索引中的行鎖。用於保護可串列事務中的鍵范圍。頁8千位元組(KB)的數據頁或索引頁。擴展盤區相鄰的八個數據頁或索引頁構成的一組。表包括所有數據和索引在內的整個表。DB資料庫。四鎖定時間的長短鎖保持的時間長度為保護所請求級別上的資源所需的時間長度。用於保護讀取操作的共享鎖的保持時間取決於事務隔離級別。採用READCOMMITTED的默認事務隔離級別時,只在讀取頁的期間內控制共享鎖。在掃描中,直到在掃描內的下一頁上獲取鎖時才釋放鎖。如果指定HOLDLOCK提示或者將事務隔離級別設置為REPEATABLEREAD或SERIALIZABLE,則直到事務結束才釋放鎖。根據為游標設置的並發選項,游標可以獲取共享模式的滾動鎖以保護提取。當需要滾動鎖時,直到下一次提取或關閉游標(以先發生者為准)時才釋放滾動鎖。但是,如果指定HOLDLOCK,則直到事務結束才釋放滾動鎖。用於保護更新的排它鎖將直到事務結束才釋放。如果一個連接試圖獲取一個鎖,而該鎖與另一個連接所控制的鎖沖突,則試圖獲取鎖的連接將一直阻塞到:將沖突鎖釋放而且連接獲取了所請求的鎖。連接的超時間隔已到期。默認情況下沒有超時間隔,但是一些應用程序設置超時間隔以防止無限期等待五SQLServer中鎖的自定義1處理死鎖和設置死鎖優先順序死鎖就是多個用戶申請不同封鎖,由於申請者均擁有一部分封鎖權而又等待其他用戶擁有的部分封鎖而引起的無休止的等待可以使用SETDEADLOCK_PRIORITY控制在發生死鎖情況時會話的反應方式。如果兩個進程都鎖定數據,並且直到其它進程釋放自己的鎖時,每個進程才能釋放自己的鎖,即發生死鎖情況。2處理超時和設置鎖超時持續時間。@@LOCK_TIMEOUT返回當前會話的當前鎖超時設置,單位為毫秒SETLOCK_TIMEOUT設置允許應用程序設置語句等待阻塞資源的最長時間。當語句等待的時間大於LOCK_TIMEOUT設置時,系統將自動取消阻塞的語句,並給應用程序返回"已超過了鎖請求超時時段"的1222號錯誤信息示例下例將鎖超時期限設置為1,800毫秒。SETLOCK_TIMEOUT18003)設置事務隔離級別。4)對SELECT、INSERT、UPDATE和DELETE語句使用表級鎖定提示。5)配置索引的鎖定粒度可以使用sp_indexoption系統存儲過程來設置用於索引的鎖定粒度六查看鎖的信息1執行EXECSP_LOCK報告有關鎖的信息2查詢分析器中按Ctrl+2可以看到鎖的信息七使用注意事項如何避免死鎖1使用事務時,盡量縮短事務的邏輯處理過程,及早提交或回滾事務;2設置死鎖超時參數為合理范圍,如:3分鍾-10分種;超過時間,自動放棄本次操作,避免進程懸掛;3優化程序,檢查並避免死鎖現象出現;4.對所有的腳本和SP都要仔細測試,在正是版本之前。5所有的SP都要有錯誤處理(通過@error)6一般不要修改SQLSERVER事務的默認級別。不推薦強行加鎖解決問題如何對行表資料庫加鎖八幾個有關鎖的問題1如何鎖一個表的某一行*FROMtableROWLOCKWHEREid=12鎖定資料庫的一個表SELECT*FROMtableWITH(HOLDLOCK)加鎖語句:sybase:update表setcol1=col1where1=0;MSSQL:selectcol1from表(tablockx)where1=0;oracle:LOCKTABLE表INEXCLUSIVEMODE;加鎖後其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖幾個例子幫助大家加深印象設table1(A,B,C)ABCa1b1c1a2b2c2a3b3c31)排它鎖新建兩個連接在第一個連接中執行以下語句begintranupdatetable1setA='aa'whereB='b2'waitfordelay'00:00:30'--等待30秒committran在第二個連接中執行以下語句begintranselect*fromtable1whereB='b2'committran若同時執行上述兩個語句,則select查詢必須等待update執行完畢才能執行即要等待30秒2)共享鎖在第一個連接中執行以下語句begintranselect*fromtable1holdlock-holdlock人為加鎖whereB='b2'waitfordelay'00:00:30'--等待30秒committran在第二個連接中執行以下語句begintranselectA,Cfromtable1whereB='b2'updatetable1setA='aa'whereB='b2'committran若同時執行上述兩個語句,則第二個連接中的select查詢可以執行而update必須等待第一個事務釋放共享鎖轉為排它鎖後才能執行即要等待30秒3)死鎖增設table2(D,E)DEd1e1d2e2在第一個連接中執行以下語句begintranupdatetable1setA='aa'whereB='b2'waitfordelay'00:00:30'updatetable2setD='d5'whereE='e1'committran在第二個連接中執行以下語句begintranupdatetable2setD='d5'whereE='e1'waitfordelay'00:00:10'updatetable1setA='aa'whereB='b2'committran同時執行,系統會檢測出死鎖,並中止進程補充一點:SqlServer2000支持的表級鎖定提示HOLDLOCK持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等於SERIALIZABLE事務隔離級別NOLOCK語句執行時不發出共享鎖,允許臟讀,等於READUNCOMMITTED事務隔離級別PAGLOCK在使用一個表鎖的地方用多個頁鎖READPAST讓sqlserver跳過任何鎖定行,執行事務,適用於READUNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖ROWLOCK強制使用行鎖TABLOCKX強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表UPLOCK強制在讀表時使用更新而不用共享鎖應用程序鎖:應用程序鎖就是客戶端代碼生成的鎖,而不是sqlserver本身生成的鎖處理應用程序鎖的兩個過程sp_getapplock鎖定應用程序資源sp_releaseapplock為應用程序資源解鎖注意:鎖定資料庫的一個表的區別SELECT*FROMtableWITH(HOLDLOCK)其他事務可以讀取表,但不能更新刪除SELECT*FROMtableWITH(TABLOCKX)其他事務不能讀取表,更新和刪除參考資料:

F. 關於sqlserver存儲過程事務鎖的問題

就你上面的事例而言,select的共享鎖性質是得到結果即釋放,不會在事務中保留
而update所用到的U鎖及其進一步的X鎖則需要持續到事務的結束
如果是多線程的程序的話,在select與update處都可能會出現鎖等待,這要根據實際操作中數據是否沖突來看

G. sqlserver 並發問題

從來沒有真正的同時寫入
使用事務一個一個寫入吧,不報錯就成了,
還有,寫操作速度很快的,完全不用糾結等待的時間

H. 解析:如何快速掌握SQLServer的鎖機制

各種大型資料庫所採用的鎖的基本理論是一致的,但在具體實現上各有差別。SQLServer更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為資料庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。對於一般的用戶而言,通過系統的自動鎖定管理機制基本可以滿足使用要求,但如果對數據安全、資料庫完整性和一致性有特殊要求,就需要了解SQLServer的鎖機制,掌握資料庫鎖定方法。 鎖是資料庫中的一個非常重要的概念,它主要用於多用戶環境下保證資料庫完整性和一致性。我們知道,多個用戶能夠同時操縱同一個資料庫中的數據,會發生數據不一致現象。即如果沒有鎖定且多個用戶同時訪問一個資料庫,則當他們的事務同時使用相同的數據時可能會發生問題。這些問題包括:丟失更新、臟讀、不可重復讀和幻覺讀: 1.當兩個或多個事務選擇同一行,然後基於最初選定的值更新該行時,會發生丟失更新問題。每個事務都不知道其它事務的存在。最後的更新將重寫由其它事務所做的更新,這將導致數據丟失。例如,兩個編輯人員製作了同一文檔的電子復本。每個編輯人員獨立地更改其復本,然後保存更改後的復本,這樣就覆蓋了原始文檔。最後保存其更改復本的編輯人員覆蓋了第一個編輯人員所做的更改。如果在第一個編輯人員完成之後第二個編輯人員才能進行更改,則可以避免該問題。 2.臟讀就是指當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。因為這個數據是還沒有提交的數據,那麼另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。例如,一個編輯人員正在更改電子文檔。在更改過程中,另一個編輯人員復制了該文檔(該復本包含到目前為止所做的全部更改)並將其分發給預期的用戶。此後,第一個編輯人員認為目前所做的更改是錯誤的,於是刪除了所做的編輯並保存了文檔。分發給用戶的文檔包含不再存在的編輯內容,並且這些編輯內容應認為從未存在過。如果在第一個編輯人員確定最終更改前任何人都不能讀取更改的文檔,則可以避免該問題。 3.不可重復讀是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那麼,在第一個事務中的兩次讀數據之間,由於第二個事務的修改,那麼第一個事務兩次讀到的的數據可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱為是不可重復讀。例如,一個編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當編輯人員第二次讀取文檔時,文檔已更改。原始讀取不可重復。如果只有在作者全部完成編寫後編輯人員才可以讀取文檔,則可以避免該問題。 4.幻覺讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麼,以後就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺一樣。例如,一個編輯人員更改作者提交的文檔,但當生產部門將其更改內容合並到該文檔的主復本時,發現作者已將未編輯的新材料添加到該文檔中。如果在編輯人員和生產部門完成對原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問題。 所以,處理多用戶並發訪問的方法是加鎖。鎖是防止其他事務訪問指定的資源控制、實現並發控制的一種主要手段。當一個用戶鎖住資料庫中的某個對象時,其他用戶就不能再訪問該對象。加鎖對並發訪問的影響體現在鎖的粒度上。為了控制鎖定的資源,應該首先了解系統的空間管理。在SQLServer2000系統中,最小的空間管理單位是頁,一個頁有8K。所有的數據、日誌、索引都存放在頁上。另外,使用頁有一個限制,這就是表中的一行數據必須在同一個頁上,不能跨頁。頁上面的空間管理單位是盤區,一個盤區是8個連續的頁。表和索引的最小佔用單位是盤區。資料庫是由一個或者多個表或者索引組成,即是由多個盤區組成。放在一個表上的鎖限制對整個表的並發訪問;放在盤區上的鎖限制了對整個盤區的訪問;放在數據頁上的鎖限制了對整個數據頁的訪問;放在行上的鎖只限制對該行的並發訪問。 SQLServer2000具有多粒度鎖定,允許一個事務鎖定不同類型的的資源。為了使鎖定的成本減至最少,SQLServer自動將資源鎖定在適合任務的級別。鎖定在較小的粒度(例如行)可以增加並發但需要較大的開銷,因為如果鎖定了許多行,則需要控制更多的鎖。鎖定在較大的粒度(例如表)就並發而言是相當昂貴的,因為鎖定整個表限制了其它事務對表中任意部分進行訪問,但要求的開銷較低,因為需要維護的鎖較少。SQLServer可以鎖定行、頁、擴展盤區、表、庫等資源。 行是可以鎖定的最小空間,行級鎖佔用的數據資源最少,所以在事務的處理過程中,允許其他事務繼續操縱同一個表或者同一個頁的其他數據,大大降低了其他事務等待處理的時間,提高了系統的並發性。 頁級鎖是指在事務的操縱過程中,無論事務處理數據的多少,每一次都鎖定一頁,在這個頁上的數據不能被其他事務操縱。在SQLServer7.0以前,使用的是頁級鎖。頁級鎖鎖定的資源比行級鎖鎖定的數據資源多。在頁級鎖中,即使是一個事務只操縱頁上的一行數據,那麼該頁上的其他數據行也不能被其他事務使用。因此,當使用頁級鎖時,會出現數據的浪費現象,也就是說,在同一個頁上會出現數據被佔用卻沒有使用的現象。在這種現象中,數據的浪費最多不超過一個頁上的數據行。 表級鎖也是一個非常重要的鎖。表級鎖是指事務在操縱某一個表的數據時,鎖定了這個數據所在的整個表,其他事務不能訪問該表中的其他數據。當事務處理的數據量比較大時,一般使用表級鎖。表級鎖的特點是使用比較少的系統資源,但是卻佔用比較多的數據資源。與行級鎖和頁級鎖相比,表級鎖佔用的系統資源例如內存比較少,但是佔用的數據資源卻是最大。在表級鎖時,有可能出現數據的大量浪費現象,因為表級鎖鎖定整個表,那麼其他的事務都不能操縱表中的其他數據。 盤區鎖是一種特殊類型的鎖,只能用在一些特殊的情況下。簇級鎖就是指事務佔用一個盤區,這個盤區不能同時被其他事務佔用。例如在創建資料庫和創建表時,系統分配物理空間時使用這種類型的鎖。系統是按照盤區分配空間的。當系統分配空間時,使用盤區鎖,防止其他事務同時使用同一個盤區。當系統完成分配空間之後,就不再使用這種類型的盤區鎖。特別是,當涉及到對數據操作的事務時,不使用盤區鎖。 資料庫級鎖是指鎖定整個資料庫,防止任何用戶或者事務對鎖定的資料庫進行訪問。資料庫級鎖是一種非常特殊的鎖,它只是用於資料庫的恢復操作過程中。這種等級的鎖是一種最高等級的鎖,因為它控制整個資料庫的操作。只要對資料庫進行恢復操作,那麼就需要設置資料庫為單用戶模式,這樣系統就能防止其他用戶對該資料庫進行各種操作。 行級鎖是一種最優鎖,因為行級鎖不可能出現數據既被佔用又沒有使用的浪費現象。但是,如果用戶事務中頻繁對某個表中的多條記錄操作,將導致對該表的許多記錄行都加上了行級鎖,資料庫系統中鎖的數目會急劇增加,這樣就加重了系統負荷,影響系統性能。因此,在SQLServer中,還支持鎖升級(lockescalation)。所謂鎖升級是指調整鎖的粒度,將多個低粒度的鎖替換成少數的更高粒度的鎖,以此來降低系統負荷。在SQLServer中當一個事務中的鎖較多,達到鎖升級門限時,系統自動將行級鎖和頁面鎖升級為表級鎖。

I. 關於Sqlserver資料庫 鎖機制的小疑問,下種情況是否需要加入鎖機制

不需要,就算確實用戶同時執行,資料庫的操作機制是有隊列的,所以不存在並發情況。
鎖基本用不到,我反正開發了5年了沒用到過。
你要了解死鎖發生的情況,一般是用事務的時候可能會碰到死鎖,你申請了A資源,鎖住了A然後申請B資源,其他人申請了B資源,然後申請A,這樣就互不相讓,導致A,B資源都不可訪問了,不過其他數據我不知道,SQLSERVER發生這種死鎖不是一直鎖死的,過幾分鍾就會發現這個死鎖,把鎖釋放掉,2個事務都失敗。