【儲存】裸裝置和Oracle

lhrbest發表於2017-08-18
【儲存】裸裝置和Oracle




  【OS】Linux下常見特殊裝置介紹與應用[loop] :http://blog.itpub.net/26736162/viewspace-2142668/




1、什麼是字元裝置、塊裝置和裸裝置?

答案:字元裝置:對字元裝置的讀寫不需要透過OS的緩衝區(Buffer),它不可被檔案系統MOUNT。字元特殊檔案與外設進行I/O操作時每次只傳輸一個字元,通常不支援隨機存取資料。

塊裝置:對塊裝置的讀寫需要透過OS的緩衝區(Buffer),它可以被MOUNT到檔案系統中。塊裝置檔案用來同外設進行定長的包傳輸,它使用了Cache機制,在外設和記憶體之間一次可以傳送一整塊資料。塊裝置通常支援隨機存取和定址,並使用快取器。

裸裝置:也叫裸分割槽(原始分割槽),是一種沒有經過格式化,不被Unix/Linux透過檔案系統來讀取的特殊字元裝置。裸裝置可以繫結一個分割槽,也可以繫結一個磁碟。裸裝置使用字元特殊檔案,它由應用程式負責對它進行讀寫操作,不經過檔案系統的緩衝。

2、使用裸裝置的好處有哪些?

答案:因為使用裸裝置避免了再經過Unix作業系統這一層,資料直接從DiskOracle進行傳輸,所以使用裸裝置對於讀寫頻繁的資料庫應用來說,可以極大地提高資料庫系統的效能。當然,這是以磁碟的I/O非常大,磁碟I/O已經成為系統瓶頸的情況下才成立。如果磁碟讀寫確實非常頻繁,以至於磁碟讀寫成為系統瓶頸的情況成立,那麼採用裸裝置確實可以大大提高效能,最大甚至可以提高至40%,非常明顯。而且,由於使用的是原始分割槽,沒有采用檔案系統的管理方式,對於Unix維護檔案系統的開銷也都沒有了,比如不用再維護I-node,空閒塊等,這也能夠導致效能的提高。

3、如何決定是否應該使用裸裝置?

答案:判斷是否使用裸裝置要從以下方面進行考慮:首先,資料庫系統本身需要已經被比較好的經過了最佳化。最佳化是一門很有些技術的話題,很難簡單地講述。其次,使用Unix命令來辨別是否存在磁碟讀寫瓶頸。比如Unixvmstatsar等命令都可以較好的進行鑑別。如果決定採用裸裝置,需要磁碟上還有空閒的分割槽。否則,就要新添磁碟,或者對原有系統重新規劃。

4、什麼系統必須使用裸裝置?

答案:如果使用了Oracle並行伺服器選項,那麼就必須採用裸裝置來存放所有的資料檔案,控制檔案,重做日誌檔案。只有把這些檔案放到裸裝置上,才能保證所有Oracle例項都可以讀取這個資料庫的檔案。這是由Unix作業系統的特性決定的。還有一種情況是,如果你想使用非同步I/O,那麼在有些Unix上也必須採用裸裝置。這個需要參考具體Unix的相關文件。

5、能夠使用一個磁碟的第一個分割槽作為裸裝置嗎?

答案:可以,但是不推薦。在Unix的比較舊的版本是銀行,磁碟的第一個分割槽常常包含這個磁碟的一些資訊,以及邏輯卷的一些控制資訊。若這些部分被裸裝置覆蓋的話,磁碟就會變得不可識別,導致系統崩潰。較新的Unix版本不會發生這樣的情況,因為它們採用了更復雜的技術來管理磁碟,邏輯卷的一些資訊。但是,除非很確信不要使用磁碟的第一個分割槽來作為裸裝置。

6、我可以把整個裸裝置都作為Oracle的資料檔案嗎?

答案:不行。必須讓資料檔案的大小稍微小於該裸裝置的實際大小,至少要空出兩個Oracle塊的大小來。

7、裸裝置應該屬於那個使用者?

答案:應該由root來建立裸裝置,然後再分配給Oracle使用者以供使用。同時還要把它歸入Oracle使用者所在的那個組裡邊(通常都是DBA)。

8、在建立資料檔案時如何指定裸裝置?

答案:和普通檔案沒有什麼太大的區別,一樣都是在單引號裡邊寫上裸裝置的詳細路徑就可以了。舉一個例子:要在建立一個表空間,使用兩個裸裝置,每個分別為30M的大小,Oracle塊的大小為4K,可以用下面的命令:

CREATE TABLESPACE RAW_TS

DATAFILE '/dev/raw1' SIZE 30712k

DATAFILE '/dev/raw2' SIZE 30712k;

9、Oracle塊的大小和裸裝置有什麼關係嗎?

