日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
高效分表,提升MSSQL數(shù)據(jù)庫性能的更佳方案(mssql數(shù)據(jù)庫分表方案)

MSSQL是一種廣泛使用的數(shù)據(jù)管理系統(tǒng),主要用于管理和處理大規(guī)模的數(shù)據(jù)。然而,當(dāng)數(shù)據(jù)庫需要處理大量并發(fā)用戶或大容量數(shù)據(jù)時(shí),性能可能會出現(xiàn)問題。為此,分區(qū)表是提高M(jìn)SSQL數(shù)據(jù)庫性能的一種更佳解決方案之一。

何謂分區(qū)表?

分區(qū)表是一種將大型表分割成較小的可管理部分的方法。每個(gè)分區(qū)都是完全獨(dú)立的表,其包含的列和數(shù)據(jù)類型與原表相同。對于MSSQL數(shù)據(jù)庫,分區(qū)表能夠提供以下好處:

快速查詢

當(dāng)查詢涉及到的表非常大時(shí),查詢速度會受到影響。但是,如果將大型表分割成更小的部分,查詢速度將明顯加快。在分區(qū)表中查詢數(shù)據(jù),數(shù)據(jù)庫只需要查找與查詢條件匹配的分區(qū),而非整個(gè)表。這大大提高了查詢速度。

高效數(shù)據(jù)清理

刪除大型表的數(shù)據(jù)時(shí)涉及到的I / O操作會變得非常耗時(shí)。對于分區(qū)表,由于它已被分割成多個(gè)小模塊,所以清理一個(gè)區(qū)的數(shù)據(jù)比清理整個(gè)大型表的數(shù)據(jù)要快得多。

提高可用性

如果一張表很大,那么修復(fù)它可能需要很長時(shí)間。但是,如果在分區(qū)表中只修復(fù)一個(gè)區(qū)就可以了,那么修復(fù)時(shí)間將明顯減少。這有助于提高可用性和降低數(shù)據(jù)庫風(fēng)險(xiǎn)。

提升數(shù)據(jù)質(zhì)量

可以使用分區(qū)來將不同類型的數(shù)據(jù)分開存儲,提高數(shù)據(jù)質(zhì)量。例如,可以根據(jù)月份將數(shù)據(jù)分區(qū)來計(jì)算每個(gè)月的平均值。這有助于避免統(tǒng)計(jì)混淆和提高數(shù)據(jù)質(zhì)量。

如何分區(qū)?

現(xiàn)在我們明白了分區(qū)表對于MSSQL數(shù)據(jù)庫性能的好處,那么如何實(shí)現(xiàn)呢?以下是分區(qū)表的三種常見方法:

基于范圍的分區(qū)(RANGE Partitioning)

這種方法是將表數(shù)據(jù)按指定列的范圍進(jìn)行分區(qū)。例如,一個(gè)存儲銷售記錄的表可以根據(jù)月份或日期進(jìn)行分區(qū)??梢允褂靡韵率纠a建立一個(gè)分區(qū)表:

CREATE PARTITION FUNCTION range_function(BYTE)

AS RANGE LEFT FOR VALUES(12, 24, 36, 48, 60);

CREATE PARTITION SCHEME range_scheme

AS PARTITION range_function

TO([range_1], [range_2], [range_3], [range_4], [range_5], [range_6]);

基于散列的分區(qū)(HASH Partitioning)

此方法將表數(shù)據(jù)按指定列的哈希值進(jìn)行分區(qū)。例如,可以根據(jù)員工ID將表數(shù)據(jù)分區(qū)。

CREATE PARTITION FUNCTION hash_function(INT)

AS HASH WITH (BUCKET_COUNT = 4);

CREATE PARTITION SCHEME hash_scheme

AS PARTITION hash_function

TO([hash_1], [hash_2], [hash_3], [hash_4]);

混合分區(qū)(Mixed Partitioning)

混合分區(qū)是將基于范圍和散列的分區(qū)結(jié)合使用。例如,可以先按日期將表數(shù)據(jù)分區(qū),然后在每個(gè)日期分區(qū)內(nèi)根據(jù)員工ID分區(qū)。

CREATE PARTITION FUNCTION mixed_function(DATE)

AS RANGE LEFT FOR VALUES(‘2023-02-01’, ‘2023-03-01’, ‘2023-04-01’, ‘2023-05-01’, ‘2023-06-01’);

CREATE PARTITION SCHEME mixed_scheme

AS PARTITION mixed_function

TO([range_1], [range_2], [range_3], [range_4], [range_5], [range_6]);

CREATE PARTITION FUNCTION hash_function(INT)

AS HASH WITH (BUCKET_COUNT = 8);

CREATE PARTITION SCHEME hash_scheme

AS PARTITION hash_function

TO([range_1], [range_2], [range_3], [range_4], [range_5], [range_6], [range_7], [range_8]);

實(shí)現(xiàn)分區(qū)表并不太復(fù)雜,但是在實(shí)踐中仍然需要一些額外的努力來保持整個(gè)數(shù)據(jù)庫的優(yōu)化狀態(tài)。以下是一些方法:

更新統(tǒng)計(jì)信息

當(dāng)數(shù)據(jù)分區(qū)更新后,必須更新統(tǒng)計(jì)信息以便于查詢優(yōu)化器正確計(jì)算在每個(gè)分區(qū)上執(zhí)行的操作的開銷。

自動化空間管理

由于分區(qū)表在大小和數(shù)量方面非常靈活,因此將手動管理它們的繁瑣任務(wù)交給自動管理是更為明智的選擇。

定期維護(hù)

維護(hù)一個(gè)分區(qū)表并不只是設(shè)置和忘記。它需要與整個(gè)數(shù)據(jù)庫和系統(tǒng)交互,需要跨多個(gè)級別的維護(hù)和升級。

