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

擦亮自己的眼睛去看SQL Server之談談鎖機制

數據庫 SQL Server
如果鎖得太狠,那將影響數據庫系統的并發性以及效率(包括鎖本身帶來的額外開銷)。這時候就需要去權衡,SQLServer鎖管理器就充當權衡這兩者關系的角色

在談談SQLServer的鎖機制之前,來思考以下這個場景:當你在酷暑的時候騎著自己的小車往目的地行走時,路上連續遇到幾個時間很長的紅燈,是不是很郁悶?有時候你可能實在受不了闖了個紅燈,其實在大部分情況下問題不大,如果通行的汽車很多那就不好說了。因為不遵守規則的人太多,都為了達到目的去走捷徑,不愿意等待。這樣才有了交警。交警的作用就是維護這些紅綠燈的規則。這些紅綠燈就像鎖一樣,鎖住或延長你去目的地的時間。但是如果沒有交警大家又不自由遵守紅綠燈規則會導致什么呢?大家想想都知道。

這個系列的一篇文章中提供的事務管理器中有個鎖管理器就是這里的交警。它維護著SQLServer中的鎖。前段提到的大部分情況指的就是在系統事務量不大的時候,這時候的鎖永遠不會是什么大問題。除非你知道你的系統永遠就給幾個人用,否則考慮到系統以后的并發量上升不出現數據與效率問題,那你得深入了解鎖機制。在研究鎖之前,假定你已經了解事務的ACID概念,它是整個SQLServer的精髓所在。如果沒有事務那就不用談鎖了,除了事務需要鎖以外其他任何東西都需要這個讓SQL不自由的機制。說到底鎖是一個平衡并發與數據安全的機制,如果沒有鎖,任何SQL都能覆蓋其他SQL執行的數據,那么數據會出現不一致的情況。如果鎖得太狠,那將影響數據庫系統的并發性以及效率(包括鎖本身帶來的額外開銷)。這時候就需要去權衡,SQLServer鎖管理器就充當權衡這兩者關系的角色,如下圖所示:

SQLServer中鎖的知識點實在太多,比如鎖從模式上分為:共享鎖(S)、更新鎖(U)、排他鎖(X)、架構鎖(Sch-S、Sch-M)、意向鎖(IS、IU、IX)、轉換鎖(SIX、SIU、UIX)、大容量更新鎖(BU);鎖從粒度上分為:數據庫鎖、文件鎖、表鎖、堆鎖、索引鎖、頁鎖、鍵鎖、區鎖、行鎖、應用程序鎖、元數據鎖;鎖之間存在兼容性問題;鎖會根據情況進行升級;鎖控制不好會出現死鎖;悲觀鎖的隔離性:未提交讀、已提交讀、可重復讀、可序列化;樂觀鎖的隔離性:讀提交快照隔離、快照隔離;閂(shuan)鎖。。。隨便列下就一大堆問題要說清楚需要花很大篇幅。還是抱著與前幾篇文章的風格,仔細分析一個具體的問題——鎖升級。

1、準備

有一個動態管理視圖可以查看所有鎖:sys.dm_tran_locks,還有一個動態管理視圖可以查看哪些請求正在阻塞其他的請求:sys.dm_os_waiting_tasks

2、什么是鎖升級

鎖升級是指鎖的粒度由細向粗轉換。如:由行鎖轉成表鎖。

3、需要鎖升級嗎?

一般來說,鎖的粒度越小,并發性越好但是如果去鎖定的東西多就需要的鎖越多,這樣會消耗SQLServer的cpu與內存。一個鎖占用內存約為96字節,你算算如果用行鎖去鎖定百萬千萬的表需要多少內存。而且管理鎖(創建鎖、維護鎖、銷毀鎖等)也是有代價的,會消耗cpu。 如果用一個大點的鎖就將這些百萬千萬的鎖合并成一個鎖了,管理起來也方便消耗資源也小。

4、什么時候出現鎖升級

SQLServer意識到鎖定的頁面或行數過大的時候發生。怎么意識到過大呢?由兩種方法識別:請求用于的鎖的數目超過鎖數目臨界值;鎖管理器為單獨一個查詢消耗過多的內存超過內存臨界值。有其他一個超過臨界值,SQLServer就會試圖升級。注意這里說的鎖數據以及內存是值由同一個查詢發生的,而不是總共的。這里說的臨界值并不是固定的,SQLServer采用啟發式算法去動態調整。

5、控制鎖升級

SQLServer提供一些可以讓我們控制鎖升級的入口。在SQLServer2008中可以通過:

  1. alter table test 
  2. set (lock_escalation = auto|table|disable) 

我們還可以通過在代碼中顯示指定pagelock、tablock提示,會強制SQLServer使用更粗的鎖。不過這個設置不合理的話會導致并發降低。建議一般情況下不用,除非你很清楚這樣帶來的影響。

