精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:存儲技術專區 → 正文

存儲系統認知:存儲是系統的最底層

責任編輯:qzhao |來源:企業網D1Net  2012-03-08 08:38:37 本文摘自:hellodb.net

磁盤

一個IO的訪問,大致分為三個步驟,第一是磁頭到指定的磁道(尋道),第二是等待需要讀取的數據隨盤片旋轉到磁頭(延遲),第三是讀取數據。相比較前兩個時間,讀取數據的時間可以忽略不計,所以一個IO的響應時間等于尋道時間+延遲時間決定,尋道時間由于是機械的動作,所以很難得到大幅度提高,但是可以通過提高磁盤轉速來提高延遲時間。所以轉速越高的盤,可以承載更多的IOPS。磁盤的IOPS由磁盤的轉速決定,比如15000RPM的磁盤,一般可以承受150個IOPS。

吞吐量,則由磁盤的轉速和接口決定,轉速決定了內部傳輸率,接口則決定了外部傳輸率,很明顯前者肯定低于后者。常見的接口有ATA,SCCI,SATA,SAS,FC等等。FC接口一般在高端存儲中比較常見,而SAS和SATA多在服務器或者中低端存儲中常見。

存儲

對于一個存儲系統來說,IOPS主要決定于cache的算法,以及磁盤的數量。有時候我們往往會被廠商的數據給忽悠了,第一是cache命中率,廠商利用了某種手段,讓cache命中率非常高,IOPS幾乎可以隨心所欲。另外一個因素就是磁盤的數量,廠家的數據是同型號1000塊磁盤的測試結果,而我們實際的系統只有100塊磁盤。

購買存儲時,應該避免買高端存儲,而只配數量很少的磁盤,廠商非常喜歡你買一個高端的BOX,告訴你擴展性好,現在用不著可以少買點盤,以后可以擴容等等,這完全是忽悠。建議不要超前消費,如果確實對性能追求很高,可以選用容量小一些的磁盤,而磁盤的數量多一些。

磁盤的數量可以計算得出,我們的經驗,一般OLTP應用的cache命中率在20%左右,剩下的IO還是要到磁盤上的,根據磁盤的轉速和類型,就可以知道一塊盤能夠承載的IOPS,磁盤數量就可以估算出來了,為了得到比較好的響應時間,建議每塊磁盤的IOPS不要超過100。

影響吞吐量的因素稍微復雜些,由磁盤的數量和存儲的架構決定,當磁盤到達一定的數量后,吞吐量主要受限于存儲的架構。比如某高端存儲,吞吐量最大就是1.4GB,這是由它內部的架構所決定的。另外還要注意存儲與主機的接口,比如HBA卡,有4Gb和2Gb(這里是bit,而不是Byte),一般主機和存儲都配有多塊HBA卡。

RAID

RAID一般比較常見的就是RAID10和RAID5,對性能要求比較高的數據庫應用一般都采用RAID10,RAID5也可以用,但是別把redo放在RAID5上,因為RAID5的對于redo這種小IO,性能非常差,很容易造成log file sync的等待。一個RAID group中的磁盤數量不宜過多,不要超過10塊,原因是RAID group中磁盤數量越多,壞盤的概率就越大(概率問題)。一些高端存儲對于RAID group中的磁盤數量都是固定的,這主要和存儲的架構有關。使用存儲的過程中,你會發現,越是高端的東西,就越是死板,而中低端存儲則非常靈活,并不是說高端存儲不好,而是說架構決定一切。

Stripe

Stripe的作用就是盡可能的分散IO,它在有些存儲上是可以調節的,但是很多存儲是不可以調節的,一般在128K-512K之間。有一個錯誤的說法是,我在存儲上做了stripe,數據庫的一個IO,所有的磁盤都會響應這個IO。這個說法是錯誤的,對于Oracle來說,一個隨機IO的大小是8K,一般條帶的大小要比8K大得多,所以Oracle一個隨機IO永遠只會落在一塊磁盤上。一塊磁盤在同一個時刻只能響應一個IO,也就是說磁盤沒有并發IO的概念,但是從整個系統來看,不同的磁盤響應不同的IO,宏觀上IO還是分散的,所以我們看到一個數據庫在運行時,所有的磁盤都在忙,實際上每塊磁盤是為不同的IO服務。對于順序IO,Oracle的默認設置是128K,最大值由OS決定,一般是1M,如果順序IO的大小大于stripe,那么一個IO可能會有幾塊盤同時響應,但是很多存儲的stripe都大于128K,這時一個IO還是只有一塊磁盤響應,由于讀是一個順序的過程,所以要在數據庫這個級別加上并發,才可以真正達到提高吞吐量的目的。

有人要問,stripe到底多大合適?如果我把stripe做得很小,這樣不是很好嗎?一個IO同時可以讀很多塊盤,大大提高了吞吐量。我們假設stripe為1K,Oracle scattered read是完全串行的過程,實際上在不同的multiblock read之間,存在一定程度的并行。Oracle每次同時向OS發送若干個multiblock read IO請求,然后把返回的結果合并排序。整個scattered read應該是局部并行,宏觀串行的過程。

