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

SQL Server鎖機制與鎖模式如何正確掌握?

數據庫 SQL Server
我們今天主要向大家講述的是如何正確掌握SQL Server鎖機制與鎖模式,以及在實際操作中值得我們大家注意的相關事項的描述。

此文章主要向大家講述的是正確掌握SQL Server鎖機制與鎖模式,如果你對掌握SQL Server鎖機制與鎖模式心存好奇的話,以下的文章將會揭開它的神秘面紗。希望你在瀏覽完之后會有所收獲。

各種大型數據庫所采用的鎖的基本理論是一致的,但在具體實現上各有差別。SQL Server更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為數據庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。

對于一般的用戶而言,通過系統的自動鎖定管理機制基本可以滿足使用要求,但如果對數據安全、數據庫完整性和一致性有特殊要求,就需要了解SQL Server鎖機制,掌握數據庫鎖定方法。

 

鎖是數據庫中的一個非常重要的概念,它主要用于多用戶環境下保證數據庫完整性和一致性。 我們知道,多個用戶能夠同時操縱同一個數據庫中的數據,會發生數據不一致現象。即如果沒有鎖定且多個用戶同時訪問一個數據庫,則當他們的事務同時使用相同的數據時可能會發生問題。這些問題包括:丟失更新、臟讀、不可重復讀和幻覺讀:

1.當兩個或多個事務選擇同一行,然后基于最初選定的值更新該行時,會發生丟失更新問題。每個事務都不知道其它事務的存在。***的更新將重寫由其它事務所做的更新,這將導致數據丟失。例如,兩個編輯人員制作了同一文檔的電子復本。每個編輯人員獨立地更改其復本,然后保存更改后的復本,這樣就覆蓋了原始文檔。***保存其更改復本的編輯人員覆蓋了***個編輯人員所做的更改。如果在***個編輯人員完成之后第二個編輯人員才能進行更改,則可以避免該問題。

2. 臟讀就是指當一個事務正在訪問數據,并且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然后使用了這個數據。因為這個數據是還沒有提交的數據,那么另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。

例如,一個編輯人員正在更改電子文檔。在更改過程中,另一個編輯人員復制了該文檔(該復本包含到目前為止所做的全部更改)并將其分發給預期的用戶。此后,***個編輯人員認為目前所做的更改是錯誤的,于是刪除了所做的編輯并保存了文檔。分發給用戶的文檔包含不再存在的編輯內容,并且這些編輯內容應認為從未存在過。如果在***個編輯人員確定最終更改前任何人都不能讀取更改的文檔,則可以避免該問題。

3.不可重復讀是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那么,在***個事務中的兩次讀數據之間,由于第二個事務的修改,那么***個事務兩次讀到的的數據可能是不一樣的。

這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱為是不可重復讀。例如,一個編輯人員兩次讀取同一文檔,但在兩次讀取之間,作者重寫了該文檔。當編輯人員第二次讀取文檔時,文檔已更改。原始讀取不可重復。如果只有在作者全部完成編寫后編輯人員才可以讀取文檔,則可以避免該問題。

4.幻覺讀是指當事務不是獨立執行時發生的一種現象,例如***個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。

那么,以后就會發生操作***個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺一樣。例如,一個編輯人員更改作者提交的文檔,但當生產部門將其更改內容合并到該文檔的主復本時,發現作者已將未編輯的新材料添加到該文檔中。如果在編輯人員和生產部門完成對原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問題。

所以,處理多用戶并發訪問的方法是加鎖。鎖是防止其他事務訪問指定的資源控制、實現并發控制的一種主要手段。當一個用戶鎖住數據庫中的某個對象時,其他用戶就不能再訪問該對象。加鎖對并發訪問的影響體現在鎖的粒度上。

為了控制鎖定的資源,應該首先了解系統的空間管理。在SQL Server 2000系統中,最小的空間管理單位是頁,一個頁有8K。所有的數據、日志、索引都存放在頁上。另外,使用頁有一個限制,這就是表中的一行數據必須在同一個頁上,不能跨頁。

頁上面的空間管理單位是盤區,一個盤區是8個連續的頁。表和索引的最小占用單位是盤區。數據庫是由一個或者多個表或者索引組成,即是由多個盤區組成。放在一個表上的鎖限制對整個表的并發訪問;放在盤區上的鎖限制了對整個盤區的訪問;放在數據頁上的鎖限制了對整個數據頁的訪問;放在行上的鎖只限制對該行的并發訪問。

SQL Server 2000 具有多粒度鎖定,允許一個事務鎖定不同類型的的資源。為了使鎖定的成本減至最少,SQL Server 自動將資源鎖定在適合任務的級別。鎖定在較小的粒度(例如行)可以增加并發但需要較大的開銷,因為如果鎖定了許多行,則需要控制更多的鎖。

鎖定在較大的SQL Server鎖機制粒度(例如表)就并發而言是相當昂貴的,因為鎖定整個表限制了其它事務對表中任意部分進行訪問,但要求的開銷較低,因為需要維護的鎖較少。SQL Server 可以鎖定行、頁、擴展盤區、表、庫等資源。

行是可以鎖定的最小空間, 行級鎖占用的數據資源最少,所以在事務的處理過程中,允許其他事務繼續操縱同一個表或者同一個頁的其他數據,大大降低了其他事務等待處理的時間,提高了系統的并發性。

頁級鎖是指在事務的操縱過程中,無論事務處理數據的多少,每一次都鎖定一頁,在這個頁上的數據不能被其他事務操縱。在SQL Server 7.0以前,使用的是頁級鎖。頁級鎖鎖定的資源比行級鎖鎖定的數據資源多。在頁級鎖中,即使是一個事務只操縱頁上的一行數據,那么該頁上的其他數據行也不能被其他事務使用。

