您目前已離線,請等候您的網際網路重新連線

擴充在 SQL Server 中的資料可靠性的記錄和資料存放區演算法的描述

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:230785
結論
本文將告訴您如何 Microsoft SQL Server 記錄和資料演算法延伸資料可靠性和完整性。

若要瞭解更多關於引擎的基礎概念以及塔臺 (修復與隔離利用語意的演算法),請參閱下列 ACM 交易上 (在 「 磁碟區編號為 1,1992 年 3 月 17) 下的資料庫系統文件:

此文件的前置重疊時間寫入器是 C Mohan。文件討論 SQL Server 技術,以擴充的資料可靠性和與失敗相關的完整性。

我們建議您閱讀下列 「 Microsoft 知識庫 」 中的文件,如需有關快取及替代的失敗模式討論:
86903 快取在 SQL Server 中的磁碟控制卡的描述
234656 關於每個資料庫系統管理員應該知道的 SQL Server 中使用的磁碟機的快取的資訊
其他相關資訊
我們開始深入探討之前,所用術語的整篇文章的一些定義下列資料表中。
詞彙定義
電池供電個別和當地語系化的電池備份設備直接可用,並控制的快取機制以避免資料遺失。
注意這不是不斷電供電系統 (UPS)。UPS 並不保證任何寫入活動,並從快取的裝置已中斷的連線。
快取中間的儲存機制,用來最佳化實體 I/O 作業,改善效能。
Dirty 分頁包含尚未清除穩定的存放裝置的資料修改的頁面。如需有關 dirty 分頁緩衝區的詳細資訊,請參閱"網頁中撰寫「 在 SQL Server 線上叢書 》 的主題。
注意內容也適用於 Microsoft SQL Server 2012年及更新版本。
失敗任何項目可能會導致未預期的 SQL Server 處理序中斷。範例包括: 電源中斷、 電腦重設,記憶體錯誤、 其他硬體問題、 損壞的磁區、 磁碟機中斷、 系統失敗,等等。
排清強制的快取緩衝區以穩定存放裝置。
閂鎖用來保護資源的實體一致性的同步處理物件。
靜態存放裝置整個系統失敗仍然可以使用任何媒體。
已釘選的頁面仍會處於資料快取,並無法清除穩定的存放裝置中,直到所有相關的記錄檔資料錄受到穩定的儲存位置中的網頁。
穩定的存放裝置靜態存放裝置相同。
變動存放任何失敗之間無法維持不變的媒體。

預先寫入記錄 (WAL) 通訊協定