答案:Oracle會必須是裸裝置上物理塊大小的倍數。

10、如何在裸裝置上進行備份?

答案:在裸裝置上,不能使用Unix實用程式來進行備份,唯一的辦法是使用最基本的Unix命令:dd來進行備份。比如:dd if=/dev/raw1 of=/dev/rmt0 bs=16kdd的具體語法可以參考Unix手冊,或者聯機幫助。你也可以先用dd把裸裝置上的資料檔案備份到磁碟上,然後再利用Unix實用程式進一步處理。

12.如果我沒有使用Oracle並行伺服器選項,我可以在資料庫上讓一部分資料檔案使用檔案系統,另一部分使用裸裝置嗎?

答案:可以。但是這樣的話,會使備份過程更加複雜。

11、我應該把聯機重做日誌檔案放到裸裝置上嗎?

答案:這是一個極好的選擇。聯機重做日誌檔案是寫操作非常頻繁的檔案,放到裸裝置上非常合適。如果你使用了並行伺服器選項,那麼聯機重做日誌檔案必須放到裸裝置上面。

12、可以把歸檔日誌檔案放到裸裝置上嗎?

答案:不行。歸檔日誌檔案必須放到常規的Unix檔案系統上面,或者直接放到磁帶上面去。

13、我可以在裸裝置上邊放置多個資料檔案嗎?

答案:不行。所以你必須在設定裸裝置時非常小心。太小的話,會導致空間很快用完,太大的話,空間就白白浪費了。

14、因應該把幾個裸裝置放到同一個物理磁碟上嗎?

答案:這樣做不好。因為使用裸裝置就是為了提高磁碟讀寫速度。而把多個裸裝置放到同一個物理磁碟上會導致讀寫競爭,這樣對於提高I/O速度是不利的。應該儘量分散裸裝置到不同的物理磁碟上,最好是分散到不同的磁碟控制器上。這是最佳選擇。

15、需要把所有裸裝置都定義成同樣的大小嗎?

答案:這不是必須得,但是劃分成同樣的大小對於管理資料庫比較有利。

16、為了在Unix上使用裸裝置,我需要改變Unix核心引數嗎?

答案:不需要。但可以選擇減小緩衝區的大小,如果沒有別的應用也在同一臺Unix機器上執行。因為運用了裸裝置以後,不再使用Unix的系統緩衝區。

17、為了提高讀寫速度,在作業系統級別上,還有什麼辦法可以採取嗎?

答案:使用RAID(廉價冗餘磁碟陣列)也是非常有效的辦法,尤其實那種讀寫非常頻繁的系統。

18、在考慮了以上所有方面後,還能有什麼辦法可以提高效能的嗎?

答案:這就需要對Oracle進行最佳化,並且購買更多的磁碟和磁碟控制器,來分散I/O到不同的磁碟上。

19、一個系統可以有多少個裸裝置?

答案:這個與Linux的版本相關,在舊版本中,最多隻可以有256個裸裝置,Linux 4下做多可以繫結8192個裸裝置。但是在Linux下,最多隻能有255個分割槽,所以,如果用裸裝置繫結分割槽,那麼最多隻能繫結255個裸裝置。如果是用LVM那麼沒有這個限制。

20、Linux下單個磁碟最多可以有多少個分割槽?

答案:15個。3個主分割槽 + 1個擴充套件分割槽 + 11個邏輯分割槽。

建議的分割槽方法是:先分3個主分割槽,第四個分割槽為擴充套件分割槽,然後在擴充套件分割槽中再分成11個邏輯分割槽。注意,裸裝置不要繫結在擴充套件分割槽上。

21、Linux下是否需要繫結裸裝置?Unix呢?

答案:Linux下如果需要使用裸裝置,則需要手工進行繫結。在Linuxrawio的則實現了一套非繫結(unbound)的裸裝置/dev/rawN或者/dev/raw/rawN和一個控制裝置/dev/rawct用來把他們繫結到塊裝置上。所以當需要使用一個裸裝置的時候,就需要把他和一個真實存在的塊裝置對應起來,這一個步驟實際上就是完成了Unix裡的自動對應一個非快取字元裝置。Unix下則不用。因為Unix中每一個塊裝置都會有一個對應的字元裝置用於非快取(Unbuffered) I/O,這就是他對應的裸裝置了。

22、Linux如何繫結裸裝置?

答案:兩種方式:

1)命令繫結

raw /dev/raw/raw[n] /dev/xxx

其中n的範圍是0-8191raw目錄不存在可以建立。

執行這個命令,就會在/dev/raw下生成一個對應的raw[n]檔案

用命令方式繫結裸裝置在系統重啟後會失效。

2)修改檔案

修改/etc/sysconfig/rawdevices檔案如下,以開機時自動載入裸裝置,如:

