軟件測試中數據倉庫的 RDBMS 性能優化指南

發表于:2010-06-21來源:作者:點擊數: 標簽:軟件測試性能數據倉庫指南
簡介 性能優化的基本原則 優化磁盤 I/O 性能 使用分區來提高性能 查找更多信息 本性能優化指南旨在幫助數據庫管理員和 開發 人員配置 Microsoft SQL Server 2000,以獲得最佳的性能,并幫助找出造成關系數據庫(包括用于數據倉庫的數據庫)性能低下的原因。

簡介

性能優化的基本原則
優化磁盤 I/O 性能
使用分區來提高性能
查找更多信息

本性能優化指南旨在幫助數據庫管理員和開發人員配置 Microsoft® SQL Server 2000,以獲得最佳的性能,并幫助找出造成關系數據庫(包括用于數據倉庫的數據庫)性能低下的原因。本指南還就如何裝載、索引和編寫查詢以訪問 SQL Server 中存儲的數據提供了指導原則和最佳做法。另外還介紹了多種可用于分析性能特征的 SQL Server 工具。

簡介

Microsoft SQL Server 7.0 中引入了一項重大改進:一個在很大程度上可以自行配置、自行優化和自行管理的數據庫引擎。在 SQL Server 7.0 面世之前,大多數數據庫服務器都會耗費數據庫管理員大量的時間和精力,他們必須手動優化服務器配置以獲得最佳性能。實際上,很多競爭性數據庫產品現在仍要求管理員手動配置和優化他們的數據庫服務器。這是許多客戶改用 SQL Server 的主要原因。SQL Server 2000 是在 SQL Server 7.0 奠定的堅實基礎上更上層樓的產品。SQL Server 的目標是:通過實現數據庫引擎自行優化并允許 DBA 自動完成管理任務,使 DBA 不必手動配置和不斷優化數據庫服務器。

盡管現在仍可以手動配置和調整一些 sp_configure 選項,但建議數據庫管理員盡量不要這樣做,而是讓 SQL Server 自動配置和優化。對于這種調整能力,SQL Server 7.0 具有已被廣泛認可且經過實踐證明的成績記錄,SQL Server 2000 對此方案進行了顯著的改進。環境中不斷變化的條件可能會對數據庫性能產生負面影響,所以,讓 SQL Server 自行優化,就可以使數據庫服務器進行動態調整以適應這些變化。

性能優化的基本原則

您可以采取許多措施來管理數據庫的性能。SQL Server 2000 提供了幾種工具來幫助您完成這些任務。

管理性能

  • 讓 SQL Server 完成大多數優化任務。
    SQL Server 2000 經過了重大改進,可以創建基本上能夠進行自動配置和自行優化的數據庫服務器。利用 SQL Server 自動優化設置這一優點,可幫助 SQL Server 即使在用戶負荷和查詢隨時間不斷變化的情況下也能以最高性能運行。

  • 管理 RAM 緩存。
    RAM 是一種有限的資源。任何數據庫服務器環境的一個主要部分就是管理隨機存取存儲器 (RAM) 緩沖區緩存。訪問 RAM 緩存中的數據比訪問磁盤中同樣的信息要快得多。但是,RAM 資源是有限的。如果可以將數據庫 I/O(針對物理磁盤子系統的輸入/輸出操作)減少到最低所需的數據集和索引頁,這些頁將在 RAM 中停留更長時間。如果流入緩沖區緩存的不必要的數據和索引信息過多,會將有價值的頁很快排擠出去。性能優化的主要目標是減少 I/O,以使緩沖區緩存得到最充分的利用。

  • 創建和維護合適的索引。
    對于所有的數據庫查詢,維護最小 I/O 的一個關鍵因素是確保創建和維護合適的索引。

  • 對大數據集和索引進行分區。
    要減少總體 I/O 爭用現象并改善并行操作,請考慮對表數據和索引進行分區。本章介紹了使用 SQL Server 2000 實現和管理分區的多種方法。

  • 監視磁盤 I/O 子系統的性能。
    物理磁盤子系統必須為數據庫服務器提供足夠的 I/O 處理能力,以使數據庫服務器在運行時不會出現磁盤排隊現象。磁盤排隊現象會導致性能不佳。本文介紹了如何檢測磁盤 I/O 問題以及如何解決這些問題。

  • 優化應用程序和查詢。
    當數據庫服務器通過給定的應用程序為來自成百上千個連接的請求提供服務時,這種優化變得尤為重要。由于應用程序通常會確定要在數據庫服務器上執行的 SQL 查詢,所以應用程序開發人員一定要了解 SQL Server 的結構基礎知識以及如何充分利用 SQL Server 的索引來最小化 I/O。

  • 優化活動數據。
    在許多商業智能數據庫中,絕大多數數據庫活動都會涉及最近一個月或一個季度的數據(多達 80% 的數據庫活動都可能是因最近裝載的數據而發生的)。要保持良好的數據庫總體性能,在對這些數據進行裝載、索引和分區時,所采取的方式一定要能夠為這些數據提供最佳的數據訪問性能。

利用 SQL Server 性能工具

  • SQL 事件探查器和索引優化向導
    SQL 事件探查器可用于監視和記錄 SQL Server 的工作負荷。然后,可以將記錄下來的工作負荷可以提交到索引優化向導,這樣,在必要的時候就可以更改索引來幫助提高性能。SQL 事件探查器和索引優化向導可幫助管理員實現優化的索引。定期使用這些工具可使 SQL Server 保持良好的性能,即使查詢工作負荷隨時間而變化也是如此。

  • SQL 查詢分析器和圖形執行計劃
    在 SQL Server 2000 中,SQL 查詢分析器提供了“圖形執行計劃”,使用這種方法可以方便地分析有問題的 SQL 查詢?!敖y計 I/O”是 SQL 查詢分析器的另一個重要功能,本章后面將會進行介紹。

  • 系統監視器對象
    SQL Server 提供了一組系統監視器對象和計數器,可以為監視和分析 SQL Server 的運行狀況提供信息。本章介紹了要監視的關鍵計數器。