所以stripe不能做的很小。stripe到底設多大,我的觀點是大比小好,不要小于256K,數據倉庫應用可以設置的更大一些。ASM對于數據文件的stripe默認是1M,我曾經覺得1M太大,將其改為128K,結果發現1M的性能更好,Oracle也推薦用1M。這說明對于數據庫應用來說,stripe size要稍微大一點,而不是我們想的越細或者越分散越好。

存儲劃分

劃分好的LUN輸出到主機后,我們怎么用?這個就比較靈活多變,首先要看我們的用途,我們是追求IOPS還是吞吐量?我們用file system,raw devices,ASM?存儲輸出的LUN跨在多少塊盤上?一般的存儲沒有虛擬化功能,則輸出的LUN只跨在一個RAID group上,這時往往需要利用OS上的LVM來再次劃分一次,看下面的示意圖。


 

每個RAID goup有四塊磁盤,建立兩個LUN,輸出到主機后,用藍色的一組和紅色的一組LUN分別創建兩個VG,然后再創建LV(stripe),這下每個LV就完全跨在了所有的磁盤上。實際中考慮的問題要更多,有時候不僅僅要考慮磁盤,還要考慮將負載分配在不同的控制器,前端卡后端卡和多路徑的問題,相當復雜。有些存儲本身有虛擬化的功能,甚至可以輸出一個LUN,比如3PAR就可以輸出一個虛擬卷,這個卷已經跨在所有的磁盤上,我們直接使用就可以了(但實際工作中這么使用的比較少見)。

Oracle有了ASM,問題就更加復雜了,我的建議是如果可以的話,存儲只做RAID1,stripe交給ASM去做。如果有些存儲必須要做stripe,也沒問題。存儲劃分是一個很有技術含量的工作,必須建立在對存儲,主機和數據庫深入了解的基礎上,才有可能做出一個好的規劃。

總結:存儲是系統的最底層,因為非常重要,現在市場基本被幾個大廠商所壟斷,每個廠家都有一些忽悠人的名詞或者商業上的炒作,所以我們要擦亮眼睛,謹防被忽悠。

關鍵字:磁盤FC接口LVMOLTP存儲系統

本文摘自:hellodb.net

x 存儲系統認知:存儲是系統的最底層 掃一掃
分享本文到朋友圈
當前位置:存儲技術專區 → 正文

存儲系統認知:存儲是系統的最底層

責任編輯:qzhao |來源:企業網D1Net  2012-03-08 08:38:37 本文摘自:hellodb.net

磁盤

一個IO的訪問,大致分為三個步驟,第一是磁頭到指定的磁道(尋道),第二是等待需要讀取的數據隨盤片旋轉到磁頭(延遲),第三是讀取數據。相比較前兩個時間,讀取數據的時間可以忽略不計,所以一個IO的響應時間等于尋道時間+延遲時間決定,尋道時間由于是機械的動作,所以很難得到大幅度提高,但是可以通過提高磁盤轉速來提高延遲時間。所以轉速越高的盤,可以承載更多的IOPS。磁盤的IOPS由磁盤的轉速決定,比如15000RPM的磁盤,一般可以承受150個IOPS。

吞吐量,則由磁盤的轉速和接口決定,轉速決定了內部傳輸率,接口則決定了外部傳輸率,很明顯前者肯定低于后者。常見的接口有ATA,SCCI,SATA,SAS,FC等等。FC接口一般在高端存儲中比較常見,而SAS和SATA多在服務器或者中低端存儲中常見。

存儲

對于一個存儲系統來說,IOPS主要決定于cache的算法,以及磁盤的數量。有時候我們往往會被廠商的數據給忽悠了,第一是cache命中率,廠商利用了某種手段,讓cache命中率非常高,IOPS幾乎可以隨心所欲。另外一個因素就是磁盤的數量,廠家的數據是同型號1000塊磁盤的測試結果,而我們實際的系統只有100塊磁盤。

購買存儲時,應該避免買高端存儲,而只配數量很少的磁盤,廠商非常喜歡你買一個高端的BOX,告訴你擴展性好,現在用不著可以少買點盤,以后可以擴容等等,這完全是忽悠。建議不要超前消費,如果確實對性能追求很高,可以選用容量小一些的磁盤,而磁盤的數量多一些。

磁盤的數量可以計算得出,我們的經驗,一般OLTP應用的cache命中率在20%左右,剩下的IO還是要到磁盤上的,根據磁盤的轉速和類型,就可以知道一塊盤能夠承載的IOPS,磁盤數量就可以估算出來了,為了得到比較好的響應時間,建議每塊磁盤的IOPS不要超過100。

影響吞吐量的因素稍微復雜些,由磁盤的數量和存儲的架構決定,當磁盤到達一定的數量后,吞吐量主要受限于存儲的架構。比如某高端存儲,吞吐量最大就是1.4GB,這是由它內部的架構所決定的。另外還要注意存儲與主機的接口,比如HBA卡,有4Gb和2Gb(這里是bit,而不是Byte),一般主機和存儲都配有多塊HBA卡。

RAID