/dev/raw/raw1 /dev/sdb1

這種方式是透過啟動服務的方式來繫結裸裝置。

也可以把這個命令寫在/etc/rc.local上,使每次啟動都執行這些命令。

23、如何把裸裝置作為Oracle資料檔案?有什麼需要注意的?

答案:步驟如下所示:

1)繫結裸裝置

2)改變裸裝置屬主

兩種方法:

把命令加入/etc/rc.local

chown oracle:oinstall /dev/raw/raw1

修改/etc/udev/permissions.d/50-udev.permissions檔案

/etc/udev/permissions.d/50-udev.permissions113

raw/*:root:disk:0660

修改為

raw/*:oracle:oinstall:0660

這個的意思是修改裸裝置的預設屬主為oracle:oinstall,預設的mode0660。如果是用lvm,也需要把邏輯卷繫結到裸裝置上,過程和繫結到普通分割槽類似。

24、使用裸裝置作為Oracle資料檔案有什麼需要注意的?

答案:使用裸裝置作為Oracle的資料檔案必須注意以下幾點:

1)一個裸裝置只能放置一個資料檔案

2)資料檔案的大小不能超過裸裝置的大小

如果是日誌檔案,那麼裸裝置最大可用大小=裸裝置對應分割槽大小 - 1 * 512 (保留一個redo lock

如果是資料檔案,那麼裸裝置最大可用大小=裸裝置對應分割槽大小 - 2 * db_block_size(保留兩個block

為了簡單起見,對所有的檔案設定稱比裸裝置小1M即可。

3)資料檔案最好不要設定稱自動擴充套件,如果設定稱自動擴充套件,一定要把maxsize設定設定為比裸裝置小

25、是否可以直接用邏輯卷作為oracle資料檔案?

答案:LinuxOracle不能直接把邏輯卷作為裸裝置,也要進行繫結。unix下就不需要。

26、如何知道當前繫結了什麼裸裝置?

答案:“raw -qa”命令列出當前繫結的所有裸裝置。

27、如何知道某個裸裝置的大小

答案:比較笨的辦法是,找出看裸裝置對應的是那個實際的塊裝置,然後用fdisk -l /dev/[h,s]dXN看那個塊裝置的大小就好了。比較簡單的辦法是用blockdev命令來計算,如:

#blockdev --getsize /dev/raw/raw1

11718750

11718750表示有多少OS BLIOCK

一般一個OS BLOCK大小是512位元組,所以11718750*512/1024/1024/1024 = 5722(m) 就是裸裝置的大小。

28、資料庫中可以同時以檔案和裸裝置作為資料檔案嗎?

答案:可以。甚至在同一個表空間中,也可以部分資料檔案用檔案系統,部分檔案用裸裝置。但是不建議這樣做,因為會增加管理的複雜度。

29、可以把至於裸裝置的資料檔案設成自動擴充套件嗎?

答案:可以,但同時要設定maxsize,且maxsize不能超過:裸裝置大小 - 2*db_block_size

30、如何修改裸裝置的預設許可權

答案:兩種方法:

1)要修改/etc/rc.d/rc.local檔案加入如下

chown root:oinstall /dev/raw/raw1

chown root:oinstall /dev/raw/raw2

chown root:oinstall /dev/raw/raw3

...

chmod 660 /dev/raw/raw1

chmod 660 /dev/raw/raw2

chmod 660 /dev/raw/raw3

...

2)實際上還有更簡單的方法就是修改/etc/udev/permissions.d/50-udev.permissions檔案:

raw/*:root:disk:0660

raw/*:root:oinstall:0660

這樣就可以了!

31、如何取消裸裝置的繫結

答案:rawmajor和minor設成0就可以取消裸裝置的繫結。如:

raw /dev/raw/raw1 0 0

這個命令取消繫結裸裝置的繫結,/dev/raw/raw1會被刪除

32、裸裝置可以繫結的物件可以什麼?

答案:可以繫結整個沒有分割槽的硬碟、可以繫結硬碟的某個分割槽、可以繫結邏輯卷等。






About Me

.............................................................................................................................................

● 本文作者:小麥苗,只專注於資料庫的技術,更注重技術的運用

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

.............................................................................................................................................

● QQ群號:230161599(滿)、618766405

● 微信群:可加我微信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友646634621,註明新增緣由

● 於 2017-08-01 09:00 ~ 2017-08-31 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

.............................................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。

   小麥苗的微信公眾號      小麥苗的DBA寶典QQ群1     小麥苗的DBA寶典QQ群2        小麥苗的微店

.............................................................................................................................................

【儲存】裸裝置和Oracle
DBA筆試面試講解群1
DBA筆試面試講解群2
歡迎與我聯絡



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2143756/,如需轉載,請註明出處,否則將追究法律責任。

相關文章