在 [通訊協定一詞是描述 WAL 的絕佳方式。它是特定的儲存及交換正確定義的實作步驟,請確定該資料集,可以復原到失敗的已知狀態。就像網路會包含定義的通訊協定,因此以一致且受保護的方式交換資料,wal 也同樣太描述要保護資料的通訊協定。

塔臺文件定義,wal 也同樣的如下所示:
WAL 通訊協定會判斷提示表示某些資料變更的記錄檔資料必須已經是穩定的儲存體中之前已變更的資料可以取代舊版的靜態存放裝置中的資料。系統也就是不允許寫入頁面直到最少的靜態存放裝置版本更新的網頁,內容說明網頁更新的記錄檔資料的復原部份已寫入穩定存放裝置。
如需有關預先寫入記錄的詳細資訊,請參閱 預先寫入交易記錄檔 在 SQL Server 線上叢書 》 的主題。

SQL Server 和,wal 也同樣

SQL Server 使用 WAL 通訊協定。若要確定在交易已正確地認可,您必須保護與交易相關聯的所有記錄檔資料錄,穩定的儲存體中。

若要釐清這種情況下,請考慮下列的特定範例。

注意例如,假設有沒有索引,且受影響的頁面是頁面 150。
BEGIN TRANSACTION   INSERT INTO tblTest VALUES (1)COMMIT TRANSACTION				
接下來,細分成簡單的記錄步驟活動,如下列表格中所述。
陳述式執行的動作
開始交易寫入記錄檔快取區。不過,它並不需要清除穩定的存放裝置,因為 SQL Server 未做任何實體變更。
插入 tblTest
  1. 如果已經沒有到 SQL Server 資料快取區擷取資料頁 150。
  2. 資料頁就是 為鎖存, 釘選標示為不乾淨並會取得適當的鎖定。
  3. 插入的記錄檔資料錄建置,因此加入至記錄檔快取。
  4. 新的資料列會加入到資料頁。
  5. 會釋放閂鎖。
  6. 與交易關聯的記錄檔記錄或頁面沒有因為所有的變更保留在變動存放在這個時候清除。
認可交易
  1. 認可的記錄檔資料錄的正確,並與交易關聯的記錄必須寫到穩定存放裝置。交易不會視為已認可的記錄檔資料正確分派到該穩定的存放裝置。
  2. 資料頁 150 會保留在 SQL Server 資料快取中,且穩定的存放裝置無法立即清除。當正確保護記錄檔資料錄時,修復可以取消復原作業,如有必要。
  3. 交易式鎖定被釋放。
不相混淆的術語 「 鎖定 」 和 「 記錄 」。雖然很重要,鎖定記錄時,會和另一個問題,wal 也同樣處理。在前一個範例中,SQL Server 通常會保留閂鎖在頁面上 150 次在頁面上,不是整個交易的時間執行的實體插入變更時的必要。若要保護的資料列、 範圍、 頁面上或視建立適當的鎖定型別。請參閱 SQL Server 線上叢書 》 的鎖定區段,如需詳細資訊的鎖定類型。

查看更多詳細資料中的範例,您可能會要求延遲寫入器或檢查點處理程序執行時,會發生什麼事。SQL Server 7 發出至穩定 dirty 和已釘選頁面相關聯的交易記錄檔資料錄的儲存區的所有適當清除。如此可確保可以永遠不會寫入 WAL 通訊協定資料頁穩定存放,直到相關聯的交易記錄檔資料錄都已清除。

SQL Server 且光線穩定的存放裝置

SQL Server 可包括磁碟磁扇區大小 (通常 4096 或 512 個位元組) 的知識,進而強化記錄與資料分頁作業。

若要維持交易的 ACID 屬性,SQL Server 必須考慮的失敗點。在失敗期間許多磁碟機規格只能保證有限的磁扇區寫入作業。發生失敗時,大部分的規格會保證單一磁區寫入的完成。

SQL Server 使用 8 KB 資料頁和記錄檔 (如果排清) 上的磁區大小的倍數。(大多數的磁碟機會使用 512 位元組磁區大小的預設值為)。在失敗,SQL Server 可以負責寫入作業大於磁扇區採用記錄同位檢查及損毀的寫入技巧。

損毀的頁偵測

此選項可讓 SQL Server,以偵測電源故障或其他系統中斷所造成的未完成 I/O 作業。當 true 時,它會造成一個位元翻轉供在 8 千位元組 (KB) 資料庫頁面中的每個 512 位元組磁扇區,只要在頁面寫入磁碟。如果位元處於錯誤狀態稍後頁面時讀取的 SQL Server,然後撰寫頁時,不正確;偵測到損毀的頁。損毀的頁復原期間通常偵測到,因為撰寫不正確的任何頁面有可能讀取的修復。

雖然 SQL Server 資料庫分頁 8 KB,磁碟 I/O 作業使用執行 512 位元組磁區。因此,16 磁區分別寫入每個資料庫頁面。損毀的頁就可能發生系統失敗 (例如,由於停電) 之間的時間,作業系統會寫入到磁碟的第一個 512 位元組磁區和 8 KB I/O 作業完成。如果在失敗之前,已成功地寫入資料庫頁面的第一個磁區,磁碟上的 [資料庫] 頁面會為更新的雖然它可能沒有成功。

藉由使用電池供電磁碟控制器的快取,您可以確定資料已成功地寫入磁碟中,或是不完全寫入。在此情況下,不會設定為"true"的損毀的頁偵測因為這是不必要的。

注意在 SQL Server 中的預設不啟用損毀的頁偵測。如需詳細資訊,請參閱下列 MSDN 網站:

記錄檔同位檢查

記錄檔同位檢查是非常類似於損毀的頁偵測。每個 512 位元組磁區包含同位檢查位元。這些同位檢查位元永遠與記錄檔資料錄寫入,並且評估時擷取的記錄檔記錄。藉由強迫寫入記錄在 512 位元組的界限上,SQL Server 可以確定 committal 作業會完全寫入實體磁碟的磁扇區。

SQL Server 的版本早於 7.0

先前版本的 SQL Server 7.0 比未提供記錄同位檢查或損毀的位元偵測設備。事實上,這些版本可以撰寫相同的記錄頁多次直到記錄檔資料錄填入 2 KB 記錄頁。這樣可能會公開已順利認可的交易。如果要在失敗期間重新寫入記錄檔] 頁面,以認可交易的磁區可能不取得重寫正確。

