SQLServer 延遲事務持久性

来源:http://www.cnblogs.com/wenBlog/archive/2017/05/22/6888039.html
-Advertisement-
Play Games

SQL Server 2014新功能 -- 延遲事務持久性(Delayed Transaction Durability) SQL Server事務提交預設是完全持久性的(Full Durable),從SQL Server 2014開始,增加了新的功能延遲事務持久性,使得事務提交可設置為延時持久性的 ...


SQL Server 2014新功能 -- 延遲事務持久性(Delayed Transaction Durability)

SQL Server事務提交預設是完全持久性的(Full Durable),從SQL Server 2014開始,增加了新的功能延遲事務持久性,使得事務提交可設置為延時持久性的(Delayed Durable,也叫做(Lazy Commit))。

  • 完全事務持久性(Full Transaction Durability)

在SQL Server 2014之前, SQL Server提交事務是一個同步的過程,也就是說,只有當SQL Server將該事務相對應的日誌記錄寫入到了磁碟文件之後,才會返回事務提交成功的信號。這也是為了體現事務4個基本特性中的持久性而實現的功能。只有 這樣,我們才能保證當SQL Server因為某些原因突然Crash之後,再重啟的時候,那些已經提交但還沒有寫入到數據文件上的記錄可以通過日誌文件進行恢復,或者那些還沒有提 交,但已經有部分數據寫入到數據文件上的記錄進行回滾。所以,我們可以看到,對於傳統的事務提交,由於必須要保證日誌寫入到磁碟上,這個I/O操作就有可 能成為性能的瓶頸。

  • 應用場景


完全持久事務在將控制權歸還給客戶端之前把事務日誌強制寫入磁碟。 只要存在以下情況,就應使用完全持久事務:

1.系統無法承受任何數據丟失。
2.造成瓶頸的原因不是事務日誌寫入延遲。

通過在記憶體中保留事務日誌記錄並批量寫入事務日誌,延遲事務持續性可以縮短延遲,因而減少了所需的 I/O 操作。 延遲事務持續性可能會減少日誌 I/O 爭用,從而減少系統中的等待。

  • 延遲事務持久性(Delayed Transaction Durability)

這個技術可以使得SQL Server在提交事務時,無需等待事務日誌寫入磁碟就直接返回事務提交成功的信號,I/O操作在後臺會以非同步的方式寫入到資料庫事務日誌文件中。這樣好 處是,事務可以去除等待I/O操作完成所帶來的延時,以此來提高整個SQL Server的性能。在這整個過程中,SQL Server會在記憶體中專門開闢出一個特殊的Log Buffer來存放DTD所產生的日誌,當這個Log Buffer一旦存滿之後會馬上寫入日誌文件,由此將零散的I/O操作變成了一塊一塊的操作來提高效率,增加吞吐量。

  • 應用場景


適合使用延遲事務持續性的部分情況如下:

1.可以容忍一定的數據丟失。
    如果可以容忍一定的數據丟失,例如只要有大部分數據即可,個別記錄不是非常重要,就值得考慮延遲持續性。 如果無法容忍任何數據丟失,則不要使用延遲事務持續性。
2.在事務日誌寫入時遭遇瓶頸。
    如果性能問題是由於事務日誌寫入延遲造成的,則應用程式可能適合使用延遲事務持續性。
3.工作負載有很高的爭用率。
    如果系統工作負載爭用級別很高,則會花費大量時間等待鎖釋放。 延遲事務持續性會縮短提交時間,因此能夠更快地釋放鎖,從而實現更大的吞吐量。

  • 控制事務持久性


持久性可以在資料庫級別(Database Level)、提交級別(COMMIT Level)或原子塊級別(ATOMIC Block Level)進行控制。

  1. 資料庫級別控制
    您作為 DBA,可以控制用戶是否可通過以下語句對資料庫使用延遲事務持續性。 您必須使用 ALTER DATABASE 來設置延遲持續性設置。

    ALTER DATABASE … SET DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

    DISABLE:預設設置,不管如何保持完全持久性

    ALLOWD:允許延遲持久性執行,要看存儲過程,或者TSQL級別的設置

    FORCED:強制所有的事務都是延遲持久性的

  2. 原子塊級別控制 - 本機編譯的存儲過程

          下麵的代碼面向原子塊內部。

         

DELAYED_DURABILITY = { OFF | ON }

   3. 提交級別控制 – T-SQL


  COMMIT 語法已擴展,您可以強制實施延遲事務持續性。 如果 DELAYED_DURABILITY 在資料庫級別設置為 DISABLED 或 FORCED,則忽略此 COMMIT 選項。


  

COMMIT [ { TRAN | TRANSACTION } ] [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]

OFF:預設設置,不使用延遲持久事務

ON:啟動延遲持久事務

 

 

  • 如何強制執行事務日誌刷新


  有兩種方法可以強制將事務日誌刷新到磁碟。

1.執行任何可改變相應資料庫的完全持久事務。 這會強制將之前提交的所有延遲持續性事務的日誌記錄刷新到磁碟。
2.執行系統存儲過程 sp_flush_log。 此過程會強制將之前提交的所有延遲持久事務的日誌記錄刷新到磁碟。
 
  • 其他相關功能與延遲持久性的關係和影響