6、舉例說明

6.1建庫建表:

  1. create database Test 
  2. create table test 
  3. ID identity(1,1) primary key
  4. [Namevarchar(50) not null default ''
  5. CreatedTime datetime not null default getdate(); 

查看當前鎖情況:

默認某個連接對整個數據庫有個共享鎖。

#p#

6.2循環插入幾十萬條記錄: 

  1. while 1 = 1 
  2. insert into test(Namevalues ('kk'

插入時的鎖快照 :

 

從上圖中看出這個快照中有:三個數據庫共享鎖、一個頁級意向排他鎖、一個表級意向排他鎖、兩個行級排他鎖。

三個數據庫共享鎖:前面已經提過,默認某個連接對整個數據庫有個共享鎖;

一個頁級意向排他鎖、一個表級意向排他鎖:在頁以及表級表示資源的一部分實際已經有鎖進行保護,這樣的好處允許其他請求鎖在表頁級別上進行檢查,減少不必要的更細的鎖請求,提高性能。比如在這種情況下,如果允許alter操作那么這個操作就會等待因為這里有表級排他鎖,它提示alter操作該表有活動。

6.3 跟蹤Lock:Escalation事件

在profiler中設置只跟蹤Lock:Escalation事件,鎖升級事件。

6.4更新表中記錄:

  1. update test set name = 'name' where name = 'kk' 

在profiler中看到了Lock:Escalation事件被觸發:

更新時的快照為(按順序):

如上圖:此時update操作以排他鎖定它更新的行。

如上圖:此時update操作以排他鎖鎖定了整個表,以架構穩定鎖(Sch-S)鎖定它相關的元數據表。

如上圖:此時釋放了對元數據表的架構穩定鎖(Sch-S)鎖,剩下對整個表的排他鎖。

從上面的分析中,發現SQLServer鎖機制是有點復雜的,不過也是很有意思的。研究后,你會發現它真的很智能。今天分析就到此結束,文中如有描述不當的地方,歡迎指出。共同進步才是硬道理。

原文鏈接:http://www.cnblogs.com/yueyue_jwfm/archive/2011/08/14/2138388.html

【編輯推薦】

  1. 微軟SQL Server增加對Hadoop的支持
  2. 數據挖掘邏輯體系結構的內容類型有哪些
  3. SQL Server數據挖掘之如何實現Web路徑流挖掘
  4. 整理索引碎片,提升SQL Server速度

 

 

責任編輯:艾婧 來源: 小軍人的博客
相關推薦

2011-07-01 13:39:28

SQL ServerInsert

2011-07-14 09:37:53

SQL Server

2011-06-23 09:55:11

SQL Server

2011-08-29 10:35:26

SQL Server

2011-07-01 10:18:58

SQL ServerSelect

2010-07-26 15:17:46

SQL Server鎖

2010-01-13 15:20:27

三層交換機

2010-07-23 15:33:05

SQL Server鎖

2010-07-26 15:36:59

CCNP

2011-04-22 09:33:49

投影機鏡頭投影機

2015-11-27 14:12:43

2011-05-05 10:10:09

投影機

2011-05-24 09:39:15

投影機鏡頭保養

2012-04-02 19:32:11

iPhone 4

2011-04-20 17:08:01

2010-06-29 17:17:44

SQL Server鎖

2010-07-19 17:57:22

SQL Server鎖

2010-07-19 18:04:23

SQL Server鎖

2010-07-20 08:35:54

SQL Server鎖

2011-06-17 17:37:16

JavaSQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91免费观看视频 | 欧美成人一区二区三区片免费 | 久久久久国产一区二区三区 | 欧美国产视频一区二区 | 日韩精品免费在线 | 91欧美激情一区二区三区成人 | 人人色视频| 日韩一级免费大片 | 韩日av在线| 国产伦精品一区二区三区高清 | 日韩精品在线看 | 国产免费一区二区三区 | 手机日韩 | 国产一区二区三区四区五区加勒比 | 97精品久久 | 国产欧美一区二区三区日本久久久 | 久久久久久亚洲国产精品 | 欧美精品v | 欧美亚洲国产一区二区三区 | 久久91精品 | 超碰在线人人 | 成人免费网站在线 | 日本理论片好看理论片 | 日韩精品| 成人高清在线 | 免费一级片 | 99热国产免费 | 91在线观看视频 | 美国av毛片 | 一级毛片在线视频 | 午夜日韩视频 | 午夜欧美 | 天天综合成人网 | 一区二区av | 午夜黄色影院 | 午夜a区 | 亚洲精品中文字幕在线观看 | 国产欧美精品一区 | 国产91一区二区三区 | 91精品国产一区二区在线观看 | a级黄色毛片免费播放视频 国产精品视频在线观看 |