磁碟 I/O 效能 對資料庫的影響

來源:互聯網
上載者:User
如果將 SQL Server 配置成僅包含幾個千MB (GB) 的資料,且不承擔繁重的讀或寫活動,便沒有太大的必要關注磁碟 I/O 主題,以及在硬碟之間平衡 SQL Server I/O 活動以擷取最佳效能。但是要建立包含成百上千 GB 位元組的資料且/或承擔繁重的讀和/或寫活動的大型 SQL Server 資料庫,就有必要在多個硬碟之間平衡負荷,以配置最佳的 SQL Server 磁碟 I/O 效能。

  標稱的磁碟傳輸率與 SQL Server 的關係

      最佳化資料庫效能最重要的一個方面是調整 I/O 效能。SQL Server 當然也不例外。除非 SQL Server 運行在一台具有足夠大的記憶體可容納整個資料庫的機器上,否則 I/O 效能將由磁碟 I/O 子系統處理 SQL Server 資料讀寫的速度來決定。

      請記住下面的經驗法則:標準的 Wide Ultra SCSI-3 硬碟每秒鐘可為 Windows 和 SQL Server 提供 75 個不連續(隨機)的 I/O 操作和 150 個連續的 I/O 操作。這種硬碟的標稱傳輸率在 40 MB/秒左右。請記住更有可能限制資料庫伺服器的傳輸率是每秒鐘 75/150 I/O,而不是 40 MB/秒。具體演算如下:

  (每秒 75 次隨機 I/O 操作)X(8 KB 傳輸)= 每秒 600 KB

     上面的計算表示如果在給定的硬碟上進行嚴格的隨機讀或寫 SQL Server 操作(單頁讀和寫),有可能該硬碟最高只能達到每秒 600 KB(即每秒 0.6 MB)的處理能力。這比磁碟機標定的每秒 40 MB 的 I/O 處理能力要低得多。SQL Server 背景工作執行緒、Graphical ShowPlan 和 LazyWrtier 執行 8 KB 傳輸量的 I/O。

  (每秒 150 個連續 I/O 操作)X(8 KB 傳輸)= 每秒 1,200 KB

     上面的計算表示如果在給定的硬碟上進行嚴格的連續讀或寫 SQL Server 操作(單頁讀或寫),有可能在該硬碟上達到最高每秒 1,200 KB(即每秒 1.2 MB)的處理能力。

  (每秒 75 個隨機 I/O 操作)X(64 KB 傳輸)= 每秒 4,800 KB (4.8 MB)

  上面的計算表示預讀的最次方案(假定進行的都是隨機 I/O)。請注意即便在完全進行隨機 I/O 的情況下,64 KB 傳輸量仍然可以提供比單頁傳輸率(0.6 和 1.2 MB/s)要好得多的 I/O 磁碟傳輸率 (4.8 MB/s):

  (每秒 150 個連續 I/O 操作)X(64 KB 傳輸)= 每秒 9,600 KB (9.6 MB)

      上面的計算表示如果在給定的硬碟上進行嚴格的連續讀或寫 SQL Server 操作,有可能在該硬碟上達到最高每秒 9.6 MB 的 I/O 處理能力。這比隨機 I/O 的情況要好得多。SQL Server Read-Ahead Manager 以 64 KB 傳輸率執行磁碟 I/O,並試圖安排讀操作,以便連續地(通常也稱為“按磁碟順序”)進行預讀掃描。因為 Read-Ahead Manager 的目的是連續地執行 I/O 操作,而進行頁面分割可能導致擴充盤區的讀取不連續,這就是要消除和防止頁面分割的原因。

  Log Manager 最大可連續地將 32 KB 位元組寫入記錄檔。

  連續和不連續的磁碟 I/O 操作

       連續和不連續這兩個詞在硬碟操作中用得非常多。有必要花一些時間來解釋一下這兩個詞對於硬碟的意義。一個硬碟由一組磁碟機碟片組成。每個磁碟機碟片都通過一組帶讀/寫磁頭的取數臂為讀/寫操作提供服務,這些讀/寫磁頭可以在碟片之間移動,讀取磁碟機碟片中的資訊或者將資料寫入碟片。就 SQL Server 而言,應記住硬碟的兩個重要特性:

      讀/寫磁頭和相關的磁碟取數臂需要移動才能在 SQL Server 和 Windows 所要求的硬碟碟片的位置上進行尋找和操作。如果資料所在的硬碟碟片的位置不連續,硬碟要花多得多的時間才能將磁碟取數臂和讀/寫磁頭移動到所有需要的硬碟碟片位置。如果所需要的資料全部位於硬碟碟片上的連續物理扇區,情況則相反,磁碟取數臂和讀/寫磁頭只需進行很小的移動就能完成所需磁碟 I/O 操作。連續和不連續的情況下所花的時間有很大的差異,每個不連續的資料尋找大約要花 50 毫秒,而連續的資料尋找則只需大約 2-3 毫秒。請注意這些值是粗數量級估計出來的,具體值將取決於不連續的資料在磁碟上分布的疏密、硬碟碟片的旋轉速度 (RPM) 以及硬碟的其它物理屬性。主要要記住的一點是連續 I/O 有益於 SQL Server 效能。

     本文已提到標準的硬碟支援每秒 75 個不連續的 I/O 和每秒 150 個連續的 I/O。要記住的重要一點是讀或寫 8KB 的時間與讀或寫 64 KB的時間幾乎相同。在 8 KB 到 64 KB 範圍之內,單個磁碟 I/O 傳輸操作所花的時間主要是磁碟取數臂和讀/寫磁頭運動的時間。因此,從數學上來講,當需要傳輸 64 KB 以上的 SQL 資料時,儘可能地執行 64 KB 磁碟傳輸是有益的,因為 64 KB 傳輸基本上與 8 KB 傳輸一樣快,而每次傳輸的 SQL Server 資料是 8 KB 傳輸的 8 倍。請記住 Read-Ahead Manager 以 64 KB 位元組片(也稱為 SQL Server 擴充盤區)執行磁碟操作。Log Manager 也以較大的 I/O 傳輸量來執行連續寫操作。要記住的主要事項是充分利用 Read-Ahead Manager,並將 SQL Server 記錄檔與其它非連續存取的檔案分開,以有效提高 SQL Server 的效能。

        想詳細瞭解物理硬碟的讀者可以參考 Compaq 公司的白皮書“Disk Subsystem Performance and Scalability(磁碟子系統效能和延展性)”,其位置將在本文結尾部分的“尋找其它資料”中提到。

  磁碟 I/O 傳輸率/RAID 控制器傳輸率/PCI 匯流排頻寬

      標準的硬碟提供的最大傳輸率是每秒 40 MB 或每秒 75 個不連續磁碟傳輸/150 個連續磁碟傳輸。 標準 RAID 控制器標稱的傳輸率大約為每秒 40 MB 或(非常接近)每秒 2,000 個磁碟傳輸。外圍元件互連 (PCI) 匯流排的標定傳輸率大約為每秒 133 MB 或更高。裝置實際的傳輸率將與標稱的傳輸率不同,但這個問題對於我們此處的討論並不重要。重要的是瞭解如何用這些傳輸率來粗略估算與每個 RAID 控制器相聯的硬碟的數量,以及一個 PCI 匯流排串連多少個磁碟機和 RAID 控制器不至於出現 I/O 瓶頸問題。

      在前面的“標稱的磁碟傳輸率和 SQL Server 的關係”部分,已計算出每秒鐘最多可以從硬碟讀出或寫入硬碟的 SQL Server 資料量為 9.6 MB。假定 RAID 控制器每秒鐘可處理 40 MB,粗略地計算可與一個 RAID 控制器相聯的硬碟數目應為 40 除以 9.6,答案約等於 4。這表示當 SQL Server 只進行 64 KB 的連續 I/O 時,可與一個控制器相聯的磁碟機最多為 4 個。類似地,前面已計算出對於 64 KB 的全部不連續 I/O,從硬碟到控制器的最大資料轉送率為 4.8 MB/秒。40 MB/秒除以 4.8 MB/秒約等於 8。也就是說,在不連續的 64 KB 方案中,與單個控制器相聯的硬碟最多為 8 個。隨機 8 KB 資料轉送方案需要的磁碟機最多。40 除以 0.6 約等於 66,這表示需要 66 個磁碟機才能使進行 100% 隨機 8 KB 讀和寫的 RAID 控制器飽和。這不是實際可行的方案,因為預讀和日誌記錄所使用的傳輸量大於 8 KB,並且 SQL Server 不可能執行 100% 的隨機 I/O。

      另一種計算可與 RAID 控制器相聯的磁碟機的數目的方法是從每秒的磁碟傳輸出發,而不是從每秒的位元組數出發。如果某個硬碟每秒可進行 75 個不連續的(隨機)I/O,理論上 26 個聯在一起的磁碟機每秒鐘可產生 2,000 個不連續的 I/O,足以達到單個 RAID 控制器的最大 I/O 處理能力。另一方面,只需 13 個硬碟聯在一起就能產生每秒 2,000 個連續 I/O,從而使 RAID 控制器以最大輸送量運行,這是因為單個硬碟每秒可以承受 150 個連續 I/O。

      現在來討論 PCI 匯流排。請注意 RAID 控制器和 PCI 匯流排瓶頸沒有與硬碟有關的 I/O 瓶頸常見。但是為便於說明,我們假定與某個 RAID 控制器相聯的一組硬碟足夠忙,以至於每秒有 40 MB 的輸送量通過控制器。下一個問題是“PCI 匯流排上聯多少個 RAID 控制器比較安全,不會引發 PCI 匯流排 I/O 瓶頸問題?”要進行粗略估算,可以用 PCI 匯流排的 I/O 處理容量除以 RAID 控制器的 I/O 處理容量:133 MB/秒除以 40 MB/秒約等於 3,這表示一個 PCI 匯流排上可以聯大約 3 個 RAID 控制器。請注意多數大型伺服器帶有多個 PCI 匯流排,這使得單個伺服器上可以安裝更多的 RAID 控制器。

       這些計算有助於說明組成磁碟 I/O 子系統的各個組件(硬碟、RAID 控制器和 PCI 匯流排)的傳輸率的關係,但不應按字面理解。這是因為這些計算假定全部進行連續資料存取或不連續資料存取,而這在生產資料庫伺服器環境中幾乎是不可能的。實際上,通常既有連續 I/O,也有不連續 I/O,既有 8 KB I/O,也有 64 KB I/O。還有其它因素使得很難準確估算一次通過一組硬碟的 I/O 運算元。RAID 控制器可用的外掛程式讀/寫快取增加了磁碟機組可有效產生的 I/O 數。既然很難準確估算出 SQL Server 環境所需要的 8 KB 和 64 KB I/O 的數,所以同樣也很難估算出所增加的 I/O 數。

  但是我們希望能夠通過這部分讓您瞭解所標定的傳輸率對於 SQL Server 的實際意義。

  RAID

      當縮放超過幾十億位元組資料的資料庫時,對 RAID(廉價冗餘磁碟陣列)技術和它與資料庫效能的關係有一個基本瞭解是很重要的。

  RAID 的優點是:

      效能:硬體 RAID 控制器將 Windows 和應用程式(如 SQL Server)的所有資料讀/寫進行切片(通常為 16-128 KB),這些切片分布在所有參與 RAID 陣列的磁碟中。按類似的方法在物理磁碟機之間拆分資料具有在所有參與 RAID 陣列的物理硬碟之間平均分配讀/寫 I/O 工作負載的效果。這樣可提高磁碟 I/O 的效能,因為作為整體參與 RAID 陣列的硬碟保持同等繁忙程度,而不會使某些磁碟由於 I/O 請求分配的不平均而成為瓶頸。

  容錯: RAID 用兩種方法保護硬碟不出現故障,並防止由於故障而出現資料丟失:鏡像和奇偶資訊。

     “鏡像”通過將資訊寫入兩組磁碟機來實現。鏡像的磁碟機兩側各有一組資訊。如果在使用鏡像時一個磁碟機出現故障,可以置換出現故障的磁碟機,然後從鏡像集的另一側與出現故障的磁碟機對應的磁碟機中重建資料,從而將出現故障的磁碟機中的資料恢複過來。大多數 RAID 控制器可以置換出現故障的磁碟機,並在 Windows 和 SQL Server 聯機時從鏡像磁碟機的另一側重建資料(通常稱為可“熱插拔”的磁碟機)。鏡像的一個優點是當要求容錯時,它是最佳的 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 對於每個 Windows NT/SQL Server 寫操作都需要四個磁碟 I/O 操作,而鏡像則只需要兩個磁碟 I/O 操作。鏡像和同位的讀 I/O 操作的成本相同。而且,在離線以及從備份媒體中恢複資料之前,RAID 5 陣列只能允許有一個磁碟機失敗。

      通用的經驗法則:確保將儘可能多的磁碟條帶化以便達到穩定的磁碟 I/O 效能。Performance Monitor 將顯示某個 RAID 陣列上是否出現磁碟 I/O 瓶頸現象。作好必要的時候添加磁碟並在 RAID 陣列和/或小型電腦系統介面中重新分配資料的準備,以平衡磁碟 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 輸送量。這並不是說 RAID 控制器可以無限地使硬碟每秒鐘處理更多的 I/O,RAID 控制器快取只是使用一些組織來排列輸入的 I/O 請求,從而儘可能好地使用基礎的硬碟定量 I/O 處理能力。

      這些 RAID 控制器通常使用某種形式的備份功能來保護它們的快取機制。備份功能有助於將寫在快取中的資料保留一段時間(可能是數天),以防止停電。並且在生產環境中,通過為伺服器提供充足的不斷電供應系統 (UPS) 保護,使 RAID 控制器具有更多的保護和電源備用時間,以便當伺服器出現斷電的時候,可用它來將資料重新整理到磁碟中,從而加強了資料庫伺服器的保護。

  RAID 層級

  RAID 1 和 RAID 0+1 提供最有效資料保護和最好的 RAID 層級效能,但它需要更多的磁碟。當不限制硬碟的成本時,RAID 1 或 RAID 0+1 是效能和容錯力均最佳的 RAID 選擇。

  RAID 5 用最低的成本來實現容錯,但是只有 RAID 1 和 0+1 一半的寫效能,這是因為 RAID 5 必須讀奇偶資訊,並將奇偶資訊寫入磁碟,從而需要額外的 I/O。RAID 5 的容錯能力不及 RAID 1 和 0+1。

  RAID 0 可實現最好的磁碟 I/O 效能(沒有容錯保護的磁碟條帶化),但是因為 RAID 0 沒有容錯能力,所以這種 RAID 層級通常只能用於開發資料庫伺服器或其它測試環境。

     許多 RAID 陣列控制器在物理硬碟上提供 RAID 0+1 選項(也稱為 RAID 1/0 和 RAID 10)。RAID 0+1 是混合 RAID 解決方案。在較低的層次,它像普通 RAID 1 一樣鏡像所有的資料;在較高的層次,控制器在所有磁碟機中將資料條帶化(像 RAID 0 一樣)。因此,RAID 0+1 在提供最高效能(條帶化)的同時提供最大程度的保護(鏡像)。條帶化和鏡像操作對於 Windows 和 SQL Server 是透明的,因為它們由 RAID 控制器管理。RAID 1 和 RAID 0+1 之間的不同在於硬體控制器的層級。對於s相同的儲存量,RAID 1 和 RAID 0+1 要求同樣多的磁碟機。有關如何在特定的 RAID 控制器上實施 RAID 0+1 的細節,請與生產控制器的硬體廠商聯絡。

  圖 1 說明了 RAID 0、RAID 1、RAID 5 和 RAID 0+1 之間的不同。請注意要容納四個磁碟量的資料,RAID 1(和 RAID 0+1)需要八個磁碟,而 RAID 5 則需要五個磁碟。確保找到正確的硬體廠商,以瞭解在運行資料庫伺服器的特定硬體上實施 RAID 的細節。

  聯機 RAID 擴充

  這是一種十分方便的功能,它使得我們可以在 SQL Server 聯機的時候,將磁碟動態地添加到有熱插拔插槽的物理 RAID 陣列。許多硬體廠商都提供具有這種功能的硬體 RAID 控制器。它自動將所有磁碟機(包括新添加的磁碟機)中的資料重新平均地條帶化,而沒有必要關閉 SQL Server 或 Windows。一個好主意是空出磁碟陣列箱中的熱插拔磁碟機插槽以便使用此功能。因此,如果 SQL Server 通常由於過多的 I/O 請求導致 RAID 陣列負擔過重(這可由與 RAID 陣列相關的 Windows 邏輯磁碟機號的磁碟隊列長度顯示出來),可以在 SQL Server 運行期間在熱插拔插槽中安裝一個或多個新硬碟。RAID 控制器將一些已有的 SQL 資料重新分配到這些新硬碟,以便在 RAID 陣列的所有硬碟中平均分配 SQL 資料。於是,新硬碟的 I/O 處理容量(每個磁碟機每秒 75 個非連續 I/O 或 150 個連續 I/O)就添加到 RAID 陣列的總的 I/O 處理容量中。

  Performance Monitor 和 RAID

  在 Performance Monitor 中,邏輯磁碟對象和物理磁碟對象有效地提供相同的資訊。所不同的是 Performance Monitor 中的邏輯磁碟與 Windows 視為邏輯磁碟機號的磁碟相關。Performance Monitor 中的物理磁碟與 Windows 視為單個物理硬碟的磁碟相關。

  要啟用 Performance Monitor 計數器,在 Windows 命令提示視窗的命令列運行 diskperf.exe 命令。運行“diskperf -y”以便 Performance Monitor 報告邏輯和物理磁碟的數量。它可以在使用硬碟或硬碟組以及 RAID 控制器時有效,而無需使用 Windows NT 軟體 RAID。

  當運用 Windows NT 軟體 RAID 時,應使用“diskperf -ye”以便 Performance Monitor 正確報告 Windows NT 條帶集中的物理計數器。當“diskperf -ye”與 Windows 條帶集結合起來使用時,邏輯計數器無法報告正確的資訊,需將其忽略。如果要求將邏輯磁碟計數資訊與 Windows NT 條帶集結合起來使用,應使用“diskperf -y”命令。將“diskperf -y”和 Windows NT 條帶集結合起來使用,可以正確報告邏輯磁碟的數量,但是物理磁碟計數器將無法報告正確資訊,需將其忽略。

  請注意只有在 Windows NT 重新啟動之後,diskperf 命令才有效。

  還請注意硬體 RAID 控制器將組成單個 RAID 鏡像集或條帶集的多個物理硬碟作為一個物理磁碟呈現給 Windows。磁碟管理器用於使邏輯磁碟機號與單個物理磁碟相關聯,而無需考慮實際有多少個硬碟與 RAID 控制器呈現給它的單個物理硬碟相關聯。

  但是從效能最佳化的角度來看,瞭解與 RAID 陣列相關聯的物理硬碟的數量是十分重要的,因為在確定 Windows 和 SQL Server 發送給每個物理硬碟的磁碟 I/O 請求的數量時需要這一資訊。將 Performance Monitor 所報告的與某個硬碟相關聯的磁碟 I/O 請求的數量除以該 RAID 陣列中已知的實際物理硬碟的數量。

  要粗略估算 RAID 陣列中每個硬碟的 I/O 活動,還有很重要的一點是將 Performance Monitor 所報告的磁碟寫 I/O 的數量乘以 2(RAID 1 和 0+1)或 4 (RAID 5)。這樣將對發送到物理硬碟的實際 I/O 請求給出一個更準確的數量估計,因為硬碟所應用的 I/O 容量數(每個磁碟機 75 個不連續 I/O 和 150 個連續 I/O)處於這個物理層級。但是如果硬體 RAID 控制器使用快取,便不要指望用這種方法可以準確計算出硬碟中的 I/O 數,因為快取可以大大改變硬碟中實際的 I/O 數,其原因已在前面講述過。

  最好的辦法是只關心磁碟隊列,而不關心每個磁碟實際的 I/O,因為歸根到底,如果 I/O 並沒有引發問題,那麼又何必擔心它呢?Windows 無法瞭解 RAID 陣列中的物理磁碟機數量,因此要準確估算每個物理磁碟的磁碟隊列,重要的是用磁碟隊列長度除以包含所考察的邏輯磁碟機的硬體 RAID 磁碟陣列中的物理磁碟機數。對於包含 SQL Server 檔案的硬碟,這個數字不要超過 2。

  有關 SQL Server 和 RAID 的詳細資料,請在 SQL Server Books Online 中搜尋字串“RAID Levels and SQL Server”、“Comparing Different Implementations of RAID Levels”、“Monitoring Disk Activity”、“Performance Monitoring Example:Identifying Bottlenecks”、“About Hardware-based Solutions”和“RAID”。

  Windows NT 軟體 RAID

  Windows NT 通過 Windows NT 作業系統(而不是硬體 RAID 控制器)來提供鏡像集和條帶集(有或沒有容錯能力),從而為出現故障的硬碟提供容錯能力。Windows NT 磁碟管理器用於定義鏡像集 (RAID 1) 或帶同位 (RAID 5) 的條帶集。Windows NT 磁碟管理器還可以定義沒有容錯能力 (RAID 0) 的條帶集。

  軟體 RAID 將使用更多的 CPU 資源,因為 Windows NT 是管理 RAID 操作而不是硬體 RAID 控制器的組件。因此,如果系統處理器使用率接近 100%,那麼在使用相同數量的硬碟的情況下,Windows NT 軟體 RAID 的效能可能會比硬體 RAID 解決方案要低幾個百分點。但是,如果用一組磁碟機來維護 SQL Server I/O,Windows NT 軟體 RAID 通常可以協助它們實現比單獨使用這些磁碟機所獲得的更好的總體效能,減小了出現 I/O 瓶頸的可能性,從而提高了 SQL Server 的 CPU 利用率,並增加了輸送量。而且因為軟體 RAID 可以為硬碟提供容錯力,因而是一個成本更低的解決方案。

  有關配置 Windows NT 軟體 RAID 的詳細資料,請參見 Windows NT 伺服器線上說明中的第 4 章“設計可靠配置”。同時在 SQL Server Books Online 搜尋字串“About Windows NT-based Disk Mirroring and Duplexing”和“About Windows NT-based Disk Striping and Striping with Parity”。

  磁碟 I/O 並行

  當處理放置在幾個磁碟機上的小型 SQL Server 資料庫時,磁碟 I/O 並行可能不起作用。但是當處理儲存在許多磁碟機上的大型 SQL Server 資料庫時,使用磁碟 I/O 並行,以便最有效地使用磁碟子系統的 I/O 處理能力,從而達到改善效能的目的。

  建立磁碟 I/O 並行最簡單的方法是建立一個“磁碟機池”,儲存除了交易記錄檔之外的所有 SQL Server 資料庫檔案。該磁碟機池可以是在 Windows NT 中作為單個物理磁碟機的單個 RAID 陣列,也可以是一個用多個 RAID 陣列和 SQL Server 檔案/檔案組組成的大型池。SQL Server 檔案可以與每個 RAID 陣列發生關聯,且這些檔案可以組成一個 SQL Server 檔案組。然後可以在這個檔案組上建立一個資料庫,以便資料可以均勻地分布在所有磁碟機和 RAID 控制器上。“磁碟機池”方法依賴於 RAID 在所有的物理磁碟機上分配資料,以確保在資料庫伺服器運行期間並行存取資料。

  這種池的方法簡化了 SQL Server I/O 效能的最佳化,因為資料庫管理員知道只能在一個物理位置上建立資料庫物件。可以監視單個磁碟機池的磁碟隊列,如果有必要,也可以在池中添加更多的硬碟以防止出現磁碟隊列。這一技術可以在通常不知道資料庫的哪些部分使用率最高的情況下協助最佳化效能。最好不要將 I/O 總的可用容量中的一部分隔離到其它磁碟分割上,因為 SQL Server 可能只有 5% 的時間在對它進行 I/O 操作。“單個磁碟機池”的方法有助於使所有可用 I/O 容量總能為 SQL Server 操作使用。

  請注意 SQL Server 記錄檔應始終在物理上分散到與其它所有的 SQL Server 資料庫檔案不同的硬碟。對於資料庫十分忙碌的 SQL Server,交易記錄檔應在物理上相互隔開。事務記錄主要是連續的寫 I/O。將事務記錄活動與其它不連續的磁碟 I/O 活動分開對 I/O 效能有許多好處。這使得包含記錄檔的硬碟可以專事連續 I/O。請注意交易記錄有時需要作為 SQL Server 操作(如複製、復原和延遲的更新)的一部分讀出。因為需要進行這些讀操作,所以尤其應注意參與複製的 SQL Server,確保所有交易記錄檔有足夠的磁碟 I/O 處理能力。

  通過 SQL Server 檔案和檔案組,在物理上將 SQL Server 物件與它們相關的資料庫的其餘部分分開的過程還涉及到其它管理工作。這對於調查非常活躍的表和索引十分有價值。通過將表或索引與其它資料庫物件分開,可以準確估算對象的 I/O 需求。如果所有資料庫物件都放置在一個大型的磁碟機池中,則該工作不容易進行。比較好的辦法是在資料庫開發和基準測試期間進行這種物理 I/O 分割,這樣就可以收集資料庫的 I/O 資訊並在制定生產資料庫伺服器環境的容量計劃時使用這些資訊。

  以下是可以分散在不同的硬碟、RAID 控制器、PCI 通道(或這三者的組合)的 SQL Server 活動:

  交易記錄檔

  Tempdb

  資料庫檔案

  與許多查詢或寫活動相關的表

  與許多查詢或寫活動相關的非叢集索引

  可以用硬體 RAID 控制器、RAID 熱插拔磁碟機和聯機 RAID 擴充很容易地實現 SQL Server I/O 活動的物理分割。這種方法提供最高的靈活性,因為它排列 RAID 控制器以便為以上所列出的每個單獨的 SQL 活動提供單獨的 RAID SCSI 通道。每個 RAID SCSI 通道都應連到單獨的 RAID 熱插拔櫃,以便充分利用聯機 RAID 擴充(如果可通過 RAID 控制器獲得)。Windows 邏輯磁碟機號與每個 RAID 陣列相關聯,並且可以根據已知的 I/O 使用模式將 SQL Server 檔案分散在各個 RAID 陣列中。

  通過這種配置,有可能使磁碟隊列重新與不同的 RAID SCSI 通道以及它的磁碟機發生關聯,因為 Performance Monitor 可以在裝載測試以及繁重的生產負荷期間報告隊列行為。如果 RAID 控制器和磁碟機陣列支援聯機 RAID 擴充,並且在該陣列中有可用的熱插拔硬碟插槽,那麼解決該 RAID 陣列的磁碟隊列的方法很簡單,只需在該 RAID 陣列中添加更多的磁碟機,直到 Performance Monitor 報告該 RAID 陣列的磁碟隊列已達到可接受的層級(對於 SQL Server 檔案可接受的層級小於 2)。這一過程可以在 SQL Server 聯機時進行。

  Tempdb 是由 SQL Server 建立的資料庫,可用作各種活動共用的工作區域,這些活動包括暫存資料表、排序、子查詢、用 GROUP BY 或 ORDER BY 的彙總以及使用 DISTINCT(必須建立臨時工作表以重複資料刪除行)的查詢、遊標和雜湊聯結。使 tempdb I/O 操作與相關事務的 I/O 操作並行發生是一個不錯的主意。因為 tempdb 是一個草稿地區,更新頻繁,所以對於它來說,選擇 RAID 5 不如選擇 RAID 1 或 0+1 更加適合。因為每次重新啟動資料庫伺服器時都要重新建立 tempdb,所以 RAID 0 可用於生產型 SQL Server 機器中的 tempdb。RAID 0 使用的物理磁碟機最少,且可為 tempdb 提供最好的 RAID 效能。在生產環境中將 RAID 用於 tempdb 的主要顧慮在於,如果 RAID 0 陣列中有任何物理磁碟機出現故障,SQL Server 都需要停止,然後重新啟動,如果 tempdb 置於 RAID 1 或 RAID 0+1 陣列中,則不一定這樣。

  要移動 tempdb 資料庫,使用 ALTER DATABASE 命令改變與 tempdb 相關的 SQL Server 記錄檔名的物理檔案位置。例如,要將 tempdb 及其相關的日誌移動到新的檔案位置 e:/mssql7 和 c:/temp,可使用以下命令:

  alter database tempdb modify file (name='tempdev',filename= 'e:/mssql7/tempnew_location.mDF')

  alter database tempdb modify file (name='templog',filename= 'c:/temp/tempnew_loglocation.mDF')

  相對於使用者資料庫,master、msdb 和 model 資料庫在生產中用得不很多,因此通常在考慮 I/O 效能最佳化時沒必要考慮它們。master 資料庫通常只用來添加新的登入、資料庫、裝置和其它系統對象。

  非叢集索引在 B 樹結構中,可以用 ALTER DATABASE 命令將它們與它們相關的資料庫表分開。在下例中,第一個 ALTER DATABASE 建立一個檔案組。第二個 ALTER DATABASE 建立一個與該檔案組相關、但位於單獨物理位置的檔案。此時,可以在該檔案組中建立出如以下代碼所示的索引,並將該索引命名為 index1。SP_HELPFILE 報告給定資料庫中的檔案和檔案組。SP_HELP
的輸出中有一部分提供表的索引及其檔案組關係的資訊。有關詳細資料,請在 SQL Server Books Online 中搜尋字串“ALTER DATABASE”和“sp_helpfile”。

  alter database testdb add filegroup testgroup1

  alter database testdb add file (name = 'testfile',

  filename = 'e:/mssql7/test1.ndf') to filegroup testgroup1

  create table test1(col1 char(8))

  create index index1 on test1(col1) on testgroup1

  sp_helpfile

  sp_help test1

  有關詳細資料,請在 SQL Server Books Online 中搜尋字串“Files and Filegroups”、“Placing Indexes on Filegroups”、“Monitoring Disk Activity”、“Physical Database Files and Filegroups”和“Adding and Deleting Data and Transaction Log Files”。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.