更改跟蹤和變更數據捕獲
具有更改跟蹤屬性的所有事務都是完全持久事務。 如果一個事務的所有寫入操作都對錶進行,而這些表支持更改跟蹤或變更數據捕獲 (CDC),則該事務具有更改跟蹤屬性。

崩潰恢復
一致性可得到保證,但已提交的延遲持久事務的一些更改可能會丟失。

跨資料庫和 DTC
如果事務跨資料庫或是分散式事務,則無論資料庫或事務提交設置如何,它都是完全持久事務。

AlwaysOn 可用性組和鏡像
延遲持久事務並不能保證主資料庫或任何輔助資料庫的持續性。 此外,它們也不保證瞭解輔助資料庫的事務。 提交後,在從同步輔助數據接收到任何確認之前,控制權就會歸還客戶端。

故障轉移群集
某些延遲持久事務寫入可能會丟失。

事務複製
延遲持久事務並不保證其複製。 只有在事務成為持久事務後才會得到複製。

日誌傳送
傳送的日誌中僅包含已成為持久事務的事務。

日誌備份
備份中僅包含已成為持久事務的事務。

在什麼情況下會丟失數據?

如果你對錶實施延遲持續性,則應瞭解某些情況會導致數據丟失。 如果無法容忍任何數據丟失,則不要對錶使用延遲持續性。

災難性事件

發生災難性事件(如伺服器崩潰)時,將丟失已提交但未保存到磁碟的所有事務的數據。 根據資料庫中的任何表(持久記憶體優化或基於磁碟)執行完全持久的事務時,或調用 sp_flush_log 時,延遲的持久事務保存到磁碟。 如果你在使用延遲的持久事務,那麼你可能想要在資料庫中創建一個小型表,你可定期更新該表或調用 sp_flush_log,以保存所有未完成的已提交事務。 事務日誌還會在變滿時刷新,但這難以預測,也無法進行控制。

SQL Server 關閉和重新啟動

對 於延遲的持久性,SQL Server 的意外關閉和預期關閉/重新啟動沒有區別。 與災難性事件類似,應制定針對數據丟失的計劃。 在進行計劃的關閉/重新啟動時,一些尚未寫入磁碟的事務可能會首先保存到磁碟,但不應對其進行計劃。 雖然計划了關閉/重啟,但無論是否計劃,都會像災難性事件一樣丟失數據。

參考:https://msdn.microsoft.com/zh-cn/library/dn449490%28v=sql.120%29.aspx


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL學習筆記-子查詢和連接 使客戶端進入gbk編碼方式顯示: mysql> SET NAMES gbk; 1.子查詢 子查詢的定義: 子查詢(Subquery)是指出現在其他SQL語句內的SELECT子句。 例如: SELECT * FROM t1 WHERE col1 = (SELECT c ...
  • Spark GraphX是一個分散式的圖處理框架。社交網路中,用戶與用戶之間會存在錯綜複雜的聯繫,如微信、QQ、微博的用戶之間的好友、關註等關係,構成了一張巨大的圖,單機無法處理,只能使用分散式圖處理框架處理,Spark GraphX就是一種分散式圖處理框架。 1. POM文件 在項目的pom文件中 ...
  • 轉載自 http://blog.csdn.net/happymagic/article/details/51835522 SQL Server 開啟遠程訪問的方法: 註意事項:(重點) 此次演示版本為 SQL Server 2014 1. 用電腦名訪問伺服器時,需要開啟sql server bro ...
  • 某現場報一個SQL死鎖,於是開啟了1222跟蹤: 一段時間之後拷貝ERROR文件查找相關信息,比較有用的摘錄出來如下: 語句一: 語句二: 相關的死鎖資源如下: 可以明顯的看到是select語句與insert語句產生了死鎖,爭用的資源分別6996和11086這兩個page。 因此根據死鎖的產生原理決 ...
  • 怎樣在eclipse開發環境中連接資料庫並測試連接是否成功 1)eclipse開發環境里沒有集成mysql的驅動,需要從以下地址下載連接驅動程式mysql-connector-java-XX-XX-XX.zip: http://dev.mysql.com/downloads/connector/j ...
  • 一、Redis簡介 1.關於關係型資料庫和nosql資料庫 關係型資料庫是基於關係表的資料庫,最終會將數據持久化到磁碟上,而nosql數據 庫是基於特殊的結構,並將數據存儲到記憶體的資料庫。從性能上而言,nosql資料庫 要優於關係型資料庫,從安全性上而言關係型資料庫要優於nosql資料庫,所以在實 ...
  • 在深入學習圖形資料庫之前,首先理解屬性圖的基本概念。一個屬性圖是由頂點(Vertex),邊(Edge),標簽(Lable),關係類型和屬性(Property)組成的有向圖。頂點也稱作節點(Node),邊也稱作關係(Relationship);在圖形中,節點和關係是最重要的實體,所有的節點是獨立存在的 ...
  • 從一個表複製數據,然後把數據插入到另一個新表中。 假設有一個已創建且有數據的orders表,要把orders表備份到還未創建的newOrders表裡 SQL用法:SELECT * INTO newOrders FROM orders 但是mysql使用報錯,ERROR 1327 (42000): U ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...