效能的影響

所有版本的 SQL Server 會使用 Win32createfile 而函式,以都開啟記錄檔和資料檔案。在開啟由 SQL Server 時, dwFlagsAndAttributes成員會包括 [ FILE_FLAG_WRITE_THROUGH] 選項。
FILE_FLAG_WRITE_THROUGH
指示系統寫出任何中繼快取,並直接寫入磁碟。系統仍然可以快取寫入作業,但無法延遲清除。

[FILE_FLAG_WRITE_THROUGH] 選項可確保當寫入作業傳回成功完成的訊息時,正確的資料儲存在穩定的存放裝置。這對齊,以確保資料的 WAL 通訊協定。
許多磁碟機 (SCSI 和 IDE) 包含內建的快取的 512 KB,1 MB 或更大。不過,磁碟機快取通常要依賴電容器,而不是電池供電方案。這些快取機制無法保證寫入跨電源循環週期或類似失敗點。它們只能保證完成磁扇區寫入作業。這特別是為什麼記錄同位檢查偵測與損毀的寫入都已內建 SQL Server 7.0 和更新版本。磁碟機繼續成長的大小,快取變得越來越大,而且它們可以公開 (expose) 大量的資料時失敗。

很多硬體廠商提供電池供電磁碟控制站的解決方案。這些控制站快取可以維護快取中的資料有好幾天,並甚至允許快取的硬體,放在第二部電腦。正確地還原電源時,不成文的資料完全排清,才允許進一步的資料存取。其中大部分與建立以達最佳效能的寫入快取允許讀取的百分比。某些包含大量記憶體存放區。事實上,針對特定的市場區塊,某些硬體廠商提供高階電池供電磁碟快取 6 GB 的快取控制站系統。這些可大幅改善資料庫效能。

進階快取的實作將FILE_FLAG_WRITE_THROUGH要求是不停控制卡快取,因為它們可以提供 true 的控制代碼重新撰寫發生系統重設、 電源中斷或其他失敗點時的功能。

不使用快取的 I/O 傳輸可能會顯著加長由於移動磁頭、 旋轉速率及其他限制因素所需的機械時間。

磁區排序

用來增加 I/O 效能的常見技術是磁區的順序。若要避免機械頭移動量讀取/寫入要求會進行排序時,允許的標頭來擷取或儲存資料的更一致影片。

快取可保留多個記錄,以及資料寫入要求一次。WAL 通訊協定和 WAL 通訊協定的 SQL Server 實作需要清除的記錄檔寫入穩定存放在發出頁面寫入之前。但是,使用快取可能會傳回成功從記錄檔的寫入要求沒有寫入資料的實際磁碟機 (也就,寫入至穩定儲存)。這可能會導致 SQL Server 發行的資料頁的寫入要求。

使用寫入快取的參與,資料仍視為動態儲存體中。不過,從 Win32 API WriteFile呼叫,完全在 SQL Server 會看到活動,如何成功傳回碼已經取得。SQL Server 或任何使用WriteFileAPI 呼叫的處理序,可以判斷 onlythat 資料已正確地取得穩定的存放裝置。

為了討論方便,會假設所有的磁扇區的資料頁排序之前符合的記錄檔資料錄的磁扇區寫入。這會立即違反 WAL 通訊協定。快取正在寫入記錄檔資料錄之前,資料頁。除非完整電池供電快取,失敗可能會導致災難性的結果。

當您評估資料庫伺服器的最佳效能因素時,有許多因素需要考慮。最重要的是,「 我的系統允許有效的 FILE_FLAG_WRITE_THROUGH 功能嗎? 」

注意是 usingmust 完全任何快取支援電池供電方案。所有其他快取機制是可疑資料損毀和資料遺失。SQL Server 會盡全力 FILE_FLAG_WRITE_THROUGH,進而確保,wal 也同樣。

測試顯示磁碟機上的多種可能包含寫入快取不適當的電池。SCSI、 IDE 和 EIDE 磁碟機要善用寫入快取。如需有關 SSDs 與 SQL Server 的運作方式的詳細資訊,seethe 下列 CSS SQL Server 工程師部落格文章:


