国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

SQL 2014新特性- Delayed durability

2024-07-21 02:49:58
字體:
供稿:網(wǎng)友
SQL 2014新特性- Delayed durability

ACID 是數(shù)據(jù)庫的基本屬性。其中的D是指"持久性":只要事務(wù)已經(jīng)提交,對應(yīng)的數(shù)據(jù)修改就會被保存下來,即使出現(xiàn)斷電等情況,當系統(tǒng)重啟后之前已經(jīng)提交的數(shù)據(jù)依然能夠反映到數(shù)據(jù)庫中。

那么D特性是如何在SQL Server中實現(xiàn)的呢?SQL Server使用write-ahead logging的方式,保證日志記錄會先于數(shù)據(jù)記錄固化到磁盤中。當事務(wù)提交后,只有當日志記錄固化到磁盤時,才會向客戶端返回提交成功的消息,至于相應(yīng)的數(shù)據(jù)記錄,會通過異步的方式后續(xù)寫入到磁盤中。如果在此期間發(fā)生斷電等故障,那么就會出現(xiàn)以下兩種情況:

  1. 日志已經(jīng)寫入到磁盤(committed),但數(shù)據(jù)沒有寫入:

    系統(tǒng)重啟后進行redo操作,通過讀取日志,來將沒有固化到數(shù)據(jù)文件的信息寫入到數(shù)據(jù)文件。

  2. 部分日志已經(jīng)寫入到磁盤(uncommitted),數(shù)據(jù)部分寫入或沒有寫入

    系統(tǒng)重啟后執(zhí)行undo操作,將沒有提交的事務(wù)對應(yīng)的數(shù)據(jù)從數(shù)據(jù)文件中清除。

這樣就保證了已經(jīng)提交的事務(wù)不會丟失。

Delayed durability

SQL Server 2014中引入了一個新的特性,叫做Delayed durability(也稱作lazy commit),顛覆了之前提到的概念。通過Delayed durability,可以讓日志記錄按照一定規(guī)律異步地寫入到日志文件中,避免日志磁盤寫入過于頻繁。這樣就以犧牲Durability來換取性能

應(yīng)用場景:

使用該特性的前提是您的應(yīng)用可以容忍一定程度的數(shù)據(jù)丟失。

日志磁盤出現(xiàn)系統(tǒng)瓶頸。

由于日志磁盤性能問題,導(dǎo)致事務(wù)無法提交,導(dǎo)致相應(yīng)的資源(memory,lock等)無法釋放引發(fā)的資源競爭

Delayed Durability有以下特性:

  1. 一旦事務(wù)提交,事務(wù)中的數(shù)據(jù)變更對其他事務(wù)(包含full durable transaction和delayed durability transaction)可見。具體請參考isolation level http://msdn.microsoft.com/en-us/library/dn133175.aspx
  2. 事務(wù)的持久性(durability)依賴于日志記錄是否固化到磁盤。
  3. 內(nèi)存中的日志記錄只有在任意以下情況發(fā)生時才會固化到磁盤:
    1. )Full durable transaction進行了數(shù)據(jù)變更,并且commit.
    2. )執(zhí)行了sp_flush_log存儲過程.
    3. )Log buffer滿了,日志記錄也會固化到磁盤.

如果1)或2)出現(xiàn)兩次,那么SQLSERVER會保證第一次之前的Delayed durability transaction的數(shù)據(jù)變更已經(jīng)被固化到了磁盤。

如何使用Delayed durability

Delayed durability是一個數(shù)據(jù)庫級別的特性,默認是禁用的,我們首先要開啟這個選項。

ALTER DATABASE [DDtest] SET DELAYED_DURABILITY = FORCED|Allowed|Disabled

如果是forced,那么該數(shù)據(jù)庫內(nèi)所有的事務(wù)都強制使用delayed durability;如果是allowed,那么delayed durability和full durable transaction可以同時存在;如果是disabled,那么無法使用delayed durability.

當該屬性發(fā)生變化后,errorlog中也會有相應(yīng)的記錄

Setting database option delayed_durability to forced for database 'DDtest'.

Setting database option delayed_durability to allowed for database 'DDtest'.

Setting database option delayed_durability to disabled for database 'DDtest'.

如果數(shù)據(jù)庫的DELAYED_DURABILITY為Allowed,我們可以在語句級別進行控制,否則就要遵循數(shù)據(jù)庫的設(shè)定了(如果語句的設(shè)定和數(shù)據(jù)庫級別設(shè)定沖突,那么SQL Server會使用數(shù)據(jù)庫級別的設(shè)定)。

事例

將數(shù)據(jù)的 DELAYED_DURABILITY設(shè)置為Allowed

ALTER DATABASE [DDtest] SET DELAYED_DURABILITY = Allowed

創(chuàng)建一張表,并循環(huán)插入1000行數(shù)據(jù),每次插入都是一個單獨的事務(wù)

create table ta(col int)

declare @N int=0

while @n<1000

begin

begin tran

insert ta values(1)

commit tran with(delayed_durability=off)

set @N+=1

PRint cast(@N as varchar(1000))

end

開啟Process Monitor,監(jiān)控對數(shù)據(jù)庫日志文件的操作。

一共對日志文件進行了1012次的寫入操作,也就是每次commit都會立刻固化到日志文件

下面比較一下使用delayed durability的情況

declare @N int=0

while @n<1000

begin

begin tran

insert ta values(1)

commit tran with(delayed_durability=on)

set @N+=1

print cast(@N as varchar(1000))

end

1000個事務(wù)只觸發(fā)了32次寫入,大大地減少了對日志文件的寫入操作。

注意事項

  1. 當系統(tǒng)不忙時,也會主動將delayed durability的日志記錄固化到磁盤。但目前不知道如何判斷"不忙"這個標準。
  2. checkpoint不會將delayed durability的日志記錄固化到磁盤。
  3. SQL Server正常關(guān)閉不會將delayed durability的日志記錄固化到磁盤,也就說正常關(guān)閉也可能會導(dǎo)致數(shù)據(jù)丟失,建議之前先執(zhí)行sp_flush_log。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 双牌县| 江安县| 连城县| 高唐县| 高雄县| 澄迈县| 交口县| 西宁市| 平乡县| 沂源县| 冷水江市| 繁峙县| 宿州市| 琼海市| 城口县| 黄梅县| 济阳县| 五台县| 理塘县| 广州市| 哈密市| 桂平市| 吴江市| 沙田区| 乐陵市| 定安县| 江北区| 龙陵县| 方城县| 西和县| 玉屏| 思茅市| 洛阳市| 缙云县| 浮梁县| 资讯 | 太保市| 新沂市| 富蕴县| 开平市| 两当县|