影響性能的配置選項

最大異步 IO

SQL Server 7.0 中的手動配置選項最大異步 I/O 在 SQL Server 2000 中已經實現了自動化。以前,最大異步 I/O 用于指定在一次檢查點操作過程中,SQL Server 7.0 可以向 Microsoft Windows NT® 4.0 和 Windows® 2000 同時提交的磁盤 I/O 請求的數量。Windows 接下來又將這些請求提交到物理磁盤子系統。此配置設置實現自動化后,SQL Server 2000 就能夠以動態方式自動維護最佳的 I/O 吞吐量。

注意 Windows 98 不支持異步 I/O,因此在該平臺上不支持最大異步 I/O 選項。

數據庫恢復模型

SQL Server 2000 引入了在數據庫級別對事務記錄方式進行配置的功能。選定的模型會對性能產生很大的影響,尤其是在數據裝載過程中?;謴湍P陀腥N:“完全”、“大容量日志記錄的”和“簡單”。新數據庫的恢復模型是在新數據庫創建時從模型數據庫繼承的。在創建數據庫之后,可以更改它的模型。

  • “完全恢復”可為將數據庫恢復到以前的時間點提供最大的靈活性。
  • “大容量日志記錄的恢復”可為某些大規模操作(例如,創建索引或大容量復制)提供較高的性能并占用較少的日志空間。這種恢復的缺點是與時間點恢復相比不夠靈活。
  • “簡單恢復”提供的性能最高,占用的日志空間最少,但在系統發生故障時丟失數據的風險很大。在使用“簡單恢復”模型時,數據只能恢復到上次(最近一次)進行完全數據庫或差異備份時的狀態。在這一模型中,由于事務在日志中會從檢查點處截斷,因此不能使用事務日志備份來恢復事務。這會產生丟失數據的可能。在不再需要日志空間以從服務器故障(活動事務)進行恢復之后,日志空間就會被截斷并重新使用。

經驗豐富的管理員可以使用這個恢復模型功能來大大加快數據裝載和大容量操作的速度。不過,根據所選模型不同,丟失數據的可能性也各不相同。

重要說明 在選擇某種恢復模型之前,必須仔細考慮會遇到的風險。

每種恢復模型致力于滿足不同的需要。請根據所選的模型權衡利弊。權衡的結果需對性能、空間利用率(磁盤或磁帶)和防范數據丟失的保護措施等方面加以綜合考慮。當您選擇恢復模型時,需要結合以下幾個方面的業務需求作出決定:

  • 大規模操作(例如,創建索引或大容量裝載)的性能
  • 數據丟失的可能性(例如,丟失已提交的事務)
  • 事務日志空間占用大小
  • 備份和恢復過程的難易

根據所執行的操作不同,一種模型可能會比另一種模型更適合。在選擇一種恢復模型之前,請考慮它將帶來的影響。下表提供了一些幫助性信息。

恢復模型 優點 丟失所做工作的可能性 是否恢復到時間點?
簡單 可高性能地完成大容量復制操作。
可回收日志空間,使空間要求保持較低的水平。
自最近的數據庫備份或差異備份以來所做的更改必須重做 可以恢復到任何備份的結束點。此后的更改必須重做。
完全 不會因數據文件丟失或損壞而丟失所做的工作。
可恢復到任意時間點(例如,發生應用程序或用戶錯誤之前的那一刻)。
通常沒有風險。
如果日志受到損壞,則必須重做自最近的日志備份以來所做的更改。
可恢復到任意時間點。
大容量日志記錄的 可高性能地完成大容量復制操作。
大容量操作使用最小的日志空間。
如果日志受到損壞,或者自最近的日志備份以來出現過大容量操作,則必須重做自上次備份以來所做的更改。
除此之外,不會丟失所做的任何工作。
可以恢復到任何備份的結束點。此后所做的更改必須重做。

有關多實例的注意事項

SQL Server 2000 中還引入了在一臺計算機上運行 SQL Server 的多個實例的功能。默認情況下,SQL Server 的每個實例會動態地獲取和釋放內存,以針對實例的工作負荷的變化進行調整。當 SQL Server 2000 有多個實例,而每個實例都獨立地自動調整內存使用量時,性能優化會變得很復雜。大多數高端的業務智能客戶通常只在每臺計算機上安裝一個 SQL Server 實例,因此對于他們來說,通常不需要考慮這項功能。但是,隨著計算機個體變得越來越大(Windows 2000 Datacenter Server 最多支持 64 GB RAM 和 32 個 CPU),在有些生產環境中,可能會出現對多個實例的需求。那些利用擴展內存支持的實例需要特別關注。

擴展內存支持

一般情況下,SQL Server 2000 會根據需要動態地獲取和釋放內存,所以管理員通常不需要指定應該為 SQL Server 分配多少內存。但是,SQL Server 2000 企業版和 SQL Server 2000 開發人員版引入了對使用 Microsoft Windows 2000 Address Windowing Extensions (AWE) 的支持。這樣,SQL Server 2000 就可以對更多的內存進行尋址(對于 Windows 2000 Advanced Server 最多約 8 GB;對于 Windows 2000 Datacenter Server 最多約 64 GB)。在配置了擴展內存的情況下,必須將訪問擴展內存的每個實例配置為靜態分配它將使用的內存。