在許多組態中,若要正確停用了 IDE 或 EIDE 的磁碟機的寫入快取的唯一方法是使用特定的製造商公用程式,或使用跳接器位於磁碟機本身。若要確定寫入快取停用的磁碟機本身,請連絡磁碟機製造商。

SCSI 磁碟機也有寫入快取。不過,這些快取通常可以由作業系統停用。如果有任何問題,請連絡光碟機製造商,以適當的公用程式。

寫入快取堆疊

寫入快取堆疊是類似的磁區的順序。下列的定義是直接來自前置 IDE 磁碟機製造商的網站:
一般而言,此模式下才有作用。寫入快取模式接受主應用程式將資料寫入緩衝區中直到緩衝區已滿或主機傳送已完成。

磁碟寫入工作開始主應用程式將資料儲存至磁碟。主應用程式寫入命令繼續接受,資料轉送到緩衝區直到寫入命令堆疊已滿,或資料緩衝區已滿。磁碟機可能會重新排列寫入命令,以磁碟機的輸送量最佳化。

自動寫入重新配置 (AWR)

用來保護資料的另一種技術是在資料操作期間偵測損壞的磁區。下列說明來自前置 IDE 磁碟機製造商的網站:
這項功能是寫入快取的一部分,並減少延後的寫入作業期間的資料遺失的風險。如果在磁碟寫入程序期間,發生磁碟錯誤,磁碟工作停駐點和可疑的磁區已重新配置到位於磁碟機的結尾的替代磁扇區的集區。重新配置,下列磁碟寫入工作會繼續直到完成為止。
如果電池備份提供快取,這可能是非常強大的功能。這提供在重新啟動時的適當修改。最好是偵測磁碟錯誤,但 WAL 通訊協定的資料安全性一次需要此選項以進行即時而不是在延後的方式。內 WAL 參數,AWR 技術無法帳戶的情況下,記錄檔寫入失敗,因為磁區錯誤,但該磁碟機已滿。資料庫引擎必須立即知道有關失敗可以正確地中止交易,因此系統管理員可警示,並修正以保護資料並更正媒體失敗情況採取的步驟。

資料安全性