RAID一般比較常見的就是RAID10和RAID5,對性能要求比較高的數據庫應用一般都采用RAID10,RAID5也可以用,但是別把redo放在RAID5上,因為RAID5的對于redo這種小IO,性能非常差,很容易造成log file sync的等待。一個RAID group中的磁盤數量不宜過多,不要超過10塊,原因是RAID group中磁盤數量越多,壞盤的概率就越大(概率問題)。一些高端存儲對于RAID group中的磁盤數量都是固定的,這主要和存儲的架構有關。使用存儲的過程中,你會發現,越是高端的東西,就越是死板,而中低端存儲則非常靈活,并不是說高端存儲不好,而是說架構決定一切。

Stripe

Stripe的作用就是盡可能的分散IO,它在有些存儲上是可以調節的,但是很多存儲是不可以調節的,一般在128K-512K之間。有一個錯誤的說法是,我在存儲上做了stripe,數據庫的一個IO,所有的磁盤都會響應這個IO。這個說法是錯誤的,對于Oracle來說,一個隨機IO的大小是8K,一般條帶的大小要比8K大得多,所以Oracle一個隨機IO永遠只會落在一塊磁盤上。一塊磁盤在同一個時刻只能響應一個IO,也就是說磁盤沒有并發IO的概念,但是從整個系統來看,不同的磁盤響應不同的IO,宏觀上IO還是分散的,所以我們看到一個數據庫在運行時,所有的磁盤都在忙,實際上每塊磁盤是為不同的IO服務。對于順序IO,Oracle的默認設置是128K,最大值由OS決定,一般是1M,如果順序IO的大小大于stripe,那么一個IO可能會有幾塊盤同時響應,但是很多存儲的stripe都大于128K,這時一個IO還是只有一塊磁盤響應,由于讀是一個順序的過程,所以要在數據庫這個級別加上并發,才可以真正達到提高吞吐量的目的。

有人要問,stripe到底多大合適?如果我把stripe做得很小,這樣不是很好嗎?一個IO同時可以讀很多塊盤,大大提高了吞吐量。我們假設stripe為1K,Oracle scattered read是完全串行的過程,實際上在不同的multiblock read之間,存在一定程度的并行。Oracle每次同時向OS發送若干個multiblock read IO請求,然后把返回的結果合并排序。整個scattered read應該是局部并行,宏觀串行的過程。

所以stripe不能做的很小。stripe到底設多大,我的觀點是大比小好,不要小于256K,數據倉庫應用可以設置的更大一些。ASM對于數據文件的stripe默認是1M,我曾經覺得1M太大,將其改為128K,結果發現1M的性能更好,Oracle也推薦用1M。這說明對于數據庫應用來說,stripe size要稍微大一點,而不是我們想的越細或者越分散越好。

存儲劃分

劃分好的LUN輸出到主機后,我們怎么用?這個就比較靈活多變,首先要看我們的用途,我們是追求IOPS還是吞吐量?我們用file system,raw devices,ASM?存儲輸出的LUN跨在多少塊盤上?一般的存儲沒有虛擬化功能,則輸出的LUN只跨在一個RAID group上,這時往往需要利用OS上的LVM來再次劃分一次,看下面的示意圖。


 

每個RAID goup有四塊磁盤,建立兩個LUN,輸出到主機后,用藍色的一組和紅色的一組LUN分別創建兩個VG,然后再創建LV(stripe),這下每個LV就完全跨在了所有的磁盤上。實際中考慮的問題要更多,有時候不僅僅要考慮磁盤,還要考慮將負載分配在不同的控制器,前端卡后端卡和多路徑的問題,相當復雜。有些存儲本身有虛擬化的功能,甚至可以輸出一個LUN,比如3PAR就可以輸出一個虛擬卷,這個卷已經跨在所有的磁盤上,我們直接使用就可以了(但實際工作中這么使用的比較少見)。

Oracle有了ASM,問題就更加復雜了,我的建議是如果可以的話,存儲只做RAID1,stripe交給ASM去做。如果有些存儲必須要做stripe,也沒問題。存儲劃分是一個很有技術含量的工作,必須建立在對存儲,主機和數據庫深入了解的基礎上,才有可能做出一個好的規劃。

總結:存儲是系統的最底層,因為非常重要,現在市場基本被幾個大廠商所壟斷,每個廠家都有一些忽悠人的名詞或者商業上的炒作,所以我們要擦亮眼睛,謹防被忽悠。

關鍵字:磁盤FC接口LVMOLTP存儲系統

本文摘自:hellodb.net

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 堆龙德庆县| 海丰县| 万山特区| 门源| 息烽县| 尼勒克县| 象山县| 临夏市| 治多县| 梁山县| 台北县| 哈密市| 同仁县| 兴义市| 合川市| 三门县| 秦皇岛市| 克什克腾旗| 德庆县| 富顺县| 根河市| 赤水市| 财经| 大悟县| 壤塘县| 泗洪县| 西华县| 年辖:市辖区| 东光县| 青岛市| 孟津县| 长丰县| 凉城县| 临洮县| 枝江市| 繁昌县| 巧家县| 姜堰市| 卓尼县| 延寿县| 云和县|