注意 只有當您運行 Windows 2000 Advanced Server 或 Windows 2000 Datacenter Server 時,才可使用這項功能。

使用 Windows 2000 的注意事項

要利用 AWE 內存,必須使用已分配了 Windows 2000 的“內存中鎖定頁”特權的 Windows 2000 帳戶運行 SQL Server 2000 數據庫引擎。SQL Server 安裝程序將自動授權 MSSQLServer 服務帳戶使用內存中鎖定頁選項。如果您從命令提示符使用 Sqlservr.exe 來啟動 SQL Server 2000 的實例,必須使用 Windows 2000 的“組策略”實用工具 (Gpedit.msc) 將這一權限手動分配給交互操作的用戶帳戶,否則的話,如果 SQL Server 不作為服務運行就將無法使用 AWE 內存。

啟用“內存中鎖定頁”選項

  1. 開始菜單上,單擊運行,然后在打開框中輸入 gpedit.msc。
  2. 組策略樹窗格中,展開計算機配置,然后展開 Windows 設置。
  3. 展開安全性設置,然后展開本地策略。
  4. 選擇用戶權限分配文件夾。
  5. 策略將會顯示在詳細信息窗格中。
  6. 在詳細信息窗格中,雙擊內存中鎖定頁。
  7. 本地安全性策略設置對話框中,單擊添加。
  8. 選擇用戶或組對話框中,添加一個有權運行 Sqlservr.exe 的帳戶。

要使 Windows 2000 Advanced Server 或 Windows 2000 Datacenter Server 能夠支持 4 GB 以上的物理內存,必須將 /pae 參數添加到 Boot.ini 文件中。

對于內存不超過 16 GB 的計算機,您可以在 Boot.ini 文件中使用 /3gb 參數。這就使 Windows 2000 Advanced Server 和 Windows 2000 Datacenter Server 能夠允許用戶應用程序通過 3 GB 的虛擬內存來對擴展內存進行尋址,并且為操作系統本身保留 1 GB 虛擬內存。

如果計算機上的物理內存超過 16 GB,則 Windows 2000 操作系統本身會需要 2 GB 虛擬內存地址空間用于系統開銷。因此,它只能支持將 2 GB 虛擬地址空間用于應用程序開銷。對于物理內存超過 16 GB 的系統,一定要在 Boot.ini 文件中使用 /2gb 參數。

注意 如果您意外使用了 /3gb 參數,Windows 2000 將無法對 16 GB 以上的任何內存進行尋址。

使用 SQL Server 2000 的注意事項

要使 SQL Server 2000 的實例能夠使用 AWE 內存,請使用 sp_configure 來設置啟用 awe 選項。然后,重新啟動 SQL Server 以激活 AWE。由于 AWE 支持會在 SQL Server 啟動過程中啟用,并在 SQL Server 關閉前一直保持啟用狀態,所以,在 AWE 處于使用狀態時,SQL Server 會通過向 SQL Server 錯誤日志發送“已啟用 Address Windowing Extension”消息來通知用戶。

當您啟用 AWE 內存時,SQL Server 2000 的實例不會動態管理地址空間的大小。因此,當您啟用 AWE 內存并啟動 SQL Server 2000 的實例時,根據最大服務器內存的設置方式不同,會出現下列情況之一。

  • 如果已經設置了最大服務器內存并且計算機上至少有 3 GB 可用內存,則該實例獲取在最大服務器內存中指定的內存量。如果計算機上可用的內存量小于最大服務器內存(但是大于 3 GB),則該實例獲取幾乎所有的可用內存,并且可能最多只留下 128 MB 可用內存。
  • 如果尚未設置最大服務器內存并且計算機上至少有 3 GB 可用內存,則該實例幾乎獲取所有的可用內存,并且可能最多只留下 128 MB 可用內存。
  • 如果計算機上的可用內存不足 3 GB 而且內存是動態分配的,則無論為啟用 awe 設置了什么參數,SQL Server 都將以非 AWE 模式運行。

當在 32 GB 系統上分配 SQL Server AWE 內存時,Windows 2000 可能至少需要 1 GB 可用內存來管理 AWE。因此,如果在啟動 SQL Server 的實例時已啟用了 AWE,建議您不要使用默認的最大服務器內存設置,而應將它限制在 31 GB 或更小。

有關故障轉移群集和多實例的注意事項

如果您在使用 AWE 內存的同時使用 SQL Server 2000 故障轉移群集或者運行多個實例,則必須確保正在運行的所有 SQL Server 實例的最大服務器內存設置的值的總和小于可用的物理 RAM 量。對于故障轉移,您必須考慮任何候選存活節點上物理 RAM 的最小量。如果故障轉移節點上的物理內存比初始節點上的少,則 SQL Server 2000 的實例可能無法啟動或者啟動時用的內存比其在初始節點上的少。

sp_configure 選項

“并行度的成本閾值”選項

使用并行度的成本閾值選項可指定 SQL Server 創建和執行并行計劃所用的閾值。只有當為同一個查詢執行串行計劃的預計成本高于在并行度的成本閾值中設置的值時,SQL Server 才為查詢創建和執行并行計劃。成本是指對特定的硬件配置執行串行計劃時預計需要的時間(以秒為單位)。只針對對稱多處理器 (SMP) 設置并行度的成本閾值。

通常,并行計劃對較長的查詢有利;性能上的優勢可以補償初始化、同步以及終止計劃所需的額外時間。在混合執行短查詢和長查詢時,通常會使用并行度的成本閾值選項。短查詢執行串行計劃,而長查詢使用并行計劃。并行度的成本閾值的值決定哪些查詢被視為短查詢,從而只執行串行計劃。