有數個資料庫系統管理員確保資料的安全時應採取的預防措施。
  • 它永遠是確定您的備份策略是不足以修復從災難性的失敗是個好主意。離站儲存和其他的預防措施是適當的。
  • 測試在次要資料庫還原操作或定期的測試資料庫。
  • 請確定任何快取的裝置可以處理所有的失敗情況 (電力不穩、 損壞的磁區、 不正確的磁碟機、 系統故障、 鎖定、 電源特殊圖文集,等等)。
  • 請確定您快取的裝置:
    • 已整合電池備份
    • 可以重新簽發寫上電源開啟
    • 您可以完全停用在需要時
    • 處理即時重新對應壞磁區
  • 啟用損毀頁偵測。(這有什麼對效能的影響)。
  • 如果可能的話,請設定 [允許不正確的磁碟機,熱交換的 RAID 磁碟機。
  • 使用較新的快取控制站,可讓您新增更多磁碟空間,而不重新啟動作業系統。這可能是很理想的解決方案。

測試的磁碟機

若要完整保護您的資料,您應該要確定正確地處理所有的資料快取項目。在許多情況下,您必須停用磁碟機的寫入快取。

注意請確定快取機制的替代方案能夠正確地處理多種類型的失敗。

Microsoft 已經執行測試數個 SCSI 和 IDE 磁碟機上使用SQLIOSim公用程式。這個公用程式會模擬沈重的非同步讀取/寫入活動,以模擬的資料裝置和記錄裝置。測試效能統計資料會顯示每個 50 和 70 之間的第二個,以停用的寫入快取磁碟機和 5,200 和 7,200 之間的 RPM 範圍的平均寫入作業。

如需有關 「 SQLIOSim 」 公用程式的詳細資訊,請參閱下列文件 「 Microsoft 知識庫 」 中的文:
231619 如何使用 SQLIOSim 公用程式來模擬在磁碟子系統上的 SQL Server 活動
許多電腦製造商會依需要停用寫入快取磁碟機。不過,測試會顯示這可能不一定是大小寫。因此,一定要測試完全。

資料裝置

在所有但非記錄的情況下,SQL Server 會要求只會清除記錄檔資料錄。在執行非記錄作業時,必須也穩定的儲存體 ; 清除資料頁沒有個別的記錄檔記錄來重新產生失敗的動作。

資料頁可以保留在快取中,直到延遲寫入器或檢查點處理程序會清除它們穩定的存放裝置。使用以確定正確地儲存的記錄檔資料錄的 WAL 通訊協定可確保復原可以回復到已知的狀態資料頁。

這不表示最好也能放入快取的磁碟機上的資料檔案。當 SQL Server 排清穩定儲存該資料頁時,可以從交易記錄檔中截斷記錄檔資料錄。如果在 [動態快取會儲存資料的網頁,則可能截斷記錄檔資料錄會用來復原失敗的頁面。請確定您資料和記錄的裝置會正確地容納穩定的存放裝置。

提升效能

就會發生的第一個問題是: 「 我有已快取 IDE 磁碟機。但是當我將它停用,我效能變得比預期更少。為什麼?

許多經過 Microsoft 的 IDE 磁碟機執行轉速速率為 5,200,並在 7,200 的 RPM 的 SCSI 磁碟機。當您停用寫入快取 IDE 磁碟機的機械效能可能會變得因數。

沒有要處理的效能差異的非常清楚區域: 「 地址的交易率 」。

有許多的線上交易處理 (OLTP) 系統需要高交易比率。對於這些系統,請考慮使用的快取控制站,可以正確支援寫入快取與提供的效能提升,同時確保資料完整性。

明顯地會遇到效能的改變與 SQL Server 快取磁碟機,交易率增加使用小型交易。

測試高寫入的緩衝區小於 512 KB 或大於 2 MB 的活動的節目可能會導致效能變慢。
請考慮下列的範例:
CREATE TABLE tblTest ( iID int IDENTITY(1,1), strData char(10))GOSET NOCOUNT ONGOINSERT INTO tblTest VALUES ('Test')WHILE @@IDENTITY < 10000   INSERT INTO tblTest VALUES ('Test')				
SQL Server 的範例測試結果如下:
SCSI(7200 RPM) 84 秒
SCSI(7200 RPM) 15 秒 (快取控制站)

IDE(5200 RPM) 14 秒 (磁碟機快取已啟用)
IDE(5200 RPM) 160 秒

包裝在單一交易中的整個系列的插入作業會在大約四秒鐘內所有組態中執行。

原因是所需的記錄檔清除數目。如果沒有交易,每個插入是交易本身,而且每次必須清除交易記錄檔資料錄。每個排清是 512 個位元組的大小,需要大量的機械磁碟機操作。

使用單一的交易時,可以建立交易記錄檔資料錄,而單一的較大的寫入可用來清除收集的記錄檔資料錄。機械介入的情況下就可以大幅降低。

警告我們建議您不要增加交易範圍。長時間執行的交易可能會導致過度並不想要封鎖,以及增加額外負荷。若要檢視交易記錄檔為基礎計數器使用SQL Server: 資料庫的 SQL Server 效能計數器。具體來說, Flushed 的記錄檔位元組數/秒可以指出導致高機械磁碟活動的許多小型交易。

查看 [清除記錄檔相關聯的陳述式,並決定是否可以減少記錄檔清除數目。在前一個範例中,單一的交易是用來實作。不過,在許多情況下,這可能會導致意外的鎖定行為。檢查在交易的設計。您可以使用類似下列的程式碼來執行批次,以減少經常和小型的記錄檔排清活動:
BEGIN TRANGOINSERT INTO tblTest VALUES ('Test')WHILE @@IDENTITY < 50BEGIN   INSERT INTO tblTest VALUES ('Test')   if(0 = cast(@@IDENTITY as int) % 10)   BEGIN      PRINT 'Commit tran batch'      COMMIT TRAN      BEGIN TRAN   ENDENDGOCOMMIT TRANGO				
SQL Server 需要系統支援"保證傳遞到穩定媒體 」 中所述 SQL Server I/O 可靠性程式檢閱需求 下載文件。 如需有關 SQL Server 資料庫引擎的輸入與輸出需求的詳細資訊,請按一下下面的文章編號,移至 Microsoft 知識庫 」 中的文件:
967576 Microsoft SQL Server 資料庫引擎輸入/輸出需求

警告:本文為自動翻譯

內容

文章識別碼:230785 - 最後檢閱時間:05/17/2015 10:53:00 - 修訂: 1.0

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Standard

  • kbhowto kbinfo kbmt KB230785 KbMtzh
意見反應
//c.microsoft.com/ms.js">