分區(qū)表是提高M(jìn)SSQL數(shù)據(jù)庫性能的更佳解決方案之一,它能夠提高查詢速度,實(shí)現(xiàn)高效數(shù)據(jù)清理,提高可用性和數(shù)據(jù)質(zhì)量。有多種分區(qū)表的實(shí)現(xiàn)方法,包括基于范圍的分區(qū),基于散列的分區(qū)以及混合分區(qū)。然而,在實(shí)踐中實(shí)現(xiàn)分區(qū)表仍需要額外的努力,如更新統(tǒng)計(jì)信息,自動化空間管理和定期維護(hù)。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

如何處理大量數(shù)據(jù)并發(fā)操作

處理大量數(shù)據(jù)并發(fā)操作可以采用如下幾種方法:

1.使用緩存:使用程序直接保存到內(nèi)存中?;蛘呤褂镁彺婵蚣? 用一個(gè)特定的類型值來保存,以區(qū)別空數(shù)據(jù)和未緩存的兩種狀態(tài)。 

2.數(shù)據(jù)庫優(yōu)化:表結(jié)構(gòu)優(yōu)化;SQL語句優(yōu)化,語法優(yōu)化和處理邏輯優(yōu)化;分區(qū);分表;索引優(yōu)化;使用

存儲過程

代替直接操作。

3.分離活躍數(shù)據(jù):可以分為活躍用戶和不活躍用戶。

4.批量讀取和延遲修改: 高并況可以將多個(gè)查詢請求合并到一個(gè)。高并發(fā)且頻繁修改的可以暫存緩存中。

5.讀寫分離: 數(shù)據(jù)庫服務(wù)器配置多個(gè),配置主從數(shù)據(jù)庫。寫用主數(shù)據(jù)庫,讀用從數(shù)據(jù)庫。

6.分布式數(shù)據(jù)庫: 將不同的表存放到不同的數(shù)據(jù)庫中,然后再放到不同的服務(wù)器中。

7.NoSql和Hadoop: NoSql,not only SQL。沒有

關(guān)系型數(shù)據(jù)庫

那么多限制,比較靈活高效。Hadoop,將一個(gè)表中的數(shù)據(jù)分層多塊,保存到多個(gè)節(jié)點(diǎn)(分布式)。每一塊數(shù)據(jù)都有多個(gè)節(jié)點(diǎn)保存(集群)。集群可以并行處理相同的數(shù)據(jù),還可以保證數(shù)據(jù)的完整性。

拓展資料:

大數(shù)據(jù)(big data),指無法在一定時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的

數(shù)據(jù)

,是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高

增長率

和多樣化的信息資產(chǎn)。

在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的

《大數(shù)據(jù)時(shí)代》

中大數(shù)據(jù)指不用隨機(jī)分析法(抽樣調(diào)查)這樣捷徑,而采用所有數(shù)據(jù)進(jìn)行分析處理。大數(shù)據(jù)的5V特點(diǎn)(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價(jià)值密度)、Veracity(真實(shí)性)。

參考資料:

網(wǎng)頁鏈接

大數(shù)據(jù)并發(fā)處理解決方案:

1、HTML靜態(tài)化

效率更高、消耗最小的就是純靜態(tài)化的html頁面,所以盡可能使網(wǎng)站上的頁面采用靜態(tài)頁面來實(shí)現(xiàn),這個(gè)最簡單的方法其實(shí)也是最有效的方法。但是對于大量內(nèi)容并且頻繁更新的網(wǎng)站,無法全部手動去挨個(gè)實(shí)現(xiàn),于是出現(xiàn)了常見的信息發(fā)布系統(tǒng)CMS,像常訪問的各個(gè)門戶站點(diǎn)的新聞頻道,甚至他們的其他頻道,都是通過信息發(fā)布系統(tǒng)來管理和實(shí)現(xiàn)的,信息發(fā)布系統(tǒng)可以實(shí)現(xiàn)最簡單的信息錄入自動生成靜態(tài)頁面,還能具備頻道管理、權(quán)限管理、自動抓取等功能,對于一個(gè)大型網(wǎng)站來說,擁有一套高效、可管理的CMS是必不可少的。

2、圖片服務(wù)器分離

對于Web服務(wù)器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,于是有必要將圖片與頁面進(jìn)行分離,這是基本上大型網(wǎng)站都會采用的策略,他們都有獨(dú)立的圖片服務(wù)器,甚至很多臺圖片服務(wù)器。這樣的架構(gòu)可以降低提供頁面訪問請求的服務(wù)器系統(tǒng)壓力,并且可以保證系統(tǒng)不會因?yàn)閳D片問題而崩潰,在應(yīng)用服務(wù)器和圖片服務(wù)器上,可以進(jìn)行不同的配置優(yōu)化,比如apache在配置ContentType的時(shí)候可以盡量少支持,盡可能少的LoadModule,保證更高的系統(tǒng)消耗和執(zhí)行效率。 這一實(shí)現(xiàn)起來是比較容易的一現(xiàn),如果服務(wù)器集群操作起來更方便,如果是獨(dú)立的服務(wù)器,新手可能出現(xiàn)上傳圖片只能在服務(wù)器本地的情況下,可以在令一臺服務(wù)器設(shè)置的IIS采用網(wǎng)絡(luò)路徑來實(shí)現(xiàn)圖片服務(wù)器,即不用改變程序,又能提高性能,但對于服務(wù)器本身的IO處理性能是沒有任何的改變。

3、數(shù)據(jù)庫集群和庫表散列

大型網(wǎng)站都有復(fù)雜的應(yīng)用,這些應(yīng)用必須使用數(shù)據(jù)庫,那么在面對大量訪問的時(shí)候,數(shù)據(jù)庫的瓶頸很快就能顯現(xiàn)出來,這時(shí)一臺數(shù)據(jù)庫將很快無法滿足應(yīng)用,于是需要使用數(shù)據(jù)庫集群或者庫表散列。

4、緩存

緩存一詞搞技術(shù)的都接觸過,很多地方用到緩存。網(wǎng)站架構(gòu)和網(wǎng)站開發(fā)中的緩存也是非常重要。架構(gòu)方面的緩存,對Apache比較熟悉的人都能知道Apache提供了自己的緩存模塊,也可以使用外加的Squid模塊進(jìn)行緩存,這兩種方式均可以有效的提高Apache的訪問響應(yīng)能力。