在有些情況下,即使查詢的成本計劃小于當前的并行度的成本閾值值,也可以選擇并行計劃。這是因為就并行度的成本閾值而言,使用并行計劃還是串行計劃要根據完全優化完成之前提供的預計成本來決定。

并行度的成本閾值選項可以設置為從 0 到 32767 的任何值。默認值是 5(以毫秒為單位)。如果計算機只有一個處理器,或者如果由于關系掩碼配置選項的值而使得 SQL Server 只能使用一個 CPU,或者如果最大并行度選項設置為 1,那么,SQL Server 會忽略并行度的成本閾值。

“最大并行度”選項

最大并行度選項用于限制在執行并行計劃時使用的處理器數(最多 32 個)。默認值是 0,此時使用可用的實際數量的 CPU。將最大并行度選項設置為 1 可強制取消生成并行計劃。如果將該值設置為大于 1 的數字,則可以限制在執行單個查詢時使用的最大處理器數。如果將該值指定為大于可用 CPU 數量的數字,則使用可用的實際數量的 CPU。

注意 如果未將關系掩碼選項設成默認值,則在對稱多處理器 (SMP) 系統上可供 SQL Server 使用的 CPU 數可能會受到限制。

對于在 SMP 計算機上運行的服務器,很少改變最大并行度。如果計算機只有一個處理器,則會忽略最大并行度值。

“優先級提升”選項

優先級提升選項用于指定 SQL Server 是否應當以高于同一臺計算機上其他進程的調度優先級運行。如果將該選項設置為 1,SQL Server 將在 Windows 調度程序中按照 13 的優先級基數運行。默認值是 0,表示優先級基數 7。優先級提升選項只應當用在 SQL Server 專用且具有 SMP 配置的計算機上。

注意 如果將優先級提升得太高,則可能會使基本操作系統和網絡功能的資源不足,從而造成關閉 SQL Server 或使用服務器上的其他 Windows 任務等問題。

在某些情況下,如果將優先級提升設置為默認值以外的任何值,可能會導致在 SQL Server 錯誤日志中記錄以下通訊錯誤:

Error: 17824, Severity: 10, State: 0 Unable to write to ListenOn
connection '<servername>', loginname '<login ID>', hostname '<hostname>'
OS Error: 64, The specified.network name is no longer available.

錯誤 17824 指出在嘗試寫入客戶端時 SQL Server 遇到連接問題。如果客戶端已停止響應,或者客戶端已經重新啟動,則這些通訊問題可能是由網絡問題引起的。但是,錯誤 17824 不一定表示網絡問題,而可能只是設置優先級提升選項的結果。

“設置工作集大小”選項

設置工作集大小選項用于為 SQL Server 保留等于服務器內存設置的物理內存空間。服務器內存設置由 SQL Server 根據工作負荷和可用資源自動配置。它將在最小服務器內存最大服務器內存之間顯著變化。設置設置工作集大小的意思是:即使在 SQL Server 空閑時,另一個進程可以更容易地使用 SQL Server 頁,操作系統也不嘗試換出這些頁。

如果您要允許 SQL Server 動態使用內存,請不要設置設置工作集大小。在將設置工作集大小設置為 1 之前,請將最小服務器內存最大服務器內存設置為同一個值(希望 SQL Server 使用的內存量)。

輕量池關系掩碼選項將在本章后面的“要監視的關鍵性能計數器”一節討論。

優化磁盤 I/O 性能

如果您配置的 SQL Server 將只包含幾 GB 數據,而且不負擔繁重的讀寫活動,可以不必考慮磁盤 I/O 以及通過平衡硬盤驅動器間的 SQL Server I/O 活動來實現最大性能等事項。但是,要創建大型 SQL Server 數據庫來包含數百 GB 甚至 TB 的數據,并且/或者要能夠負擔繁重的讀/寫活動,則有必要進行相應的配置,以平衡多個硬盤驅動器間的負載,從而最大程度地提高 SQL Server 的磁盤 I/O 性能。

優化傳輸速度

對于數據庫性能優化來說,最重要的方面之一就是優化 I/O 性能。當然,SQL Server 也不例外。除非運行 SQL Server 的計算機有足夠的 RAM 來容納整個數據庫,否則 I/O 性能將由磁盤 I/O 子系統處理 SQL Server 讀寫數據的速度來確定。

因為傳輸速度、I/O 吞吐量和可能影響 I/O 性能的其他因素不斷改善,所以我們將不針對應當從存儲系統中期望看到哪種速度給出具體數字。為了更好地理解可期望獲得的性能,建議您與首選的硬件供應商協作確定期望的最優性能。

我們必須要強調的是順序 I/O 操作(通常又稱為“序列”或“按磁盤順序”)與非順序 I/O 操作之間的差異。我們還希望大家注意預讀可能對 I/O 操作產生的顯著影響。

順序和非順序磁盤 I/O 操作

有必要解釋以下這些術語相對于磁盤驅動器的含義。通常,一個硬盤驅動器由一組驅動器盤片組成。每個盤片都提供用于讀取/寫入操作的表面。一組帶有讀取/寫入磁頭的臂用于在這些盤片之間移動,并且從盤片的表面讀取數據或者向其中寫入數據。就 SQL Server 而言,有關硬盤驅動器的以下兩點很重要,需要記住。

