磁碟 I O 效能

2021-04-18 03:42:14 字數 4862 閱讀 5718

如果將 sql server 配置成僅包含幾個千兆位元組 (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 用兩種方法保護硬碟不出現故障,並防止由於故障而出現資料丟失:映象和奇偶資訊。

「映象」通過將資訊寫入兩組驅動器來實現。映象的驅動器兩側各有一組資訊。如果在使用映象時乙個驅動器出現故障,可以置換出現故障的驅動器,然後從映象集的另一

磁碟 I O 效能監控指標

磁碟 i o 效能監控指標 在介紹磁碟 i o 監控命令前,我們需要了解磁碟 i o 效能監控的指標,以及每個指標的所揭示的磁碟某方面的效能。磁碟 i o 效能監控的指標主要包括 指標 1 每秒 i o 數 iops 或 tps 對於磁碟來說,一次磁碟的連續讀或者連續寫稱為一次磁碟 i o,磁碟的 ...

磁碟 I O 效能監控的指標

指標 1 每秒 i o 數 iops 或 tps 對於磁碟來說,一次磁碟的連續讀或者連續寫稱為一次磁碟 i o,磁碟的 iops 就是每秒磁碟連續讀次數和連續寫次數之和。當傳輸小塊不連續資料時,該指標有重要參考意義。指標 2 吞吐量 throughput 指硬碟傳輸資料流的速度,傳輸資料為讀出資料和...

提公升磁碟IO效能的幾個技巧

目前磁碟都是機械方式運作的,主要體現在磁碟讀寫前尋找磁軌的過程。磁碟自帶的讀寫快取大小,對於磁碟讀寫速度至關重要。讀寫速度快的磁碟,通常都帶有較大的讀寫快取。磁碟的尋道過程是機械方式,決定了其隨機讀寫速度將明顯低於順序讀寫。在我們做系統設計和實現時,需要考慮到磁碟的這一特性。fastdfs是乙個開源...