SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 記錄和資料儲存體演算法擴充資料可靠性

文章翻譯 文章翻譯
文章編號: 230785 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 重組的結構,然後重新設計來改善資料可靠性和完整性的舊版 Microsoft SQL Server 版本的記錄和資料的演算法。

若要進一步瞭解有關基礎概念的 SQL Server 7.0 和 SQL Server 2000 引擎,請參閱 「 ARIES (修復和隔離 Exploiting 語意演算法): 交易修復方法支援細緻細微性鎖定和部分復原使用預先寫入記錄 」,ACM 交易資料庫系統上。這份文件已由 Chunder Mohan 寫入。

這份文件可以解決擴充資料可靠性和完整性為失敗的相關 SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 的技巧。

建議您閱讀下列的文件 「 Microsoft 知識庫 」 中的進一步釐清快取和其他失敗模式討論區:
86903快取在 SQL Server 中的磁碟控制卡的描述
46091使用硬碟控制器快取與 SQL 伺服器
234656使用 SQL Server 快取磁碟機

其他相關資訊

開始深入討論之前, 條款如用於整個本文部份是在下一節中定義。
摺疊此表格展開此表格
詞彙定義
電池供電 個別且當地語系化電池備份設備直接可用及控制由快取機制以避免資料遺失。
附註這不是的不斷電供電系統 (UPS)。UPS 並不保證任何寫入活動,並可以從快取的裝置中斷連線。
快取 中間的儲存機制,用來最佳化實體 I/O 作業,並改善效能。
Dirty 分頁 包含尚未清除至穩定儲存的資料修改的頁面。輸入關於 Dirty 分頁緩衝區的更多的資訊,請參閱 SQL Server 線上叢書 》 文件]。
失敗 任何項目可能會導致 SQL Server 處理序的意外的中斷。 範例包括: 電源中斷、 電腦重設、 記憶體錯誤、 其他硬體問題、 損毀的磁區、 磁碟機中斷、 OS 失敗等。
排清 您可以強迫快取緩衝區的馬廄儲存體。
閂鎖 用來保護資源的實體一致性的同步處理物件。
靜態暫存的儲存體 跨系統失敗會保持可用任何媒體。
釘選的頁面 保留資料中的快取,並無法清除至穩定的儲存體直到所有相關的記錄檔資料錄的安全穩定的儲存位置中的頁面。
穩定的儲存體 與靜態暫存的儲存體相同。
動態儲存體 將任何媒體 在失敗上保持不變。
SQL Server 2005,SQL Server 2000、 SQL Server 7.0、 較早版本的 SQL Server 和許多主流資料庫產品,市面上的今天使用預先寫入記錄 (WAL) 通訊協定。

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

詞彙通訊協定會是一個很好的方法來描述 WAL。它是一個特定,且以確保資料的必要實作步驟一組已定義為儲存且正確地交換及復原至失敗的已知狀態。就像網路包含已定義的通訊協定,因此以一致且受保護的方式交換資料,WAL 太是否描述通訊協定,以保護資料。

ARIES 文件定義為 WAL:
WAL 通訊協定會判斷提示表示某些資料變更的記錄檔資料錄必須已經是穩定的儲存體來取代前一版的靜態暫存的儲存體中資料允許變更的資料之前。也就是系統不允許寫入未更新的頁面的頁面直到至少靜態暫存的儲存體版本已經寫入記錄檔資料錄,其中描述頁面更新復原部份馬廄儲存體。
如需有關預先寫入記錄的詳細資訊,請參閱 SQL Server 線上叢書 》 文件。