第一,讀取/寫入磁頭和相關的磁盤臂需要移動,以定位到 SQL Server 請求的硬盤驅動器盤片上的位置并針對其進行操作。如果數據不按位置順序分布到硬盤驅動器盤片上,則硬盤驅動器需要花更多的時間來移動磁盤臂(尋道時間)和旋轉讀/寫頭(旋轉滯后時間)來找到數據。這與按位置順序分布時的情形完全不同,在該情況下,所需的全部數據都位于硬盤驅動器盤片的一個連續物理扇區上,因此磁盤臂和讀取/寫入磁頭在執行所需的磁盤 I/O 時移動量很少。

非順序和順序情形的時間相差很大:每次非順序尋道大約花費 50 毫秒,而順序尋道則大約需要兩三毫秒。請注意,這些時間是大致估計值,并且將根據以下因素而有所變化:非順序數據在磁盤上的分布距離、硬盤盤片可以旋轉的速度 (RPM) 以及硬盤驅動器的其他物理屬性。主要的一點是順序 I/O 有助于提高性能,而非順序 I/O 會降低性能。

第二,一定要記住,讀寫 8 KB 與讀寫 64 KB 所需的時間幾乎一樣多。在 8 KB 到大約 64 KB 的范圍內,磁盤臂以及讀/寫頭的移動(尋道時間和旋轉滯后時間)仍然占一次磁盤 I/O 傳輸操作所需時間的大部分。因此,從數學角度講,在需要傳輸 64 KB 以上的 SQL Server 數據時,因為 64 KB 與 8 KB 的傳輸速度基本上一樣,但每次傳輸所處理的 SQL Server 數據卻是后者的 8 倍,所以最好嘗試盡可能多地執行 64 KB 磁盤傳輸操作。請記住,預讀管理器在 64 KB 區塊(稱作 SQL Server 擴展盤區)中執行它的磁盤操作。日志管理器也以較大的 I/O 大小執行順序寫入。要記住的主要一點是,如果充分利用預讀管理器并將 SQL Server 日志文件與不按順序訪問的其他文件分開,會改善 SQL Server 性能。

根據經驗,大多數硬盤驅動器處理順序 I/O 操作時所提供的性能是處理非順序 I/O 操作時的 2 倍。即,需要非順序 I/O 的操作所花費的時間是執行順序 I/O 操作的兩倍。因此,要盡可能避免可能導致數據庫中出現隨機 I/O 的情況。雖然應當盡量按順序執行 I/O 操作,但是像頁拆分或者數據無序這樣的情形還是可能會導致出現非順序 I/O。

為了促使執行順序 I/O,一定要避免出現導致頁拆分的情形。設計一個精心安排的數據裝載策略也會有所幫助。您可以通過利用可分隔數據和索引的分區策略來促使在磁盤上按順序分布數據。一定要設置作業以定期檢查數據和索引中是否有碎片,并且在數據碎片太多時,使用 SQL Server 隨付的實用工具來對數據重新排序。有關執行這些操作的更多信息將在本章的稍后部分介紹。

注意 因為事務日志數據總是以不超過 32 KB 的大小按順序寫入日志文件中,所以日志通常不是主要的考慮事項。

RAID

RAID(廉價磁盤冗余陣列)是一種存儲技術,通常用于大于幾 GB 的數據庫。RAID 既具有性能優點又具有容錯優點。多個 RAID 控制器和磁盤配置會在成本、性能和容錯之間提供平衡。本主題簡單介紹了將 RAID 技術用于 SQL Server 數據庫的情況,并討論了各種配置以及平衡方案。

  • 性能。硬件 RAID 控制器將從 Windows NT 4.0 與 Windows 2000 和應用程序(例如 SQL Server)中讀取/寫入的所有數據劃分為很多切片(通常是 16–128 KB),這些切片隨后會分布到所有參與 RAID 陣列的磁盤上。按這種方式將數據拆散到各個物理驅動器上會有這樣的效果:讀取/寫入 I/O 工作負荷會平均分布到所有參與 RAID 陣列的物理硬盤驅動器上。這樣就會提高磁盤 I/O 性能,因為參與 RAID 陣列的硬盤在總體上保持相同程度的閑忙,而不會因 I/O 請求分布不均而導致某些磁盤成為瓶頸。
  • 容錯。 RAID 還通過使用鏡像和奇偶校驗這兩種方法來防止硬盤出現故障并因此造成數據丟失。

鏡像通過將信息寫入另一組(鏡像)驅動器上來實現。如果在有鏡像時丟失了驅動器,則可以通過更換有故障的驅動器并重建鏡像集來重建丟失驅動器上的數據。大多數 RAID 控制器都會提供在 Windows NT 4.0 和 Windows 2000 以及 SQL Server 聯機的情況下更換故障驅動器并重新鏡像的功能。這樣的 RAID 系統通常被稱作能夠“熱插拔”的驅動器。

鏡像有一個優點:如果需要容錯,它所實現的性能是 RAID 選項中最佳的。請切記,SQL Server 每次寫入鏡像集時,都會執行兩個磁盤 I/O 操作,對于鏡像集的每一面各執行一個這樣的操作。另一個優點是:進行鏡像比實現奇偶校驗 RAID 提供的容錯更多。鏡像能夠使系統在至少一個驅動器發生故障后繼續運行,而且,在鏡像集中多達半數的驅動器都有故障的情況下,也許還能夠支持系統,而不是強制系統管理員關閉服務器并從文件備份中恢復。

鏡像的缺點是成本高。鏡像的磁盤成本是:每個需要用來存放數據的驅動器都額外需要一個驅動器。這實際上就會使存儲成本增加一倍,對于數據倉庫來說,存儲器通常是所需的最昂貴的組件之一。RAID 1 及其混合 RAID 0+1(有時稱作 RAID 10 或 0/1)都是通過鏡像實現的。

