標籤:
通過資料庫評估存放裝置IO效能
---------Oracle11g IO校準功能介紹
前言
I/O子系統是ORACLE資料庫的一個重要組成部分,因為I/O操作是貫穿資料庫管理全過程,它操作的對象包括日誌、表、索引、資料字典、以及一些排序、undo操作等等,每個資料庫讀取或者寫入磁碟上的資料,都會產生磁碟IO,可以這麼說一個正常業務的資料庫系統,80%的效能消耗都與IO有關,相對於網路、CPU、記憶體等其他硬體的迅猛發展,磁碟的讀寫速度的發展卻相對滯後,這也導致許多業務效能瓶頸集中在有限的磁碟IO上,一旦出現IO瓶頸導致的效能問題,表現為CPU有時候會花大部分的時間等待IO操作,我們把這種情況稱為IO密集性(I/O-bound)系統。
我們在處理ZLHIS業務系統效能問題的時候,大部分也是在處理IO效能問題,主要表現在三方面:
1、HIS系統是業務高密集系統,在業務高峰期會形成大量集中的並行作業,產生大量的I/O操作;
2、不規範的SQL語句導致的過度的磁碟訪問(如:全表掃描等);
3、由於硬體導致的儲存IO本身的效能問題;
就是一個某客戶真實環境下I/O效能瓶頸的AWR效能報告,TOT5等待事件中,主要就是I/O類型的等待,在處理類似問題的時候,我們都先假定儲存的I/O效能是滿足我們的業務需求的,忽略儲存本身的效能問題,而著重解決1、2應用設計或者SQL代碼不規範導致的過度I/O讀取,但有時導致I/O效能的問題根本的原因恰恰就是儲存,遇到這種問題的時候,我們過去都是通過檔案拷貝、複製讀寫都操作主觀的感受儲存的效能,或者找硬體商協助分析,前一種方式不便於我們從資料指標上給儲存效能予以定型,特別是在某些瞬時集中IO訪問出現瓶頸的存放裝置上給出充分的說服力,後一種方式如果遇到硬體商本身不配合,我們處理問題就非常的尷尬,這時候我們急需一種方式對夠自主的對儲存進行效能評估,給出評估效能指標以便對I/O效能進行量化,為問題的分析解決給出可靠的依據。
IO相關概念
在對儲存效能進行評估之前,我們有必要瞭解幾個關於IO的指標概念,只有對這幾個指標概念有了瞭解,我們才能客觀的評價一個儲存效能的好壞。
IOPS(I/OOperations Per Second):是用來計算I/O流中每個節點中每秒傳輸的數量,表示每秒進行讀寫(I/O)操作的次數,多用於評估衡量儲存隨機訪問的效能。IOPS通常對於小I/O,且傳輸I/O的數量比較大的情況下,是一個最主要的衡量指標。例如,典型的OLTP系統中,高的IOPS則意味相同時間內更多的資料庫事務可以被儲存系統處理。
IO回應時間(latency):指核心對磁碟發出一個讀或者寫的IO命令,到核心接收到回應的時間。
輸送量(Throughput):來計算每秒在I/O流中傳輸的資料總量。這個指標,在大多數的磁碟效能計算工具中都會顯示,最簡單的在Windows檔案拷貝的時候,就會顯示MB/s,輸送量衡量對於大I/O,特別是傳輸一定資料的時候最小化耗時非常有用,例如,備份資料的時候,在備份作業中,我們通常不會關心有多少I/O被儲存系統處理了,而是完成備份總資料的時間多少。
以上三個指標基本上能夠衡量儲存的IO效能,其中IOPS和輸送量是越大越好,IO回應時間當然是越短越好。
IO校準
儲存整體效能主要由一系列關鍵組件層共同作用,包括HBA、Storage Switches、Storage Array和Physical Disks。這些對象共同合力,才能形成系統整體的IO能力有IO整體效能,通過Oracle的I/O校準功能,使您能夠評估儲存的整體效能,並判斷和確認I/O效能問題是否由資料庫或儲存系統造成的。不同於其他藉助外部I/O評估工具,Oracle的I/O校準功能的原理是資料庫隨機使用其資料檔案訪問儲存,這樣產生的結果能更加真實的反映資料庫訪問儲存的實際效能,它可以協助計算出當前儲存最大的IOPS和輸送量,要使用這個特性必須滿足以下條件:
資料庫版本為11g
操作使用者必須要有sysdba許可權
資料庫參數timed_statistics必須是true
必須允許IO非同步,但用的是檔案系統,可以通過設定FILESYSTEMIO_OPTIONS參數為setall
確保資料檔案允許非同步IO,可以通過下面的SQL語句確認:
COL NAME FORMAT A50
SELECT NAME,ASYNCH_IOFROM V$DATAFILE F,V$IOSTAT_FILE I
WHERE F.FILE#=I.FILE_NO
AND FILETYPE_NAME=‘Data File‘;
I/O校準是通過調用Oracle內部dbms_resoure_manager.cakibrate_io包來擷取,其發出一系列I/O密集型的唯讀工作量到資料庫檔案,通過這些操作確定儲存的最大IOPS(每秒IO請求數)和儲存每秒能夠執行的輸送量MBPS(MB每秒I/O)。
I/O校準分為兩步:第一步dbms_resource_manager.calibrate_io包按照資料檔案塊大小隨機讀取的所有資料檔案,通過持續的讀取操作能夠擷取儲存的最大IOPS(max_iops),同時輸出校準期間的平均延遲(actual_latency),當然你可以通過輸入參數max_latency指定目標延遲(指定的最大可容忍資料庫塊大小的IO請求延遲的毫秒數)。第二步是通過dbms_resource_manager.calibrate_io包按照1M大小持續讀取所有資料檔案,這一步主要是為了擷取最大輸送量這個重要的指標。
如果使用者能夠提供的num_physical_disks輸入參數可以使得I/O校準運行更準確,這個參數它指定在資料庫中儲存系統的物理磁碟的近似數,如果不清楚就輸1也行,認為只是一塊磁碟。
下面是一個執行DBMS_RESOURCE_MANAGER.CALIBRATE_IO包的案例,語句非常簡單,如下:
SET SERVEROUTPUT ON
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
--DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops,mbps, lat);
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10,iops, mbps, lat);
DBMS_OUTPUT.PUT_LINE (‘max_iops = ‘ || iops);
DBMS_OUTPUT.PUT_LINE (‘latency = ‘ || lat);
dbms_output.put_line(‘max_mbps = ‘ || mbps);
end;
/
校準的操作很簡單,但是在運行時需要注意以下幾點事項:
同一時間只能運行一個IO校準過程,千萬不要並行運行,如果您同時運行,I/O校準將不能正常執行;
因過程執行對IO消耗非常大,請確保執行個體在空閑狀態下執行;
如果是RAC環境,要確保所有節點執行個體都是啟動狀態;
過程包中的num_physical_disks輸入參數是可選的。磁碟數不用太準確,輸入個近似值這樣可以使得校準更快、更準確。
最後在I/O校準過程中,你可以在v$io_calibration_status視圖查看校準狀態。在I/O校準成功後,你可以在dba_rsrc_io_calibrate表查看校準結果,為了更好的理解I/O校準過程,我們拿台普通的台式機來進行下示範,看下是如何進行IO校準操作的。
通過v$io_calibration_status可以查看執行狀態,可以看到進程正在執行,如下
在作業系統的工作管理員的效能監控中可以看到,每個資料檔案都產生大量的IO讀取,Oracle就是通過這種讀取操作來進行儲存效能的評估。
最後在DBA_RSRC_IO_CALIBRATE視圖中,可以查詢到本次IO校準的各個效能指標值如下,本次測試的儲存效能,每秒持續讀取資料區塊請求的最大數量(max_iops)為60,每秒最大可讀取(max_mbps)為43mbps,單個進程每秒最大可讀取(max_pmbps)為39mbps,讀取資料區塊請求出現有16次延遲
這裡我們注意了同樣的IO校準執行2次,結果也會有所差異,不可能幾次執行結果100%相同,這是因為儲存效能涉及的因素非常多,比如當時儲存的繁忙狀態、溫度、IO請求等,這些都會對校準有細微的影響,但是總的範圍還是不會有太大的出入。
效能判斷
通過校準我們得到了一些指標,那麼怎樣的儲存效能才是滿足業務需求的呢?嚴格意義上說,當然是IOPS越大,輸送量越大越好,但是成本也會增加,因此實際情況下還是要根據使用者業務的實際情況判斷,合適就可以了。使用者的IO需求可以通過業務高峰期AWR報告進行查看,通過產生業務高峰期的AWR報告,查看報告中的other instance activity stats這部分內容擷取,以某使用者的AWR效能報告為例,重點關注這幾個指標[physical read total IOrequests],[ physical read total bytes],[ physical write total IO requests],[ physicalwrite total IO requests]每秒的值,因為我們IO校準也是以每秒為單位的統計。
我們可以計算出物理讀和寫每秒總的請求為70.74+80.62≈151次,物理讀和寫的每秒的大小為1.32+1.09≈2.41mbs=19.28mbps,有了這個參照,那我們儲存校準的最大IOPS就應該不能低於151,每秒的輸送量也不能低於19.28mbps,如果IO校準接近或者小於這個值就證明儲存效能出現了嚴重的瓶頸,例如我們測試用的機器就無法滿足這個使用者的IO效能需求,需要提升效能以滿足業務的需要。
通過資料庫評估存放裝置IO效能-Oracle 11g IO校準功能介紹