網(wǎng)站程序開發(fā)方面的緩存,Linux上提供的Memory Cache是常用的緩存接口,可以在web開發(fā)中使用,比如用Java開發(fā)的時(shí)候就可以調(diào)用MemoryCache對一些數(shù)據(jù)進(jìn)行緩存和通訊共享,一些大型社區(qū)使用了這樣的架構(gòu)。另外,在使用web語言開發(fā)的時(shí)候,各種語言基本都有自己的緩存模塊和方法,PHP有Pear的Cache模塊,Java就更多了,.net不是很熟悉,相信也肯定有。

5、鏡像

鏡像是大型網(wǎng)站常采用的提高性能和數(shù)據(jù)安全性的方式,鏡像的技術(shù)可以解決不同網(wǎng)絡(luò)接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和EduNet之間的差異就促使了很多網(wǎng)站在教育網(wǎng)內(nèi)搭建鏡像站點(diǎn),數(shù)據(jù)進(jìn)行定時(shí)更新或者實(shí)時(shí)更新。在鏡像的細(xì)節(jié)技術(shù)方面,這里不闡述太深,有很多專業(yè)的現(xiàn)成的解決架構(gòu)和產(chǎn)品可選。也有廉價(jià)的通過軟件實(shí)現(xiàn)的思路,比如Linux上的rsync等工具。

6、負(fù)載均衡

負(fù)載均衡將是大型網(wǎng)站解決高負(fù)荷訪問和大量并發(fā)請求采用的終極解決辦法。 負(fù)載均衡技術(shù)發(fā)展了多年,有很多專業(yè)的服務(wù)提供商和產(chǎn)品可以選擇。

硬件四層交換

第四層交換使用第三層和第四層信息包的報(bào)頭信息,根據(jù)應(yīng)用區(qū)間識別業(yè)務(wù)流,將整個(gè)區(qū)間段的業(yè)務(wù)流分配到合適的應(yīng)用服務(wù)器進(jìn)行處理。 第四層交換功能就象是虛IP,指向物理服務(wù)器。它傳輸?shù)臉I(yè)務(wù)服從的協(xié)議多種多樣,有HTTP、FTP、NFS、Telnet或其他協(xié)議。這些業(yè)務(wù)在物理服務(wù)器基礎(chǔ)上,需要復(fù)雜的載量平衡算法。在IP世界,業(yè)務(wù)類型由終端TCP或UDP端口地址來決定,在第四層交換中的應(yīng)用區(qū)間則由源端和終端IP地址、TCP和UDP端口共同決定。

在硬件四層交換產(chǎn)品領(lǐng)域,有一些知名的產(chǎn)品可以選擇,比如Alteon、F5等,這些產(chǎn)品很昂貴,但是物有所值,能夠提供非常優(yōu)秀的性能和很靈活的管理能力。Yahoo中國當(dāng)初接近2023臺服務(wù)器使用了三四臺Alteon就搞定了。

如何處理大量數(shù)據(jù)并發(fā)操作

文件緩存,數(shù)據(jù)庫緩存,優(yōu)化sql,數(shù)據(jù)分流,數(shù)據(jù)庫表的橫向和縱向劃分,優(yōu)化代碼結(jié)構(gòu)!

鎖述的概

一. 為什么要引入鎖

多個(gè)用戶同時(shí)對數(shù)據(jù)庫的并發(fā)操作時(shí)會帶來以下數(shù)據(jù)不一致的問題:

丟失更新

A,B兩個(gè)用戶讀同一數(shù)據(jù)并進(jìn)行修改,其中一個(gè)用戶的修改結(jié)果破壞了另一個(gè)修改的結(jié)果,比如訂票系統(tǒng)

臟讀

A用戶修改了數(shù)據(jù),隨后B用戶又讀出該數(shù)據(jù),但A用戶因?yàn)槟承┰蛉∠藢?shù)據(jù)的修改,數(shù)據(jù)恢復(fù)原值,此時(shí)B得到的數(shù)據(jù)就與數(shù)據(jù)庫內(nèi)的數(shù)據(jù)產(chǎn)生了不一致

不可重復(fù)讀

A用戶讀取數(shù)據(jù),隨后B用戶讀出該數(shù)據(jù)并修改,此時(shí)A用戶再讀取數(shù)據(jù)時(shí)發(fā)現(xiàn)前后兩次的值不一致

并發(fā)控制的主要方法是封鎖,鎖就是在一段時(shí)間內(nèi)禁止用戶做某些操作以避免產(chǎn)生數(shù)據(jù)不一致

二 鎖的分類

鎖的類別有兩種分法:

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

MS-SQL Server 使用以下資源鎖模式。

鎖模式 描述

共享 (S) 用于不更改或不更新數(shù)據(jù)的操作(只讀操作),如 SELECT 語句。

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

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

意向鎖 用于建立鎖的層次結(jié)構(gòu)。意向鎖的類型為:意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。

架構(gòu)鎖 在執(zhí)行依賴于表架構(gòu)的操作時(shí)使用。架構(gòu)鎖的類型為:架構(gòu)修改 (Sch-M) 和架構(gòu)穩(wěn)定性 (Sch-S)。

大容量更新 (BU) 向表中大容量復(fù)制數(shù)據(jù)并指定了 TABLOCK 提示時(shí)使用。

共享鎖

共享 (S) 鎖允許并發(fā)事務(wù)讀取 (SELECT) 一個(gè)資源。資源上存在共享 (S) 鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù)。一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享 (S) 鎖,除非將事務(wù)隔離級別設(shè)置為可重復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享 (S) 鎖。

更新鎖