奇偶校驗是這樣實現的:計算有關寫入磁盤的數據的恢復信息,然后將該奇偶校驗信息寫入構成 RAID 陣列的其他驅動器。如果某個驅動器發生故障,一個新驅動器就會插入 RAID 陣列,并通過提取寫入其他驅動器上的恢復信息(奇偶校驗),使用這些信息重新生成故障驅動器上的數據,從而恢復故障驅動器上的數據。RAID 5 及其混合通過奇偶校驗實現。

奇偶校驗的優點是成本低。要用 RAID 5 保護任意數量的驅動器,只需要另外增加一個驅動器。奇偶校驗信息會均勻分布在參與 RAID 5 陣列的所有驅動器上。奇偶校驗的缺點是性能和容錯能力。由于在計算和寫入奇偶校驗時會額外帶來成本,因此 RAID 5 對于每次寫入都需要四個磁盤 I/O 操作,而鏡像只需兩個磁盤 I/O 操作。鏡像和奇偶校驗的讀取 I/O 操作成本是相同的。但是,讀取操作通常會發生在有故障的驅動器上,此后,必須將陣列脫機,而且必須從備份介質中執行恢復,以恢復數據。

一般經驗:一定要在所需的任意多個磁盤上進行條帶化,以實現可靠的磁盤 I/O 性能。系統監視器將會指出在特定的 RAID 陣列上是否存在磁盤 I/O 瓶頸。請準備根據需要添加磁盤,并將數據重新分布到 RAID 陣列和/或小型計算機系統接口 (SCSI) 通道中,以平衡磁盤 I/O 并最大限度地提高性能。

硬件 RAID 控制器板載緩存的效果

許多硬件 RAID 控制器都有某種形式的讀取和/或寫入緩存。對 SQL Server 來說,這種可用的緩存功能可以顯著增強磁盤子系統高效處理 I/O 的能力。這些基于控制器的緩存機制的原理是:收集來自主機服務器 (SQL Server) 的較小的并且有可能是非順序的 I/O 請求,然后嘗試在幾毫秒內將它們與其他 I/O 請求合成一批,這樣,成批的 I/O 就可以形成較大 (32–128 KB) 并且有可能是順序 I/O 請求,以便發送到硬盤驅動器。

按順序的和較大的 I/O 請求有利于提高性能,請遵循這一原則,因為在硬盤驅動器能夠向 RAID 控制器提供固定數量 I/O 的情況下,這樣有助于產生更大的磁盤 I/O 吞吐量。硬盤每秒能夠處理更多的 I/O,并不是 RAID 控制器的緩存功能有多么神奇,而是因為 RAID 控制器緩存使用了某種組織方式來排列傳入的 I/O 請求,從而能夠盡可能充分地利用好基礎硬盤固定的 I/O 處理能力。

這些 RAID 控制器通常用某種形式的后備電源來保護它們的緩存機制。這種后備電源可以幫助在斷電時,將寫入緩存中的數據保留一段時間(可能是幾天)。如果數據庫服務器也由不間斷電源 (UPS) 支持,在斷電時,RAID 控制器會有更多的時間和機會將數據刷新到磁盤中。雖然服務器的 UPS 不直接影響性能,但它的確可以為 RAID 控制器緩存所提供的性能改進提供保護。

RAID 級別

如上所述,在 RAID 的各個級別中,RAID 1 和 RAID 0+1 提供最佳的數據保護和最佳性能,但是就所需的磁盤而言會需要更多的成本。當硬盤成本不是限制因素時,就兼顧性能和容錯而言,RAID 1 或 RAID 0+1 是最佳選擇。

RAID 5 的成本比 RAID 1 或 RAID 0+1 低,但是它提供的容錯和寫入性能較差。RAID 5 的寫入性能大約只是 RAID 1 或 RAID 0+1 的一半,這是因為 RAID 5 讀取和寫入奇偶校驗信息需要額外的 I/O。

使用 RAID 0 可實現最佳磁盤 I/O 性能(磁盤條帶化沒有容錯保護)。因為 RAID 0 不提供容錯保護,所以決不應當將它用在生產環境中,也不建議將它用在開發環境中。RAID 0 通常只用于基準檢驗或測試。

許多 RAID 陣列控制器都通過物理硬盤驅動器提供 RAID 0+1(又稱作 RAID 1/0 和 RAID 10)選項。RAID 0+1 是一種混合 RAID 解決方案。在較低級別,該控制器像普通的 RAID 1 那樣鏡像所有的數據。在較高級別,它(像 RAID 0 一樣)將數據條帶化到所有的驅動器上。因此,RAID 0+1 提供最大的保護(鏡像)和高性能(條帶化)。因為這些條帶化和鏡像操作由 RAID 控制器進行管理,所以它們對于 Windows 和 SQL Server 是透明的。RAID 1 和 RAID 0+1 之間的區別在硬件控制器級別上。對于給定的存儲量,RAID 1 和 RAID 0+1 需要相同數量的驅動器。有關以 RAID 0+1 方式實現特定 RAID 控制器的更多信息,請與生產該控制器的硬件供應商聯系。

下面的插圖顯示了 RAID 0、RAID 1、RAID 5 和 RAID 0+1 之間的區別。


如果您的瀏覽器不支持嵌入式框架,請單擊此處在單獨的頁中查看。

注意 在上面的插圖中,為了容納相當于四個磁盤的數據,RAID 1(和 RAID 0+1)需要八個磁盤,而 Raid 5 只需要五個磁盤。一定要咨詢您的存儲器供應商,以了解有關他們特定的 RAID 實現的更多信息。

