原來Advanced Format HDD已經(jīng)普及了
?DBA對(duì)現(xiàn)代硬件的了解總是不足夠的,雖然說有時(shí)候不了解這些東西,也不影響我們搞數(shù)據(jù)庫運(yùn)維。不過多了解一些這方面的知識(shí)總是好的。7、8年前我們剛剛開始使用SSD的時(shí)候遇到過4K扇區(qū)的問題,SSD盤分區(qū)的時(shí)候沒有對(duì)齊性能會(huì)有影響。甚至弄得不好,存儲(chǔ)在SSD盤上的Oracle Redo Log還會(huì)給你弄出點(diǎn)性能問題。
在一個(gè)朋友提出了一個(gè)Oracle 問題之前,我一直沒有關(guān)注過目前普通機(jī)械盤是否也存在4K扇區(qū)的問題。直到前幾天,一個(gè)朋友發(fā)了一個(gè)補(bǔ)丁,問512e是個(gè)啥意思。
這是一個(gè)Oracle 19C的BUG,在運(yùn)行于RHEL/CENTOS 8的19.3的Oracle上,如果使用了ASMLIB,并且ASM磁盤組的磁盤包含512e的磁盤,則查詢v$asm_disk的時(shí)候會(huì)出現(xiàn)CORE DUMP。而如果往這個(gè)磁盤組中添加磁盤的時(shí)候,甚至?xí)?dǎo)致整個(gè)磁盤組損壞。問題夠嚇人。
512e這個(gè)概念在數(shù)年前搞SSD盤的時(shí)候就大致了解過,學(xué)名叫512字節(jié)扇區(qū)仿真訪問模式。在一些不支持原生態(tài)4K扇區(qū)的場景下,通過512字節(jié)的邏輯扇區(qū)來訪問4K物理扇區(qū)的SSD設(shè)備也是以前經(jīng)常用的方法。而這個(gè)BUG出現(xiàn)在HDD上,難道現(xiàn)在HDD也開始使用4K扇區(qū)了嗎?于是我馬上谷歌了一下,發(fā)現(xiàn)一種稱為Advanced Format Hard Disk的磁盤技術(shù)在十多年前就已經(jīng)開始出現(xiàn)了,而2014年后,大部分的硬盤企業(yè)都推出了企業(yè)級(jí)的AF硬盤。
關(guān)于4K扇區(qū)磁盤的好處,我在這里簡單的講一下,首先磁盤越來越大,4K盤可以在使用相同的尋址空間上獲得更大的存儲(chǔ)空間,另外一點(diǎn),因?yàn)樵獢?shù)據(jù)的減少,也提高了磁盤容量的實(shí)際使用率,從硬盤廠商發(fā)布的數(shù)據(jù)看,使用4K扇區(qū)后,磁盤空間可用量多了7%以上。而從他們發(fā)布的性能數(shù)據(jù)上看,對(duì)于順序讀,順序?qū)懙男阅埽捎?K扇區(qū)后都是有所提升的,隨機(jī)讀的性能略高(不知道這種略高是不是磁盤技術(shù)帶來的,從轉(zhuǎn)速和讀取的性能上實(shí)際上是沒有什么提升的),隨機(jī)寫的性能略有下降,不過幾乎可以忽略。磁盤場廠商的數(shù)據(jù)告訴你,方向使用4K HDD吧,性能是沒問題的。我咨詢了一些國內(nèi)的一些這方面的朋友,他們告訴我性能差異可以接受如果對(duì)齊邊界,看不出明顯的差別。不過不同的場景下,這些指標(biāo)可能會(huì)有不同。只不過無論我們接受不接受,今后4K扇區(qū)的Advanced Format HDD肯定是標(biāo)配了。
上面這個(gè)磁盤上面的紅框中的LOGO就是4KN磁盤的標(biāo)識(shí)。如果我們仔細(xì)查看一下自己手頭的硬盤,應(yīng)該可以發(fā)現(xiàn)存在這樣的標(biāo)識(shí):
我們可以看到上面有兩種LOGO,一種是512e的,另外一種是4Kn的,這是兩種新的磁盤扇區(qū)訪問的模式。AF是指本磁盤是4K一個(gè)扇區(qū)的,不過支持512邏輯扇區(qū)訪問模式,操作系統(tǒng)可以把我當(dāng)成512字節(jié)扇區(qū)的磁盤來訪問。4Kn是指磁盤本身是4K扇區(qū)的,并且支持OS以4K本地訪問的模式來訪問這個(gè)磁盤。再加上原來的物理扇區(qū)就是512字節(jié)的磁盤,其訪問模式稱為512n,這三種磁盤訪問模式就是我們?nèi)粘D軌蛴龅降腍DD的訪問模式。
于是我們的HDD世界中存在兩種扇區(qū)規(guī)格,512和4K。為了向前兼容,4K扇區(qū)的磁盤也搞了一個(gè)512e的仿真訪問模式,使原來的應(yīng)用可以不做修改就能夠訪問4K扇區(qū)的磁盤。于是磁盤訪問模式出現(xiàn)了3種:1)512n,其物理扇區(qū)和邏輯扇區(qū)都是512字節(jié)的,這是以前的傳統(tǒng)訪問模式;2)512e,其磁盤的物理扇區(qū)是4K的,不過為了兼容原有的系統(tǒng),在分區(qū)的時(shí)候選擇了512邏輯扇區(qū)大小;3)4Kn,其物理扇區(qū)與邏輯扇區(qū)都是4K的,系統(tǒng)采用原生4K的方式去訪問這些磁盤。
Linux從RHEL/CENTOS 6開始支持原生的4Kn,之前都是通過512e的硬盤格式仿真訪問。如果你采用4Kn的硬盤格式,那么是不需要考慮任何分區(qū)對(duì)齊之類的問題的。而如果你使用512e的方式,那么就必須認(rèn)真考慮對(duì)齊的問題了。因?yàn)槿绻謪^(qū)不做4K對(duì)齊,那么原本一個(gè)IO可以搞定的問題,就可能因?yàn)檫吔鐔栴}而要使用2個(gè)IO了,IO數(shù)量翻了一倍,對(duì)磁盤的壓力也大了,IO延時(shí)也會(huì)增加。這對(duì)于數(shù)據(jù)庫系統(tǒng)來說是十分不好的事情。
對(duì)于數(shù)據(jù)庫來說,理解這些差異也是有用的。MySQL、PostgreSQL等數(shù)據(jù)庫都是把數(shù)據(jù)放在文件系統(tǒng)上,IO也都是向Linux的文件系統(tǒng)發(fā)起,這些磁盤格式之間的差異被文件系統(tǒng)給屏蔽了,因此我們平時(shí)也不需要太關(guān)注這些。而如果你使用Oracle則有些不同了。
Oracle從11.2.0.3開始全面支持4K扇區(qū)磁盤,支持4Kn。Oracle的ASM是自己對(duì)IO進(jìn)行優(yōu)化的,為了達(dá)到極致,Oracle在Linux內(nèi)核中增加了一個(gè)ASMLIB模塊,用于和裸設(shè)備打交道。在普通情況下,Oracle通過512e的發(fā)格式訪問磁盤扇區(qū)的數(shù)據(jù),而在使用了ASMLIB的方式下,可以使用4Kn的模式訪問磁盤,從而獲得最佳的性能。
在創(chuàng)建磁盤組的時(shí)候,Oracle ASM的接口會(huì)自動(dòng)獲得邏輯扇區(qū)/物理扇區(qū)的大小,如果發(fā)現(xiàn)某個(gè)磁盤組內(nèi)有不同的邏輯磁盤/物理磁盤大小的時(shí)候,就會(huì)報(bào)錯(cuò)。如果運(yùn)氣不好,遇到了本文開頭提到的那個(gè)BUG,這時(shí)候還可能會(huì)引起DISKGROUP的故障(一般情況下不會(huì),如果ASM實(shí)例設(shè)置了不理會(huì)邏輯扇區(qū)大小的參數(shù)_disk_sector_size_override,則大概率會(huì)出現(xiàn)此問題)。
在Oracle中使用4K扇區(qū)的磁盤,一定要注意幾個(gè)方面:1)表空間的BLOCKSIZE不要低于4K,否則會(huì)面臨性能問題,還好我們的絕大多數(shù)數(shù)據(jù)庫都是用默認(rèn)的8K BLOCKSZIE,不過某些超高并發(fā),存在嚴(yán)重?zé)釅K爭用的系統(tǒng)往往會(huì)使用較小的BLOCKSIZE,也有一些客戶為了避免熱塊沖突,把索引存放在2K BLOCKSIZE的表空間中;2)REDO LOG盡可能使用4Kn的磁盤格式,并且將REDO BLOCK大小設(shè)置為4K,而不是使用默認(rèn)的512;3)創(chuàng)建磁盤組或者向磁盤組中加入新盤的時(shí)候,一定要檢查物理扇區(qū)和邏輯扇區(qū)的大小,從而避免不兼容問題的出現(xiàn)。
最后要說的是,針對(duì)4Kn還是512e/512n模式,這是一個(gè)全鏈路問題。從磁盤到操作系統(tǒng)的任何一個(gè)環(huán)節(jié)上出現(xiàn)不一致的配置,或者不兼容的硬件,都會(huì)影響到我們最終獲得的設(shè)備的屬性。我在網(wǎng)上看到過一個(gè)案例。在同一臺(tái)存儲(chǔ)上分配的兩個(gè)LUN,在操作系統(tǒng)層面看到的山區(qū)格式不同。
這種情況會(huì)導(dǎo)致創(chuàng)建ASM DISKGROUP的時(shí)候報(bào)錯(cuò),在操作系統(tǒng)上檢查了很久也沒有發(fā)現(xiàn)問題,最終在存儲(chǔ)上找到了原因。
在創(chuàng)建LUN的時(shí)候,同一個(gè)管理員在兩個(gè)不同時(shí)間里創(chuàng)建的兩個(gè)LUN使用了不同的BLOCK SIZE。存儲(chǔ)管理員是不管這些的,他們也不知道這個(gè)參數(shù)還會(huì)引發(fā)Oracle的問題。
硬件發(fā)展雖然沒有我們想象的那么快,只不過DBA的硬件知識(shí)更新的太慢了。以至于現(xiàn)代硬件數(shù)年前就已經(jīng)研究的很清楚的問題,我們今天才去關(guān)注。如果不是那個(gè)Oracle的BUG,我可能還停留在HDD 512扇區(qū)的慣性里。這種知識(shí)的學(xué)習(xí),什么時(shí)候是個(gè)頭啊,選擇DBA這個(gè)職業(yè),真的得保持一顆學(xué)習(xí)的心。