更新 (U) 鎖可以防止通常形式的死鎖。一般更新模式由一個(gè)事務(wù)組成,此事務(wù)讀取記錄,獲取資源(頁或行)的共享 (S) 鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它 (X) 鎖。如果兩個(gè)事務(wù)獲得了資源上的共享模式鎖,然后試圖同時(shí)更新數(shù)據(jù),則一個(gè)事務(wù)嘗試將鎖轉(zhuǎn)換為排它 (X) 鎖。共享模式到排它鎖的轉(zhuǎn)換必須等待一段時(shí)間,因?yàn)橐粋€(gè)事務(wù)的排它鎖與其它事務(wù)的共享模式鎖不兼容;發(fā)生鎖等待。第二個(gè)事務(wù)試圖獲取排它 (X) 鎖以進(jìn)行更新。由于兩個(gè)事務(wù)都要轉(zhuǎn)換為排它 (X) 鎖,并且每個(gè)事務(wù)都等待另一個(gè)事務(wù)釋放共享模式鎖,因此發(fā)生死鎖。

若要避免這種潛在的死鎖問題,請使用更新 (U) 鎖。一次只有一個(gè)事務(wù)可以獲得資源的更新 (U) 鎖。如果事務(wù)修改資源,則更新 (U) 鎖轉(zhuǎn)換為排它 (X) 鎖。否則,鎖轉(zhuǎn)換為共享鎖。

排它鎖

排它 (X) 鎖可以防止并發(fā)事務(wù)對資源進(jìn)行訪問。其它事務(wù)不能讀取或修改排它 (X) 鎖鎖定的數(shù)據(jù)。

意向鎖

意向鎖表示 SQL Server 需要在層次結(jié)構(gòu)中的某些底層資源上獲取共享 (S) 鎖或排它 (X) 鎖。例如,放置在表級的共享意向鎖表示事務(wù)打算在表中的頁或行上放置共享 (S) 鎖。在表級設(shè)置意向鎖可防止另一個(gè)事務(wù)隨后在包含那一頁的表上獲取排它 (X) 鎖。意向鎖可以提高性能,因?yàn)?SQL Server 僅在表級檢查意向鎖來確定事務(wù)是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務(wù)是否可以鎖定整個(gè)表。

意向鎖包括意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。

鎖模式 描述

意向共享 (IS) 通過在各資源上放置 S 鎖,表明事務(wù)的意向是讀取層次結(jié)構(gòu)中的部分(而不是全部)底層資源。

意向排它 (IX) 通過在各資源上放置 X 鎖,表明事務(wù)的意向是修改層次結(jié)構(gòu)中的部分(而不是全部)底層資源。IX 是 IS 的超集。

與意向排它共享 (SIX) 通過在各資源上放置 IX 鎖,表明事務(wù)的意向是讀取層次結(jié)構(gòu)中的全部底層資源并修改部分(而不是全部)底層資源。允許頂層資源上的并發(fā) IS 鎖。例如,表的 SIX 鎖在表上放置一個(gè) SIX 鎖(允許并發(fā) IS 鎖),在當(dāng)前所修改頁上放置 IX 鎖(在已修改行上放置 X 鎖)。雖然每個(gè)資源在一段時(shí)間內(nèi)只能有一個(gè) SIX 鎖,以防止其它事務(wù)對資源進(jìn)行更新,但是其它事務(wù)可以通過獲取表級的 IS 鎖來讀取層次結(jié)構(gòu)中的底層資源。

獨(dú)占鎖:只允許進(jìn)行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執(zhí)行數(shù)據(jù)更新命令時(shí),SQL Server會自動使用獨(dú)占鎖。當(dāng)對象上有其他鎖存在時(shí),無法對其加獨(dú)占鎖。

共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執(zhí)行Select時(shí),SQL Server會對對象加共享鎖。

更新鎖:當(dāng)SQL Server準(zhǔn)備更新數(shù)據(jù)時(shí),它首先對數(shù)據(jù)對象作更新鎖鎖定,這樣數(shù)據(jù)將不能被修改,但可以讀取。等到SQL Server確定要進(jìn)行更新數(shù)據(jù)操作時(shí),他會自動將更新鎖換為獨(dú)占鎖,當(dāng)對象上有其他鎖存在時(shí),無法對其加更新鎖。

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

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

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

MS-SQLSERVER 使用鎖在多個(gè)同時(shí)在數(shù)據(jù)庫內(nèi)執(zhí)行修改的用戶間實(shí)現(xiàn)悲觀并發(fā)控制

三 鎖的粒度

鎖粒度是被封鎖目標(biāo)的大小,封鎖粒度小則并發(fā)性高,但開銷大,封鎖粒度大則并發(fā)性低但開銷小

SQL Server支持的鎖粒度可以分為為行、頁、鍵、鍵范圍、索引、表或數(shù)據(jù)庫獲取鎖

資源 描述

RID 行標(biāo)識符。用于單獨(dú)鎖定表中的一行。

鍵 索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍。

頁 8 千字節(jié) (KB) 的數(shù)據(jù)頁或索引頁。

擴(kuò)展盤區(qū) 相鄰的八個(gè)數(shù)據(jù)頁或索引頁構(gòu)成的一組。

表 包括所有數(shù)據(jù)和索引在內(nèi)的整個(gè)表。

DB 數(shù)據(jù)庫。

四 鎖定時(shí)間的長短

鎖保持的時(shí)間長度為保護(hù)所請求級別上的資源所需的時(shí)間長度。

用于保護(hù)讀取操作的共享鎖的保持時(shí)間取決于事務(wù)隔離級別。采用 READ COMMITTED 的默認(rèn)事務(wù)隔離級別時(shí),只在讀取頁的期間內(nèi)控制共享鎖。在掃描中,直到在掃描內(nèi)的下一頁上獲取鎖時(shí)才釋放鎖。如果指定 HOLDLOCK 提示或者將事務(wù)隔離級別設(shè)置為 REPEATABLE READ 或 SERIALIZABLE,則直到事務(wù)結(jié)束才釋放鎖。