因此,當使用頁級鎖時,會出現數據的浪費現象,也就是說,在同一個頁上會出現數據被占用卻沒有使用的現象。在這種現象中,數據的浪費最多不超過一個頁上的數據行。

表級鎖也是一個非常重要的鎖。表級鎖是指事務在操縱某一個表的數據時,鎖定了這個數據所在的整個表,其他事務不能訪問該表中的其他數據。當事務處理的數據量比較大時,一般使用表級鎖。表級鎖的特點是使用比較少的系統資源,但是卻占用比較多的數據資源。

與行級鎖和頁級鎖相比,表級鎖占用的系統資源例如內存比較少,但是占用的數據資源卻是***。在表級鎖時,有可能出現數據的大量浪費現象,因為表級鎖鎖定整個表,那么其他的事務都不能操縱表中的其他數據。

盤區鎖是一種特殊類型的鎖,只能用在一些特殊的情況下。簇級鎖就是指事務占用一個盤區,這個盤區不能同時被其他事務占用。例如在創建數據庫和創建表時,系統分配物理空間時使用這種類型的鎖。

系統是按照盤區分配空間的。當系統分配空間時,使用盤區鎖,防止其他事務同時使用同一個盤區。當系統完成分配空間之后,就不再使用這種類型的盤區鎖。特別是,當涉及到對數據操作的事務時,不使用盤區鎖。

數據庫級鎖是指鎖定整個數據庫,防止任何用戶或者事務對鎖定的數據庫進行訪問。數據庫級鎖是一種非常特殊的鎖,它只是用于數據庫的恢復操作過程中。這種等級的鎖是一種***等級的鎖,因為它控制整個數據庫的操作。只要對數據庫進行恢復操作,那么就需要設置數據庫為單用戶模式,這樣系統就能防止其他用戶對該數據庫進行各種操作。

行級鎖是一種***鎖,因為行級鎖不可能出現數據既被占用又沒有使用的浪費現象。但是,如果用戶事務中頻繁對某個表中的多條記錄操作,將導致對該表的許多記錄行都加上了行級鎖,數據庫系統中鎖的數目會急劇增加,這樣就加重了系統負荷,影響系統性能。

因此,在SQL Server中,還支持鎖升級(lock escalation)。所謂鎖升級是指調整鎖的粒度,將多個低粒度的鎖替換成少數的更高粒度的鎖,以此來降低系統負荷。在SQL Server中當一個事務中的鎖較多,達到鎖升級門限時,系統自動將行級鎖和頁面鎖升級為表級鎖。特別值得注意的是,在SQL Server中,鎖的升級門限以及鎖升級是由系統自動來確定的,不需要用戶設置。以上的相關內容就是對快速掌握SQL Server鎖機制和鎖模式的介紹,望你能有所收獲。

【編輯推薦】

  1. SQL Server數據庫相關數據大匯和
  2. SQL Server Rollup關鍵字的使用竅門
  3. ASP調用SQL Server存儲過程的實際操作步驟
  4. SQL Server數據類型的25種有哪些?
  5. SQL Server 2000表變量引入時的問題破解

 

 

 

責任編輯:佚名 來源: 163.com
相關推薦

2010-07-26 16:11:45

Microsoft S

2010-07-23 15:33:05

SQL Server鎖

2010-11-09 13:47:17

SQL Server資

2010-07-19 18:04:23

SQL Server鎖

2010-07-19 17:57:22

SQL Server鎖

2010-11-09 13:58:03

SQL Server鎖

2010-06-29 17:17:44

SQL Server鎖

2011-08-15 09:30:59

SQL Server

2019-11-28 16:00:06

重入鎖讀寫鎖樂觀鎖

2021-04-02 09:50:14

微服務分布式鎖Java

2009-09-25 16:43:44

Hibernate悲觀Hibernate樂觀

2010-07-20 08:35:54

SQL Server鎖

2020-07-19 10:26:47

Kubernetes數據結構

2024-05-17 09:33:22

樂觀鎖CASversion

2024-03-18 12:21:28

Java輕量級鎖重量級鎖

2009-12-16 10:57:16

Ruby文件鎖

2010-06-29 17:32:13

SQL Server鎖

2010-09-08 14:49:12

SQL Server數據庫

2024-11-29 07:38:12

MySQL數據庫

2020-04-24 15:44:50

MySQL數據庫鎖機制
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女一区| 中文字幕av第一页 | 免费xxxx大片国产在线 | 欧美日韩免费 | 国产精品久久久久久久久久久久冷 | 成人福利网站 | 别c我啊嗯国产av一毛片 | 国产在线一区二区三区 | 国产日韩精品视频 | 久久久精品亚洲 | 欧美一区二区三区在线观看 | 久久三区 | 成人免费视频观看 | 亚洲成人一区二区三区 | 亚洲天天干 | 91观看 | www.日韩| 久久综合亚洲 | 日本三级全黄三级三级三级口周 | 日韩在线精品视频 | 午夜免费视频 | 日韩一级不卡 | 亚洲成人a v| 久久免费观看一级毛片 | 在线 丝袜 欧美 日韩 制服 | 国产在线资源 | 亚洲国产成人精品久久久国产成人一区 | 99久久婷婷国产综合精品电影 | 精品av| 欧美久操网 | 激情欧美日韩一区二区 | 久久综合九色综合欧美狠狠 | 亚洲国产免费 | 日韩综合色 | 亚洲精品二三区 | 国产99久久 | 麻豆天堂 | 最新中文字幕久久 | 日韩一区二区av | 国产精品久久久久久久久久 | 情侣黄网站免费看 |