塊裝置 字元裝置 裸裝置
學過linux的沒有不聽說過block塊的,
linux中有兩種型別的裝置檔案:塊裝置檔案和字元裝置檔案。乙個塊裝置每次讀取或者寫入一塊資料(一組位元組,通常是512的倍數),字元裝置每次讀取或者寫入乙個位元組。
字元裝置:按照字元流的方式被有序訪問,不能隨機訪問,如鍵盤、串列埠印表機、磁帶。
塊裝置:能夠隨機(不需要按順序)訪問固定大小資料片(chunks),採用塊緩衝技術,如硬碟、軟盤、光碟機。
裸裝置:是一種沒有經過格式化,不被unix通過檔案系統來讀取的特殊字元裝置。
現在問題來了,oracle在使用裸裝置時(如asm、甚或表空間直接建在裸裝置上),難道還是順序訪問?顯然不符合事實。
其實,說裸裝置是字元裝置,只是從作業系統的角度來說的;從使用裸裝置的應用程式(如oracle)的角度,還是塊裝置,oracle會去對磁碟進行分塊管理。
邏輯卷是邏輯概念,可以包含多塊物理硬碟,實現了儲存跨盤功能,同時提供了資料複製機制,提供了資料安全保護機制。
--------------
裸裝置適用於每次改動資料較小、需大量併發交易,oltp;
對於大規模順序讀寫,裸裝置效能是最差的,所以對olap,應使用塊裝置或捲。
塊裝置 裸裝置 字元裝置
2010-01-22 01:02
在aix裡,每個lvm裝置支援兩種操作方式,分別被抽象為 block device (塊裝置)和 character device (字元裝置),
其中character device 又被稱為 raw device (原因往下看):
比如:
# ls -l /dev/*hdisk0
brw------- 1 root system 22, 2 may 15 2007 hdisk0
crw------- 2 root system 22, 2 may 15 2007 rhdisk0
# ls -l /dev/*hd3
brw-rw---- 1 root system 10, 7 may 15 2007 /dev/hd3
crw-rw---- 1 root system 10, 7 may 15 2007 /dev/rhd3
這裡檔案屬性開頭的'c'字母代表character, 檔名開頭的'r'字母代表raw。
字元裝置支援不定長的資料傳輸 (data transfers of arbitrary sizes),最小乙個位元組(但絕不是每次只能傳乙個位元組或字元!),
lvm和儲存裝置的單次最大i/o只受 ltg (logical track group) 大小的限制,預設為128kb,可修改。
塊裝置只能做定長的資料傳輸,資料必須經過 'kernel buffer cache'。
這個以512-byte block 為單位的buffer cache是傳統的塊裝置的快取,千萬不要和檔案系統的快取混為一談!!
這樣的訪問方式不僅效率低,而且帶來諸多問題,嚴重影響大資料量傳輸的效能,
所以現代作業系統中幾乎不用塊裝置的方式進行高速儲存裝置的資料訪問。
資料庫建議直接使用裸裝置,意指避開檔案系統和檔案系統的快取管理,直接和字元裝置打交道。
(注意:檔案系統一定是建在字元裝置上的,不可能建到塊裝置上)
這樣做的好處主要是三個:
1. 實現每個i/o的**大大減少:filesystem 和 virtual memory for filesystem 的**都規避了。
2. 避免了重複快取造成的記憶體浪費(資料庫和檔案系統都有自己的資料快取)。
3. 避免了檔案鎖的問題:檔案系統裡的檔案不能同時被多個程序或執行緒更新。
壞處也有:
1. 失去了通過對普通檔案進行管理的易用性。
2. 不能利用檔案系統的 readahead 的功能,順序讀的速度可能做不到最優
自從有了dio和cio之後,基於檔案系統的資料庫效能得以大大提高。
cio是最接近與裸裝置的一種基於檔案系統的資料庫執行方式,因為它解決了兩個問題:
沒有檔案快取(就是裸裝置優勢之2.);
沒有檔案鎖(就是裸裝置優勢之3.)。
它保持了檔案的可見性,所以不存在裸裝置劣勢之1。
當然dio和cio同樣不支援readahead。
綜上所述:
+字元裝置和塊裝置是對同乙個物理裝置的兩種不同的儲存方式的抽象。
+裸裝置這個感念是針對其上有無檔案系統來說的,和字元及塊裝置在概念上沒有任何實質聯絡;
+塊裝置的block buffer機制和檔案系統的快取是兩回事;
+塊裝置在現代作業系統中基本沒有任何用途。
+資料庫用裸裝置或檔案系統mount with cio, 結合aio (非同步i/o),可以達到最佳i/o效能
(在aix 新版本中raw lv 和 cio fs 均支援 aio fast path );
注:相關概念或稱謂在不同的作業系統中可能不盡相同,但原理是一樣的。
C 一些基本概念
建構函式的作用是對物件本身做初始化工作,也就是給使用者提供初始化類中成員變數的一種方式。析構函式是釋放物件執行期間所申請的資源。函式的過載,過載構成的條件 函式的引數型別不同 引數個數不同,才能構成函式的過載 在乙個類中 注意,只有函式的返回型別不同是不能構成函式的過載。在函式過載時,要注意函式帶有...
linux OS一些基本概念
1.什麼是os?好簡單好x的問題,可是如果真的要自己用稍微官方稍微正規的語言或文本來回答,我真的能回答清楚嗎?好吧,我先來用自己的語言來回答。再去找點官方的定義。我自己的回答 os就是乙個可以管理並且相對合理分配計算機資源的軟體。官方回答 作業系統 英語 operating system,簡稱os ...
Thread一些基本概念
1 實現執行緒的三種方式 extends thread implements runnable implements callable new futuretask callable new thread futuretask 2 執行緒讓步yield 讓執行緒由執行狀態變為就緒狀態,不會釋放鎖 3...