根據(jù)為游標(biāo)設(shè)置的并發(fā)選項(xiàng),游標(biāo)可以獲取共享模式的滾動鎖以保護(hù)提取。當(dāng)需要滾動鎖時(shí),直到下一次提取或關(guān)閉游標(biāo)(以先發(fā)生者為準(zhǔn))時(shí)才釋放滾動鎖。但是,如果指定 HOLDLOCK,則直到事務(wù)結(jié)束才釋放滾動鎖。

用于保護(hù)更新的排它鎖將直到事務(wù)結(jié)束才釋放。

如果一個(gè)連接試圖獲取一個(gè)鎖,而該鎖與另一個(gè)連接所控制的鎖沖突,則試圖獲取鎖的連接將一直阻塞到:

將沖突鎖釋放而且連接獲取了所請求的鎖。

連接的超時(shí)間隔已到期。默認(rèn)情況下沒有超時(shí)間隔,但是一些應(yīng)用程序設(shè)置超時(shí)間隔以防止無限期等待

五 SQL Server 中鎖的自定義

1 處理死鎖和設(shè)置死鎖優(yōu)先級

死鎖就是多個(gè)用戶申請不同封鎖,由于申請者均擁有一部分封鎖權(quán)而又等待其他用戶擁有的部分封鎖而引起的無休止的等待

可以使用SET DEADLOCK_PRIORITY控制在發(fā)生死鎖情況時(shí)會話的反應(yīng)方式。如果兩個(gè)進(jìn)程都鎖定數(shù)據(jù),并且直到其它進(jìn)程釋放自己的鎖時(shí),每個(gè)進(jìn)程才能釋放自己的鎖,即發(fā)生死鎖情況。

2 處理超時(shí)和設(shè)置鎖超時(shí)持續(xù)時(shí)間。

@@LOCK_TIMEOUT 返回當(dāng)前會話的當(dāng)前鎖超時(shí)設(shè)置,單位為毫秒

SET LOCK_TIMEOUT 設(shè)置允許應(yīng)用程序設(shè)置語句等待阻塞資源的最長時(shí)間。當(dāng)語句等待的時(shí)間大于 LOCK_TIMEOUT 設(shè)置時(shí),系統(tǒng)將自動取消阻塞的語句,并給應(yīng)用程序返回”已超過了鎖請求超時(shí)時(shí)段”的 1222 號錯(cuò)誤信息

示例

下例將鎖超時(shí)期限設(shè)置為 1,800 毫秒。

SET LOCK_TIMEOUT 1800

3) 設(shè)置事務(wù)隔離級別。

4 ) 對 SELECT、INSERT、UPDATE 和 DELETE 語句使用表級鎖定提示。

5) 配置索引的鎖定粒度

可以使用 sp_indexoption 系統(tǒng)存儲過程來設(shè)置用于索引的鎖定粒度

六 查看鎖的信息

1 執(zhí)行 EXEC SP_LOCK 報(bào)告有關(guān)鎖的信息

2 查詢分析器中按Ctrl+2可以看到鎖的信息

七 使用注意事項(xiàng)

如何避免死鎖

1 使用事務(wù)時(shí),盡量縮短事務(wù)的邏輯處理過程,及早提交或回滾事務(wù);

2 設(shè)置死鎖超時(shí)參數(shù)為合理范圍,如:3分鐘-10分種;超過時(shí)間,自動放棄本次操作,避免進(jìn)程懸掛;

3 優(yōu)化程序,檢查并避免死鎖現(xiàn)象出現(xiàn);

4 .對所有的腳本和SP都要仔細(xì)測試,在正是版本之前。

5 所有的SP都要有錯(cuò)誤處理(通過@error)

6 一般不要修改SQL SERVER事務(wù)的默認(rèn)級別。不推薦強(qiáng)行加鎖

解決問題 如何對行 表 數(shù)據(jù)庫加鎖

八 幾個(gè)有關(guān)鎖的問題

1 如何鎖一個(gè)表的某一行

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT * FROM table ROWLOCK WHERE id = 1

2 鎖定數(shù)據(jù)庫的一個(gè)表

SELECT * FROM table WITH (HOLDLOCK)

加鎖語句:

sybase:

update 表 set col1=col1 where 1=0 ;

MSSQL:

select col1 from 表 (tablockx) where 1=0 ;

oracle:

LOCK TABLE 表 IN EXCLUSIVE MODE ;

加鎖后其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖

幾個(gè)例子幫助大家加深印象

設(shè)table1(A,B,C)

A B C

a1 b1 c1

a2 b2 c2

a3 b3 c3

1)排它鎖

新建兩個(gè)連接

在之一個(gè)連接中執(zhí)行以下語句

begin tran

update table1

set A=’aa’

where B=’b2′

waitfor delay ’00:00:30′ –等待30秒

commit tran

在第二個(gè)連接中執(zhí)行以下語句

begin tran

select * from table1

where B=’b2′

commit tran

若同時(shí)執(zhí)行上述兩個(gè)語句,則select查詢必須等待update執(zhí)行完畢才能執(zhí)行即要等待30秒

2)共享鎖

在之一個(gè)連接中執(zhí)行以下語句

begin tran

select * from table1 holdlock -holdlock人為加鎖

where B=’b2′

waitfor delay ’00:00:30′ –等待30秒

commit tran

在第二個(gè)連接中執(zhí)行以下語句

begin tran

select A,C from table1

where B=’b2′

update table1

set A=’aa’

where B=’b2′

commit tran

若同時(shí)執(zhí)行上述兩個(gè)語句,則第二個(gè)連接中的select查詢可以執(zhí)行

而update必須等待之一個(gè)事務(wù)釋放共享鎖轉(zhuǎn)為排它鎖后才能執(zhí)行 即要等待30秒

3)死鎖

增設(shè)table2(D,E)

D E

d1 e1

d2 e2

在之一個(gè)連接中執(zhí)行以下語句

begin tran

update table1

set A=’aa’

where B=’b2′

waitfor delay ’00:00:30′

update table2

set D=’d5′

where E=’e1′

commit tran

在第二個(gè)連接中執(zhí)行以下語句

begin tran

update table2

set D=’d5′

where E=’e1′

