IO分析
http://www.hellodba.com/reader.php?ID=78&lang=cn
2 IO系統的設計和配置
要控制好資料庫的整體IO效能,在規劃資料庫架構時就需要做好IO系統的設計和配置。例如,將對IO要求不同的檔案放置在不同的儲存裝置上;規劃資料檔案的分佈、均衡IO負擔等。
2.1 OS和儲存相關
IO效能是直接和作業系統已經硬體效能相關的。如果能利用作業系統的一些高階IO特性,或者採用更高速的磁碟裝置,能大大提高IO效能。下面介紹一些OS的IO配置、不同的磁碟硬體裝置以及儲存技術。
2.1.1 檔案系統(File System)和裸裝置(Raw Device)
我們知道,記憶體的讀寫效率比磁碟高近萬倍,因此Oracle在記憶體中開闢了一片區域,稱為Buffer Cache,使資料的讀寫儘量在Buffer Cache中完成。同樣,在檔案系統中,作業系統為了提高讀寫效率,也會為檔案系統開闢一塊Buffer Cache用於讀寫資料的快取。這樣,Oracle的資料會被快取2次。為了避免OS的這次快取,我們可以採用裸裝置做為資料檔案的儲存裝置。裸裝置,也稱為裸分割槽(Raw Partition),它是一個沒有被載入(Mount)到作業系統的檔案系統上、也沒有載入到Oracle叢集檔案系統(OCFS Oracle Cluster File System)的磁碟分割槽,它通過字元裝置驅動來訪問。裸裝置的檔案讀寫不由作業系統控制,而是由應用程式(如Oracle RDBMS)直接控制。
2.1.2 IO方式
OS和檔案系統對IO的控制存在多種方式,不同的IO方式下對於資料庫的IO效能影響也不同。
2.1.2.1 Direct IO & Concurrent IO
除了裸裝置,某些檔案系統可以支援Direct IO,以避開讀寫緩衝。如果要使用Direct IO,需要指定Oracle引數“filesystemio_options”來設定支援Direct IO。但是要注意,不同OS中的不同檔案系統對Direct IO的支援也不同:
- Windows 在windows中不需要做特別設定可以直接使用Direct IO;
- AIX 在AIX中,JFS檔案系統需要通過設定“filesystemio_options”為“SETALL”或者“DIRECTIO”來支援Direct IO;
- LINUX Linux在核心版本為2.4.9以上才支援Direct IO。NFS或者OCFS檔案系統支援Direct IO。需要設定“filesystemio_options”為“SETALL”或者“DIRECTIO”;
- Solaris Solaris需要在作業系統中設定“forcedirectio”選項,並設定“filesystemio_options”為“SETALL”或者“DIRECTIO”。
引數“filesystemio_options”支援4種值:
- ASYNCH: 使Oracle支援檔案的非同步(Asynchronous)IO;
- DIRECTIO:使Oracle支援檔案的Direct IO;
- SETALL:使Oracle同時支援檔案的Asynchronous IO和Direct IO;
- NONE:使Oracle關閉對Asynchronous IO和Direct IO的支援。
在AIX的JFS2檔案系統上,如果“filesystemio_options”為“SETALL”,則會支援Concurrent IO。CIO比DIO的效能更高,因為JFS2的CIO支援多個程式同時對一個檔案進行讀寫。
2.1.2.2 Asynchronous IO & Synchronous IO
通常,用的比較多的IO模型是同步IO(Synchronous IO)。在這種模式下,當請求發出之後,應用程式就會阻塞,直到請求滿足為止。這種模式最大好處就是呼叫應用程式在等待 I/O 請求完成時不需要使用CPU資源。但是,對於一些強調高響應速度的程式(如DB)來說,希望這種等待時間越短越好,我們這時就可以考慮採用非同步IO(Asynchronous IO)模式。非同步IO模式下,程式發出IO請求後無需等待IO完成,可以去處理其它事情;IO請求被放入一個佇列中,一旦IO完成,系統會發出訊號通知程式。
非同步IO可以使需要大量寫的Oracle程式(如DBWn程式)將IO請求佇列化,以充分利用硬體的IO頻寬,從而使它們能最大程度實現並行處理。非同步IO還可以使那些需要進行大量計算的操作(如排序)在它們發出IO請求前預先從磁碟取出資料,以使IO和計算並行處理。
確認作業系統已經設定支援AIO後,還需要設定Oracle初始化引數"DISK_ASYNCH_IO"為“true”以支援非同步IO。
2.1.3 負載均衡及條帶化(Striping)
當多個程式同時訪問一個磁碟時,會出現磁碟衝突。大多數磁碟系統都對訪問次數(每秒的IO操作)和資料傳輸率(每秒傳輸的資料量)有限制。當達到這些限制時,後面要訪問磁碟的程式就需要等待,這時就是所謂的磁碟衝突。
避免磁碟衝突是優化IO效能的一個目標,這就需要將一個熱點磁碟上的IO訪問負載分擔到其他可用磁碟上,也就是IO負載均衡。在一些成熟的磁碟負載均衡技術出現之前,DBA需要了解/預測各系統的IO負載量,通過手工配置每個資料到不同存放位置以分擔IO負載來達到負載均衡的目的。
條帶化技術就是將資料分成很多小部分並把他們分別儲存到不同磁碟上的不同檔案中去。這就能使多個程式同時訪問資料的多個不同部分而不會造成磁碟衝突。很多作業系統、磁碟裝置供應商、各種第三方軟體都能做到條帶化。通過條帶化,DBA可以很輕鬆的做到IO負載均衡而無需去手工配置。
2.1.4 RAID
RAID的全稱是獨立磁碟冗餘陣列(Redundant Array of Independent Disks)。它通過將多個相對比較便宜的磁碟組合起來,並相互連線,同時都連到一個或多個計算機上,以組成一個磁碟組,使其效能和容量達到或超過一個價格更昂貴的大型磁碟。RAID分為6級。
- RAID-0
RAID-0只提供純粹的條帶化(Stripping)。條帶可以使一個大檔案被多個磁碟控制器同時訪問,因此支援對資料的併發訪問。RAID-0不提供資料冗餘和奇偶保護,它只關注效能。如果RAID-0中任何一個磁碟出錯,整個資料庫都會崩潰。
- RAID-1
RAID-1提供磁碟映象(Disk Mirror)。在RAID-1中,所有資料都會被寫入兩個獨立的磁碟中,以實現對資料的冗餘保護。兩塊磁碟的資料是同時寫入的,以保證其速度不會低於寫入單獨磁碟的速度。RAID-1實現了資料的完全冗餘,它提供了所有RAID級別中最安全可靠的資料保護。在這種模式下,寫的效能下降了,但讀的效能被提升了。此外,RAID-1也是最佔用磁碟空間的模式
- RAID 0+1
RAID-0能提供更好的效能,RAID-1提供最佳的資料保護。如果把兩者結合在一起就能同時提供高效能和資料保護,但是也會同時提高磁碟陣列造價。
- RAID-3
在RAID-3中,會有一塊專門的磁碟驅動被用作儲存錯誤修正或者奇偶校驗資料。而其他的磁碟驅動則被條帶化。RAID-3的並行處理能力比較低,它適合於主要是讀操作的系統(如決策分析系統 DSS,但是DSS會存在大量複雜查詢,需要做JOIN,同樣也會存在一些臨時的寫操作),不適合存在大量寫操作的系統(OLTP)。
- RAID-5
RAID-5不做全磁碟映象,但它會對每一個寫操作做奇偶校驗計算並寫入奇偶校驗資料。奇偶校驗磁碟避免了像RAID-1那樣完全重複寫資料。當一個磁碟失效,校驗資料被用來重建資料,從而保證系統不會崩潰。為避免磁碟瓶頸,奇偶校驗和資料都會被分佈到陣列中的各個磁碟。儘管讀的效率提高了,但是RAID-5需要為每個寫操作做奇偶校驗,因此它的寫的效率很差。
- RAID-S
RAID-S是EMC公司的RAID-5的實施方案,它和純粹的RAID-5存在以下區別:
(1) 它條帶化奇偶校驗,但不條帶化資料;
(2) 它與一個帶有寫快取的非同步硬體環境合併。
這個快取主要是一種延遲寫的機制,因此它能讓系統在相對不忙的時候計算和寫奇偶校驗資訊。
- RAID-7
RAID-7也同樣引入了快取機制,這個快取是被一個內嵌式作業系統控制。但是,RAID-7中資料是被條帶化的,而奇偶校驗不被條帶化。奇偶校驗資訊被存放著一個或者多個專門的磁碟上。
2.1.5 SAN
SAN(Storage Area Network,儲存區域網)是一個高速的子網,這個子網中的裝置可以從你的主網解除安裝流量。通常SAN由RAID陣列連線光纖通道(Fibre Channel)組成,SAN和伺服器和客戶機的資料通訊通過SCSI命令而非TCP/IP,資料處理是“塊級”(block level)。
SAN通過特定的互連方式連線的若干臺儲存伺服器組成一個單獨的資料網路,提供企業級的資料儲存服務。 SAN是一種特殊的高速網路,連線網路伺服器和諸如大磁碟陣列或備份磁帶庫的儲存裝置,SAN置於LAN之下,而不涉及LAN。利用SAN,不僅可以提供大容量的儲存資料,而且地域上可以分散,並緩解了大量資料傳輸對於區域網的影響。SAN的結構允許任何伺服器連線到任何儲存陣列,不管資料置放在哪裡,伺服器都可直接存取所需的資料。
2.1.6 NAS
NAS是Network Attached Storage(網路附加儲存)的簡稱。在NAS儲存結構中,儲存系統不再通過I/O匯流排附屬於某個伺服器或客戶機,而直接通過網路介面與網路直接相連,由使用者通過網路訪問。它是連線到一個計算機網路的檔案層的資料儲存,它可以為不同網路客戶端提供資料儲存服務。NAS的硬體與傳統的專用檔案伺服器相似。它們的不同點在於軟體端。NAS中的作業系統和其他軟體只提供資料儲存、資料訪問功能,以及對這些功能的管理。與傳統以伺服器為中心的儲存系統相比,資料不再通過伺服器記憶體轉發,直接在客戶機和儲存裝置間傳送,伺服器僅起控制管理的作用
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24867586/viewspace-713170/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IO效能探索分析
- FFmpeg的IO分析
- InnoDB IO路徑原始碼分析原始碼
- 從設計模式分析Java.IO設計模式Java
- 透過addm分析io問題
- 通過addm分析io問題
- android IO Prefetch原始碼分析Android原始碼
- 故障分析 | 是誰偷走了我的 IO
- Java IO原始碼分析(三)——PipedOutputStream和PipedInputStreamJava原始碼
- systemtap分析軟raid io拆分問題AI
- 通過blktrace, debugfs分析磁碟IO
- 【轉】JAVA IO 設計模式徹底分析Java設計模式
- 轉:linux io排程深入分析Linux
- Java IO 之 FileInputStream & FileOutputStream 原始碼分析Java原始碼
- Dart 原始碼分析:深入理解 dart:io HttpClientDart原始碼HTTPclient
- Java IO Stream控制程式碼洩露分析Java
- 效能調優(cpu/IO/JVM記憶體分析)JVM記憶體
- Druid.io系列4:索引過程分析UI索引
- IO虛擬化的優勢與需求分析
- IO模式和IO多路複用(阻塞IO、非阻塞IO、同步IO、非同步IO等概念)模式非同步
- MySQL·原始碼分析·InnoDB非同步IO工作流程MySql原始碼非同步
- 記憶體與IO,磁碟IO,網路IO記憶體
- 設計模式(九)——裝飾者模式(io原始碼分析)設計模式原始碼
- 非同步IO,同步IO,Direct IO,FILESYSTEMIO_OPTIONS, DISK_ASYNCH_IO [final]非同步
- [java IO流]之 IO概述Java
- 阻塞IO與非阻塞IO
- Java IO1:IO和FileJava
- 【死磕NIO】— 阻塞IO,非阻塞IO,IO複用,訊號驅動IO,非同步IO,這你真的分的清楚嗎?非同步
- Java 非阻塞 IO 和非同步 IOJava非同步
- 高階Java工程師必備 ----- 深入分析 Java IO (三)Java工程師
- linux核心檔案IO的系統呼叫實現分析(open)Linux
- 【網路IO系列】IO的五種模型,BIO、NIO、AIO、IO多路複用、 訊號驅動IO模型AI
- IO模型模型
- IO操作
- Java IOJava
- IO 流
- IO介面
- IO流