SQL Server,而且 [WAL

SQL Server 2005,SQL Server 2000、 SQL Server 7.0 和舊版 SQL Server 使用 WAL 通訊協定。為了適當 committal 交易的交易相關聯的所有記錄檔資料錄必須受到保護,穩定的儲存區中。

若要釐清這,請考慮下列特定範例,(如本範例假設沒有索引,並影響網頁是網頁 150)。
BEGIN TRANSACTION
   INSERT INTO tblTest VALUES (1)
COMMIT TRANSACTION
				
現在細分活動為簡化記錄步驟執行:
摺疊此表格展開此表格
陳述式執行動作
開始交易 寫入至記錄檔快取區但有就不需要因為 SQL Server 未做任何實體變更穩定的儲存體排清。
INSERT INTO tblTest1 到 SQL Server 資料快取擷取.資料頁 150,如果已經有的話。

2.頁面 latched固定,和 標記為已變更,取得適當的鎖定。

3.的插入記錄檔資料錄是建置,因此新增到記錄檔快取。

4.新列新增到資料頁。

5.閂鎖會被釋放。

6.記錄檔資料錄與交易或相關網頁並不需要因為所有的變更保留在動態儲存體此時清除。
認可交易1.認可記錄檔資料錄會形成而且與交易關聯的記錄檔資料錄必須寫到馬廄儲存。交易不被視為認可直到記錄檔資料錄正確指派給穩定的儲存體。

2.資料頁面 150 仍會保留在 SQL Server 資料快取中,而且不立即清除至穩定的儲存體。當記錄檔資料錄正確保全的復原可以取消復原作業如有必要。

3.交易式鎖定就會釋放。
不應該與混淆鎖定和記錄。雖然重要,鎖定和記錄是不同的問題處理 [WAL 時。在上述範例中 SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 通常按住閂鎖在頁面 150 次執行實體插入變更在頁面上不整個交易的時間所需。適當的鎖定類型建立以保護資料列、 範圍、 頁面或視需要的資料表。請參照 SQL Server 線上叢書 》 的鎖定區段,如需有關鎖定類型的詳細資訊。

查看更多詳細資料中範例,您可能會問延遲寫入器或 CheckPoint 的處理程序執行時,會發生什麼事。SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 發行所有適當排清到馬廄關聯廢棄並已釘選頁的交易記錄檔資料錄的儲存體。如此可確保資料頁可以永遠不會被寫回馬廄存放,直到排清相關聯的交易記錄檔資料錄的 WAL 通訊協定。

SQL Server 且光線穩定的儲存體

SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 加強記錄檔] 和 [資料頁作業包括磁碟磁扇區大小 (通常 512 個位元組) 的知識。

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

SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 使用磁區大小的倍數上的 [8-KB 資料頁和記錄檔 (如果排清)]。(大多數的磁碟機作為預設的磁區大小使用 512 個位元組)。在失敗的情況下 SQL Server 可以帳戶寫入作業大於磁扇區藉由採用記錄同位檢查及損毀的寫入技巧。

損毀的頁偵測

下一節,來自於您在 SQL Server 7.0 線上叢書 》 描述損毀的頁偵測:
此選項可讓 SQL Server,以偵測電源失敗或其他系統中斷所造成的未完成 I/O 作業。當此選項為 true 時, 它會導致每當寫入頁面時,翻轉 8 千位元組 (KB) 資料庫頁面中的每個 512 位元組磁扇區的一個位元到磁碟。如果位元處於錯誤狀態稍後頁面時讀取的 SQL Server,然後頁面已寫入不正確 ; 偵測到損毀的頁。在復原期間通常偵測損毀的頁面,因為不正確地寫入任何頁面有可能讀取的修復。

雖然 SQL Server 資料庫分頁是 8 KB,磁碟執行使用 512 位元組磁區的 I/O 作業。因此,16 磁扇區寫入每個資料庫頁面。如果系統無法 (比方說因為電源失敗) 作業系統寫入至磁碟第一的 512 位元組磁扇區的時間和 8 KB I/O 作業完成之間,就可能發生損毀的頁。如果資料庫頁面的第一個磁區成功寫入失敗前,磁碟上的 [資料庫] 頁面會顯示的方式更新,雖然可能不具有成功。

使用電池供電磁碟控制器的快取資料成功地寫入至磁碟或不可以確保在所有寫入。在這種情況下就不需要針對執行動作不組損壞頁偵測為 true。
附註在 SQL Server 7.0 中預設未啟用損毀的頁偵測。請參閱 sp_dboption 如何啟用您的系統上偵測。

記錄檔同位檢查

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

所做的變更甚至透過先前版本的 SQL Server 提供增加的資料的一致性。

SQL Server 的版本早於 7.0

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

效能的影響

所有版本的 SQL Server 都開啟記錄檔] 及 [資料檔案使用 Win32 CreateFile 函式。 dwFlagsAndAttributes 成員包括 FILE_FLAG_WRITE_THROUGH 選項開啟 SQL Server 時。
FILE_FLAG_WRITE_THROUGH
指示系統寫透過任何中繼快取,並直接到磁碟。系統仍然可以快取寫入作業,但是無法延遲清除它們。

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

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

進階快取的實作將 FILE_FLAG_WRITE_THROUGH 要求不停用控制器快取,因為它們可以提供則為 True 的控制代碼改寫系統重設、 電源故障或其他失敗點的事件中的功能。

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

磁扇區排序

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

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

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

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

評估資料庫伺服器最佳化效能因素時, 有許多因素?考慮。首先這些考量的是 「 做我的系統允許有效 FILE_FLAG_WRITE_THROUGH 功能嗎? 」

附註您正在使用 必須 完全任何快取支援電池供電的解決方案。所有其他快取機制是可疑資料損毀及資料遺失。SQL Server 可確保 [WAL 藉由啟用 FILE_FLAG_WRITE_THROUGH 努力。

測試顯示很多的磁碟機組態可能包含寫入快取不適當的電池備份。SCSI、 IDE 和 EIDE 磁碟機利用完整寫入快取。

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

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

寫入快取堆疊

寫入快取堆疊是類似採購磁區。下列定義是直接來自一個前置 IDE 磁碟機製造商的網站:
通常,此模式都會處於作用中。寫入快取模式接受主應用程式寫入的資料緩衝區中直到緩衝區已滿或主機傳送已完成。

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

自動寫入重新配置 (AWR)

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

資料安全

有數個資料庫管理員應該以確保安全的資料採取的預防措施。
  • 永遠是確保您的備份策略是足夠從災難性的失敗中復原是個不錯的作法。離線儲存體和其他的預防措施是適當的。
  • 測試在次要資料庫還原作業或經常為基礎的測試資料庫。
  • 請確定任何快取的裝置可以處理所有的失敗情況 (電源中斷、 損毀的磁區、 不正確的磁碟機、 系統中斷、 lockups、 電源特殊圖文集等)。
  • 請確保您快取的裝置:
    • 已整合電池備份。
    • 可以 reissue 寫入電源。
    • 如果必要,可以被完全停的用。
    • 處理錯誤 re-mapping 即時的磁區。
  • 啟用損毀的頁偵測,而會擁有少許的效能影響。
  • 設定如果可能允許熱交換不正確的磁碟機的 RAID 磁碟機。
  • 使用不需要重新啟動作業系統允許加入更多的磁碟空間的較新快取控制站。這可以是理想的解決方案。

測試磁碟機

完整保護您的資料,您應該確保所有資料快取正確都處理。在許多情況下,這表示您必須停用寫入快取的磁碟機。

附註請確定替代的快取機制可以適當地處理多個型別的失敗。

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

如需詳細資訊和 SQLIOStress 公用程式的詳細資料,請參閱下列的 「 Microsoft 知識庫 」 中的文件:
231619如何使用 「 SQLIOStress 」 公用程式,如 SQL Server 的磁碟子系統的壓力
許多的 PC 製造廠商 (比方說 Compaq,Dell、 閘道、 HP,以及等等) 的順序與停用寫入快取磁碟機。不過,測試這可能不一定是大小寫所以永遠會顯示測試的完全。

資料裝置

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

資料頁可以保留在快取中,直到延遲寫入器或 CheckPoint 程序會清除它們穩定的儲存體。若要確保正確地儲存記錄檔資料錄使用 WAL 通訊協定,可確保修復可以復原成已知狀態的資料頁面。

這並不表示最好是將快取磁碟機上的資料檔案。當 SQL Server 排清資料頁到馬廄儲存體時,可以被從交易記錄檔截斷記錄檔資料錄。如果資料分頁儲存在動態快取,則可能截斷記錄檔資料錄會被用來復原失敗的頁面。請確定資料和記錄裝置適當地容納穩定的儲存體。

增加效能

初始討論時,將發生的問題是: 我有了已快取的 IDE 磁碟機中但時我已它停用我效能變少明顯比預期--為什麼?

許多由 Microsoft 進行測試的 IDE 磁碟機執行的 5,200,一個轉速速率,並在 SCSI 磁碟機的 7,200 轉速在。當您停用寫入 IDE 磁碟機的快取機械效能可能會變得一項因素。

沒有很清楚的區域,以解決效能差異: 址異動率。

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

大幅遇到效能與 SQL 伺服器上所做的變更快取磁碟機,交易率被增加使用小型交易。

測試顯示高寫入活動的小比 512 KB 以上的 2 MB 的緩衝區可能會導致效能變慢。
請參考下列範例:
CREATE TABLE tblTest ( iID int IDENTITY(1,1), strData char(10))
GO

SET NOCOUNT ON
GO

INSERT 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 秒
包裝在單一交易的整個系列的 INSERT 作業會在大約 4 秒在所有組態中執行。

原因是所需的記錄檔排清數。不在交易每個 INSERT 是交易本身,而且每次交易記錄檔的記錄必須被清除。每個排清是 512 個位元組中需要明顯的機械磁碟機介入的大小。

使用單一交易時在一起針對交易記錄檔資料錄,而單一的較大寫入可用來排清蒐集之記錄檔資料錄。機械介入的情況下會大幅降低。

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

查看清除記錄檔相關聯的陳述式,並決定是否縮小的記錄檔排清數。在上述範例中被實作單一交易。不過,在許多案例中這會導致不想要的鎖定行為。查看交易的設計。也許東西像下列的執行批次,以減少經常性和小型記錄清除活動:
BEGIN TRAN
GO

INSERT INTO tblTest VALUES ('Test')
WHILE @@IDENTITY < 50
BEGIN
   INSERT INTO tblTest VALUES ('Test')

   if(0 = cast(@@IDENTITY as int) % 10)
   BEGIN
      PRINT 'Commit tran batch'
      COMMIT TRAN
      BEGIN TRAN
   END
END
GO

COMMIT TRAN
GO
				
SQL Server 6 x 可能不會看到相同的效能影響,從經常與小的交易記錄檔寫入。SQL Server 6 x 重新寫入相同的 2-KB 記錄頁面,因為交易認可。這可以減少大幅相較於 512 位元組磁區界限排清,SQL Server 7.0、 SQL Server 2000 和 SQL Server 2005 中的記錄檔的大小。直接減少記錄檔的大小與相關的機械磁碟機活動量。不過,為上述 SQL Server 6 explained x 演算法可能會公開 (Expose) 認可的交易。
SQL Server 會要求系統,以支援 ‘ 保證傳遞穩定媒體 ’ Microsoft SQL Server Always-On 存放裝置方案檢閱程式] 下所述。 Fo如 SQL Server 資料庫引擎的輸入與輸出需求的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
967576Microsoft SQL Server 資料庫引擎的輸入/輸出需求

屬性

文章編號: 230785 - 上次校閱: 2006年2月9日 - 版次: 5.3
這篇文章中的資訊適用於:
  • 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
關鍵字:?
kbmt kbhowto kbinfo KB230785 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:230785
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com