waitfor delay ’00:00:10′

update table1

set A=’aa’

where B=’b2′

commit tran

同時(shí)執(zhí)行,系統(tǒng)會檢測出死鎖,并中止進(jìn)程

補(bǔ)充一點(diǎn):

Sql Server2023支持的表級鎖定提示

HOLDLOCK 持有共享鎖,直到整個(gè)事務(wù)完成,應(yīng)該在被鎖對象不需要時(shí)立即釋放,等于SERIALIZABLE事務(wù)隔離級別

NOLOCK 語句執(zhí)行時(shí)不發(fā)出共享鎖,允許臟讀 ,等于 READ UNCOMMITTED事務(wù)隔離級別

PAGLOCK 在使用一個(gè)表鎖的地方用多個(gè)頁鎖

READPAST 讓sql server跳過任何鎖定行,執(zhí)行事務(wù),適用于READ UNCOMMITTED事務(wù)隔離級別只跳過RID鎖,不跳過頁,區(qū)域和表鎖

ROWLOCK 強(qiáng)制使用行鎖

TABLOCKX 強(qiáng)制使用獨(dú)占表級鎖,這個(gè)鎖在事務(wù)期間阻止任何其他事務(wù)使用這個(gè)表

如何處理大量數(shù)據(jù)并發(fā)操作

文件緩存,數(shù)據(jù)庫緩存,優(yōu)化sql,數(shù)據(jù)分流,數(shù)據(jù)庫表的橫向和縱向劃分,優(yōu)化代碼結(jié)構(gòu)!

鎖述的概

一. 為什么要引入鎖

多個(gè)用戶同時(shí)對數(shù)據(jù)庫的并發(fā)操作時(shí)會帶來以下數(shù)據(jù)不一致的問題:

丟失更新

A,B兩個(gè)用戶讀同一數(shù)據(jù)并進(jìn)行修改,其中一個(gè)用戶的修改結(jié)果破壞了另一個(gè)修改的結(jié)果,比如訂票系統(tǒng)

臟讀

A用戶修改了數(shù)據(jù),隨后B用戶又讀出該數(shù)據(jù),但A用戶因?yàn)槟承┰蛉∠藢?shù)據(jù)的修改,數(shù)據(jù)恢復(fù)原值,此時(shí)B得到的數(shù)據(jù)就與數(shù)據(jù)庫內(nèi)的數(shù)據(jù)產(chǎn)生了不一致

不可重復(fù)讀

A用戶讀取數(shù)據(jù),隨后B用戶讀出該數(shù)據(jù)并修改,此時(shí)A用戶再讀取數(shù)據(jù)時(shí)發(fā)現(xiàn)前后兩次的值不一致

并發(fā)控制的主要方法是封鎖,鎖就是在一段時(shí)間內(nèi)禁止用戶做某些操作以避免產(chǎn)生數(shù)據(jù)不一致

二 鎖的分類

鎖的類別有兩種分法:

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

MS-SQL Server 使用以下資源鎖模式。

鎖模式 描述

共享 (S) 用于不更改或不更新數(shù)據(jù)的操作(只讀操作),如 SELECT 語句。

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

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

意向鎖 用于建立鎖的層次結(jié)構(gòu)。意向鎖的類型為:意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。

架構(gòu)鎖 在執(zhí)行依賴于表架構(gòu)的操作時(shí)使用。架構(gòu)鎖的類型為:架構(gòu)修改 (Sch-M) 和架構(gòu)穩(wěn)定性 (Sch-S)。

大容量更新 (BU) 向表中大容量復(fù)制數(shù)據(jù)并指定了 TABLOCK 提示時(shí)使用。

共享鎖

共享 (S) 鎖允許并發(fā)事務(wù)讀取 (SELECT) 一個(gè)資源。資源上存在共享 (S) 鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù)。一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享 (S) 鎖,除非將事務(wù)隔離級別設(shè)置為可重復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享 (S) 鎖。

更新鎖

更新 (U) 鎖可以防止通常形式的死鎖。一般更新模式由一個(gè)事務(wù)組成,此事務(wù)讀取記錄,獲取資源(頁或行)的共享 (S) 鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它 (X) 鎖。如果兩個(gè)事務(wù)獲得了資源上的共享模式鎖,然后試圖同時(shí)更新數(shù)據(jù),則一個(gè)事務(wù)嘗試將鎖轉(zhuǎn)換為排它 (X) 鎖。共享模式到排它鎖的轉(zhuǎn)換必須等待一段時(shí)間,因?yàn)橐粋€(gè)事務(wù)的排它鎖與其它事務(wù)的共享模式鎖不兼容;發(fā)生鎖等待。第二個(gè)事務(wù)試圖獲取排它 (X) 鎖以進(jìn)行更新。由于兩個(gè)事務(wù)都要轉(zhuǎn)換為排它 (X) 鎖,并且每個(gè)事務(wù)都等待另一個(gè)事務(wù)釋放共享模式鎖,因此發(fā)生死鎖。

若要避免這種潛在的死鎖問題,請使用更新 (U) 鎖。一次只有一個(gè)事務(wù)可以獲得資源的更新 (U) 鎖。如果事務(wù)修改資源,則更新 (U) 鎖轉(zhuǎn)換為排它 (X) 鎖。否則,鎖轉(zhuǎn)換為共享鎖。

排它鎖

排它 (X) 鎖可以防止并發(fā)事務(wù)對資源進(jìn)行訪問。其它事務(wù)不能讀取或修改排它 (X) 鎖鎖定的數(shù)據(jù)。

意向鎖

意向鎖表示 SQL Server 需要在層次結(jié)構(gòu)中的某些底層資源上獲取共享 (S) 鎖或排它 (X) 鎖。例如,放置在表級的共享意向鎖表示事務(wù)打算在表中的頁或行上放置共享 (S) 鎖。在表級設(shè)置意向鎖可防止另一個(gè)事務(wù)隨后在包含那一頁的表上獲取排它 (X) 鎖。意向鎖可以提高性能,因?yàn)?SQL Server 僅在表級檢查意向鎖來確定事務(wù)是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖 以確定事務(wù)是否可以鎖定整個(gè)表。