0 級

因為該級別使用名為條帶集的磁盤文件系統,所以又將它稱作磁盤條帶。數據被劃分成多個塊并按固定順序分布到陣列中的所有磁盤上。RAID 0 將多個操作分布到多個磁盤上,以便可以同時獨立地執行這些操作,從而改善了讀取/寫入性能。RAID 0 類似于 RAID 5,但是 RAID 5 還提供容錯功能。

下面的插圖顯示的是 RAID 0。

raid0

1 級

因為該級別使用名為鏡像集的磁盤文件系統,所以又將它稱作磁盤鏡像。磁盤鏡像可提供一個與所選磁盤完全相同的冗余副本。寫入主磁盤的所有數據都會寫入鏡像磁盤。RAID 1 提供了容錯功能,而且通??梢愿倪M讀取性能(但是可能會降低寫入性能)。下面的插圖顯示的是 RAID 1。

raid1

2 級

該級別通過使用將奇偶校驗分布到所有磁盤上的糾錯方法來添加冗余。它還利用磁盤條帶策略將一個文件分成多個字節并將該文件分布到多個磁盤上。與鏡像 (RAID 1) 相比,該策略在磁盤利用率和讀取/寫入性能方面只帶來了很小的改進。RAID 2 不如其他 RAID 級別效率高,通常不使用它。

3 級

該級別使用與 RAID 2 相同的條帶化方法,但是糾錯方法只需一個磁盤用于奇偶校驗數據。磁盤空間的使用情況因數據磁盤的數量而異。RAID 3 在讀取/寫入性能方面提供一些改進。RAID 3 也極少使用。

4 級

該級別使用的條帶數據塊或段比 RAID 2 或 RAID 3 大得多。與 RAID 3 一樣,糾錯方法只需一個磁盤用于奇偶校驗數據。它將用戶數據與糾錯數據分開。RAID 4 不如其他 RAID 級別效率高,通常不使用。

5 級

該級別又稱作具有奇偶校驗的條帶化,它是新設計中最常用的策略。與 RAID 4 相似,它將數據以大塊形式條帶化到陣列中的磁盤上。不同之處在于它在所有磁盤之間寫入奇偶校驗的方式。數據冗余通過奇偶校驗信息提供。數據和奇偶校驗信息會在磁盤陣列上排列,所以這兩種信息總是位于不同的磁盤上。與磁盤鏡像 (RAID 1) 相比,具有奇偶校驗的條帶化可提供更好的性能。但是,當條帶成員丟失時(例如,當磁盤發生故障時),讀取性能會下降。RAID 5 是最常用的 RAID 配置之一。下面的插圖顯示的是 RAID 5。

raid5

Level 10 (1+0)

該級別又稱作具有條帶化的鏡像。該級別使用條帶化的磁盤陣列,而該陣列又鏡像到另一組相同的條帶化磁盤。例如,可使用四個磁盤創建一個條帶化的陣列。然后,條帶化的磁盤陣列使用另一組(四個)條帶化的磁盤進行鏡像。RAID 10 提供磁盤條帶化帶來的性能益處以及鏡像帶來的磁盤冗余。在所有的 RAID 級別中,RAID 10 提供的讀取/寫入性能最高,代價是使用的磁盤數量是其他級別的兩倍。下面的插圖顯示的是 RAID 10。


如果您的瀏覽器不支持嵌入式框架,請單擊此處在單獨的頁中查看。

聯機 RAID 擴展

使用該功能可以在 SQL Server 保持聯機的情況下動態地給物理 RAID 陣列添加磁盤。增加的磁盤驅動器會自動集成到 RAID 存儲器中。添加磁盤驅動器的方法是:將它們安裝到被稱為熱插拔驅動器插槽或熱插拔插槽的物理位置。許多硬件供應商都提供了能夠實現該功能的硬件 RAID 控制器。數據會均勻地在所有驅動器(包括新添加的驅動器)之間均勻地重新進行條帶化,而且不需要關閉 SQL Server 或 Windows。

您可以通過在磁盤陣列盒中的熱插拔插槽中保留空位來利用該功能。如果 SQL Server 經常因 I/O 請求而使 RAID 陣列負擔過重(這可以由與該 RAID 陣列相關聯的 Windows 邏輯驅動器盤符的磁盤隊列長度來指示),則可能需要在 SQL Server 仍在運行時,將一個或多個新的硬盤驅動器安裝到熱插拔插槽中。RAID 控制器會將一些現有的 SQL Server 數據移到這些新驅動器上,以便數據均勻地分布到 RAID 陣列中的所有驅動器上。然后,新驅動器的 I/O 處理能力(每個驅動器每秒 75 個非順序/150 個順序 I/O)會添加到 RAID 陣列的總體 I/O 處理能力中。

系統監視器和 RAID

在系統監視器(在 Microsoft Windows NT® 4.0 中為性能監視器)中,可以獲取邏輯磁盤驅動器和物理磁盤驅動器的信息。邏輯磁盤和物理磁盤的區別在于,在系統監視器中,邏輯磁盤與 Windows 讀作邏輯驅動器盤符的內容相關聯,物理磁盤與 Windows 讀作一個物理硬盤的內容相關聯。

在 Windows NT 4.0 中,默認情況下,性能監視器的所有磁盤計數器都是處于關閉狀態的,因為它們可能會對性能略有影響。在 Windows 2000 中,默認情況下,物理磁盤計數器處于打開狀態,邏輯磁盤計數器處于關閉狀態。Diskperf.exe 是一個 Windows 命令,它控制可在系統監視器中查看的計數器的類型。