意向鎖包括意向共享 (IS)、意向排它 (IX) 以及與意向排它共享 (SIX)。

鎖模式 描述

意向共享 (IS) 通過在各資源上放置 S 鎖,表明事務(wù)的意向是讀取層次結(jié)構(gòu)中的部分(而不是全部)底層資源。

意向排它 (IX) 通過在各資源上放置 X 鎖,表明事務(wù)的意向是修改層次結(jié)構(gòu)中的部分(而不是全部)底層資源。IX 是 IS 的超集。

與意向排它共享 (SIX) 通過在各資源上放置 IX 鎖,表明事務(wù)的意向是讀取層次結(jié)構(gòu)中的全部底層資源并修改部分(而不是全部)底層資源。允許頂層資源上的并發(fā) IS 鎖。例如,表的 SIX 鎖在表上放置一個(gè) SIX 鎖(允許并發(fā) IS 鎖),在當(dāng)前所修改頁上放置 IX 鎖(在已修改行上放置 X 鎖)。雖然每個(gè)資源在一段時(shí)間內(nèi)只能有一個(gè) SIX 鎖,以防止其它事務(wù)對資源進(jìn)行更新,但是其它事務(wù)可以通過獲取表級的 IS 鎖來讀取層次結(jié)構(gòu)中的底層資源。

獨(dú)占鎖:只允許進(jìn)行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執(zhí)行數(shù)據(jù)更新命令時(shí),SQL Server會自動使用獨(dú)占鎖。當(dāng)對象上有其他鎖存在時(shí),無法對其加獨(dú)占鎖。

共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執(zhí)行Select時(shí),SQL Server會對對象加共享鎖。

更新鎖:當(dāng)SQL Server準(zhǔn)備更新數(shù)據(jù)時(shí),它首先對數(shù)據(jù)對象作更新鎖鎖定,這樣數(shù)據(jù)將不能被修改,但可以讀取。等到SQL Server確定要進(jìn)行更新數(shù)據(jù)操作時(shí),他會自動將更新鎖換為獨(dú)占鎖,當(dāng)對象上有其他鎖存在時(shí),無法對其加更新鎖。

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

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

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

MS-SQLSERVER 使用鎖在多個(gè)同時(shí)在數(shù)據(jù)庫內(nèi)執(zhí)行修改的用戶間實(shí)現(xiàn)悲觀并發(fā)控制

三 鎖的粒害怠憤干蒞妨縫施俯漸度

鎖粒度是被封鎖目標(biāo)的大小,封鎖粒度小則并發(fā)性高,但開銷大,封鎖粒度大則并發(fā)性低但開銷小

SQL Server支持的鎖粒度可以分為為行、頁、鍵、鍵范圍、索引、表或數(shù)據(jù)庫獲取鎖

資源 描述

RID 行標(biāo)識符。用于單獨(dú)鎖定表中的一行。

鍵 索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍。

頁 8 千字節(jié) (KB) 的數(shù)據(jù)頁或索引頁。

擴(kuò)展盤區(qū) 相鄰的八個(gè)數(shù)據(jù)頁或索引頁構(gòu)成的一組。

表 包括所有數(shù)據(jù)和索引在內(nèi)的整個(gè)表。

DB 數(shù)據(jù)庫。

四 鎖定時(shí)間的長短

鎖保持的時(shí)間長度為保護(hù)所請求級別上的資源所需的時(shí)間長度。

用于保護(hù)讀取操作的共享鎖的保持時(shí)間取決于事務(wù)隔離級別。采用 READ COMMITTED 的默認(rèn)事務(wù)隔離級別時(shí),只在讀取頁的期間內(nèi)控制共享鎖。在掃描中,直到在掃描內(nèi)的下一頁上獲取鎖時(shí)才釋放鎖。如果指定 HOLDLOCK 提示或者將事務(wù)隔離級別設(shè)置為 REPEATABLE READ 或 SERIALIZABLE,則直到事務(wù)結(jié)束才釋放鎖。

根據(jù)為游標(biāo)設(shè)置的并發(fā)選項(xiàng),游標(biāo)可以獲取共享模式的滾動鎖以保護(hù)提取。當(dāng)需要滾動鎖時(shí),直到下一次提取或關(guān)閉游標(biāo)(以先發(fā)生者為準(zhǔn))時(shí)才釋放滾動鎖。但是,如果指定 HOLDLOCK,則直到事務(wù)結(jié)束才釋放滾動鎖。

用于保護(hù)更新的排它鎖將直到事務(wù)結(jié)束才釋放。

如果一個(gè)連接試圖獲取一個(gè)鎖,而該鎖與另一個(gè)連接所控制的鎖沖突,則試圖獲取鎖的連接將一直阻塞到:

將沖突鎖釋放而且連接獲取了所請求的鎖。

連接的超時(shí)間隔已到期。默認(rèn)情況下沒有超時(shí)間隔,但是一些應(yīng)用程序設(shè)置超時(shí)間隔以防止無限期等待

五 SQL Server 中鎖的自定義

1 處理死鎖和設(shè)置死鎖優(yōu)先級

死鎖就是多個(gè)用戶申請不同封鎖,由于申請者均擁有一部分封鎖權(quán)而又等待其他用戶擁有的部分封鎖而引起的無休止的等待

可以使用SET DEADLOCK_PRIORITY控制在發(fā)生死鎖情況時(shí)會話的反應(yīng)方式。如果兩個(gè)進(jìn)程都鎖定數(shù)據(jù),并且直到其它進(jìn)程釋放自己的鎖時(shí),每個(gè)進(jìn)程才能釋放自己的鎖,即發(fā)生死鎖情況。

2 處理超時(shí)和設(shè)置鎖超時(shí)持續(xù)時(shí)間。

@@LOCK_TIMEOUT 返回當(dāng)前會話的當(dāng)前鎖超時(shí)設(shè)置,單位為毫秒

SET LOCK_TIMEOUT 設(shè)置允許應(yīng)用程序設(shè)置語句等待阻塞資源的最長時(shí)間。當(dāng)語句等待的時(shí)間大于 LOCK_TIMEOUT 設(shè)置時(shí),系統(tǒng)將自動取消阻塞的語句,并給應(yīng)用程序返回”已超過了鎖請求超時(shí)時(shí)段”的 1222 號錯(cuò)誤信息

示例

下例將鎖超時(shí)期限設(shè)置為 1,800 毫秒。

SET LOCK_TIMEOUT 1800

3) 設(shè)置事務(wù)隔離級別。

4 ) 對 SELECT、INSERT、UPDATE 和 DELETE 語句使用表級鎖定提示。

5) 配置索引的鎖定粒度

可以使用 sp_indexoption 系統(tǒng)存儲過程來設(shè)置用于索引的鎖定粒度

六 查看鎖的信息

1 執(zhí)行 EXEC SP_LOCK 報(bào)告有關(guān)鎖的信息

2 查詢分析器中按Ctrl+2可以看到鎖的信息

七 使用注意事項(xiàng)

如何避免死鎖

1 使用事務(wù)時(shí),盡量縮短事務(wù)的邏輯處理過程,及早提交或回滾事務(wù);

2 設(shè)置死鎖超時(shí)參數(shù)為合理范圍,如:3分鐘-10分種;超過時(shí)間,自動放棄本次操作,避免進(jìn)程懸掛;

3 優(yōu)化程序,檢查并避免死鎖現(xiàn)象出現(xiàn);

4 .對所有的腳本和SP都要仔細(xì)測試,在正是版本之前。

5 所有的SP都要有錯(cuò)誤處理(通過@error)

6 一般不要修改SQL SERVER事務(wù)的默認(rèn)級別。不推薦強(qiáng)行加鎖

解決問題 如何對行 表 數(shù)據(jù)庫加鎖

八 幾個(gè)有關(guān)鎖的問題

1 如何鎖一個(gè)表的某一行

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT * FROM table ROWLOCK WHERE id = 1

2 鎖定數(shù)據(jù)庫的一個(gè)表

SELECT * FROM table WITH (HOLDLOCK)

加鎖語句:

sybase:

update 表 set col1=col1 where 1=0 ;

MSSQL:

select col1 from 表 (tablockx) where 1=0 ;

oracle:

LOCK TABLE 表 IN EXCLUSIVE MODE ;

加鎖后其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖

幾個(gè)例子幫助大家加深印象

設(shè)table1(A,B,C)

A B C

a1 b1 c1

a2 b2 c2

a3 b3 c3

1)排它鎖

新建兩個(gè)連接

在之一個(gè)連接中執(zhí)行以下語句

begin tran

update table1

set A=’aa’

where B=’b2′

waitfor delay ’00:00:30′ –等待30秒

commit tran

在第二個(gè)連接中執(zhí)行以下語句

begin tran

select * from table1

where B=’b2′

commit tran

若同時(shí)執(zhí)行上述兩個(gè)語句,則select查詢必須等待update執(zhí)行完畢才能執(zhí)行即要等待30秒

2)共享鎖

在之一個(gè)連接中執(zhí)行以下語句

begin tran

select * from table1 holdlock -holdlock人為加鎖

where B=’b2′

waitfor delay ’00:00:30′ –等待30秒

commit tran

在第二個(gè)連接中執(zhí)行以下語句

begin tran

select A,C from table1

where B=’b2′

update table1

set A=’aa’

where B=’b2′

commit tran

若同時(shí)執(zhí)行上述兩個(gè)語句,則第二個(gè)連接中的select查詢可以執(zhí)行

而update必須等待之一個(gè)事務(wù)釋放共享鎖轉(zhuǎn)為排它鎖后才能執(zhí)行 即要等待30秒

3)死鎖

增設(shè)table2(D,E)

D E

d1 e1

d2 e2

在之一個(gè)連接中執(zhí)行以下語句

begin tran

update table1

set A=’aa’

where B=’b2′

waitfor delay ’00:00:30′

update table2

set D=’d5′

where E=’e1′

commit tran

在第二個(gè)連接中執(zhí)行以下語句

begin tran

update table2

set D=’d5′

where E=’e1′

waitfor delay ’00:00:10′

update table1

set A=’aa’

where B=’b2′

commit tran

同時(shí)執(zhí)行,系統(tǒng)會檢測出死鎖,并中止進(jìn)程

補(bǔ)充一點(diǎn):

Sql Server2023支持的表級鎖定提示

HOLDLOCK 持有共享鎖,直到整個(gè)事務(wù)完成,應(yīng)該在被鎖對象不需要時(shí)立即釋放,等于SERIALIZABLE事務(wù)隔離級別

NOLOCK 語句執(zhí)行時(shí)不發(fā)出共享鎖,允許臟讀 ,等于 READ UNCOMMITTED事務(wù)隔離級別

PAGLOCK 在使用一個(gè)表鎖的地方用多個(gè)頁鎖

READPAST 讓sql server跳過任何鎖定行,執(zhí)行事務(wù),適用于READ UNCOMMITTED事務(wù)隔離級別只跳過RID鎖,不跳過頁,區(qū)域和表鎖

ROWLOCK 強(qiáng)制使用行鎖

TABLOCKX 強(qiáng)制使用獨(dú)占表級鎖,這個(gè)鎖在事務(wù)期間阻止任何其他事務(wù)使用這個(gè)表

mssql數(shù)據(jù)庫分表方案的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于mssql數(shù)據(jù)庫分表方案,高效分表,提升MSSQL數(shù)據(jù)庫性能的更佳方案,如何處理大量數(shù)據(jù)并發(fā)操作的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!


網(wǎng)頁標(biāo)題:高效分表,提升MSSQL數(shù)據(jù)庫性能的更佳方案(mssql數(shù)據(jù)庫分表方案)
鏈接URL:http://www.dlmjj.cn/article/djoecdc.html