在 Windows 2000 中,要獲取邏輯驅動器或存儲卷的性能計數器數據,您必須在命令提示符下鍵入 diskperf -yv,然后按 Enter 鍵。這會導致用于收集磁盤性能數據的磁盤性能統計驅動程序報告邏輯驅動器或存儲卷的數據。在默認情況下,操作系統使用 diskperf -yd 命令來獲取物理驅動器的數據。

在 Windows 2000 中,Diskperf.exe 的語法如下所示:

diskperf [-y[d|v] | -n[d|v]] [\\computername]

參數

(none)

報告磁盤性能計數器是否處于啟用狀態并標識啟用的計數器。

-y

將系統設置為在計算機重新啟動時啟動所有的磁盤性能計數器。

-yd

在計算機重新啟動時啟用物理驅動器的磁盤性能計數器。

-yv

在計算機重新啟動時啟用邏輯驅動器或存儲卷的磁盤性能計數器。

-n

將系統設置為在計算機重新啟動時禁用所有的磁盤性能計數器。

-nd

禁用物理驅動器的磁盤性能計數器。

-nv

禁用邏輯驅動器的磁盤性能計數器。

\\computername

指定要查看或設置要使用的磁盤性能計數器的計算機。

在 Windows NT 4.0 和更低版本中,diskperf –y 用于監視不使用 Windows NT 軟件 RAID 的硬盤驅動器或者硬盤驅動器與 RAID 控制器的集和。在使用 Windows 軟件 RAID 時,請使用 diskperf –ye,以便系統監視器將在 Windows NT 條帶集之間正確地報告物理計數器。當結合使用 diskperf –ye 和 Windows NT 條帶集時,邏輯計數器所報告的信息將不正確并且應當被忽略。如果必須將邏輯磁盤計數器信息與 Windows NT 條帶集結合使用,請使用 diskperf –y。

在使用 diskperf –y 時,邏輯磁盤計數器會被正確地報告給 Windows NT 條帶集,但是物理磁盤計數器所報告的信息將不正確并且應當被忽略。

注意 diskperf 命令要在重新啟動了 Windows 之后才會起作用(Windows 2000 和 Windows NT 4.0 及更低版本均是如此)。

有關監視硬件 RAID 的注意事項

因為 RAID 控制器將多個物理硬盤驅動器作為一個 RAID 鏡像集或條帶集提供給 Windows,所以 Windows 就會像讀取一個物理磁盤那樣讀取該分組。實際底層硬盤驅動器活動的最終抽象視圖會導致性能計數器報告可能會起誤導作用的信息。

從優化性能的角度看,知道一個 RAID 陣列關聯了多少物理硬盤驅動器是很重要的。在確定 Windows 和 SQL Server 發送給每個物理硬盤驅動器的磁盤 I/O 請求數時,將需要此信息。將系統監視器報告為與某個硬盤驅動器相關聯的磁盤 I/O 請求數除以該 RAID 陣列中已知的實際物理硬盤驅動器數。

要粗略估計 RAID 陣列中每個硬盤驅動器的 I/O 活動,一定還要將系統監視器報告的磁盤寫入 I/O 數乘以 2(RAID 1 和 0+1)或 4 (RAID 5)。這將更精確地給出發送到物理硬盤驅動器的實際 I/O 請求數,因為正是在這個物理級別應用硬盤驅動器的 I/O 能力。但是,當硬盤 RAID 控制器使用緩存功能時,此方法無法精確計算硬盤驅動器 I/O,因為緩存功能會極大地影響對硬盤驅動器進行的直接 I/O。

在監視磁盤活動時,最好將重點關注磁盤隊列,而不是每個磁盤的實際 I/O。磁盤 I/O 的速度取決于驅動器的傳輸速率,而這種速率是無法調整的。除了購買更快或更多的驅動器外,您沒有什么其他措施,所以,關心實際發生的 I/O 量沒有什么意義。但是,您又希望避免出現過多的磁盤隊列。大量的磁盤隊列表明您的 I/O 有問題。因為 Windows 不能讀取 RAID 陣列中物理驅動器的數量,所以很難精確估計每個物理磁盤的磁盤隊列。通過將磁盤隊列長度除以參與所觀察的邏輯驅動器的硬件 RAID 磁盤陣列的物理驅動器數,可以確定大致的近似值。對于 SQL Server 文件所在的硬盤驅動器,努力使磁盤隊列數少于兩個,是最理想的。

軟件 RAID

Windows 2000 支持軟件 RAID,在不使用硬件 RAID 控制器時,軟件 RAID 通過操作系統來提供鏡像集和條帶集(具有或不具有容錯功能),從而提供容錯功能。您可以使用操作系統過程來設置 RAID 0、RAID 1 或 RAID 5 功能。多數大型數據倉庫都使用硬件 RAID,但是,如果您的安裝規模相對較小,或者您選擇不實現硬件 RAID,那么,軟件 RAID 可以帶來一些數據訪問和容錯方面的優點。

軟件 RAID 確實會占用一些 CPU 資源,因為 Windows 必須管理通常由硬件 RAID 控制器為您管理的 RAID 操作。因此,在磁盤驅動器數相同的情況下,Windows 軟件 RAID 提供的性能會比硬件 RAID 低幾個百分點,尤其是當系統處理器的使用率因其他目的而接近 100% 時。通過降低 I/O 瓶頸的可能性,與沒有軟件 RAID 時相比,Windows 軟件 RAID 通常將幫助一組驅動器為 SQL Server I/O 提供更好的服務。如果使用軟件 RAID,SQL Server 應該能夠更好地利用 CPU,因為服務器通常等待 I/O 請求完成的時間會減少。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97