1. 程式人生 > >關於IOPS指標對效能的影響

關於IOPS指標對效能的影響

1.2 示例

Device

Type

IOPS

Interface

Notes

7,200 rpm SATA drives

HDD

~75-100 IOPS[2]

SATA 3 Gb/s

10,000 rpm SATA drives

HDD

~125-150 IOPS[2]

SATA 3 Gb/s

15,000 rpm SAS drives

HDD

~175-210 IOPS [2]

SAS

二. IOPS 說明     2.1 IOPS (Input/OutputPer Second)

IOPS 即每秒的輸入輸出量(或讀寫次數),是衡量磁碟效能的主要指標之一。

IOPS是指單位時間內系統能處理的I/O請求數量,一般以每秒處理的I/O請求數量為單位,I/O請求通常為讀或寫資料操作請求。隨機讀寫頻繁的應用,如OLTP(OnlineTransaction Processing),IOPS是關鍵衡量指標。

另一個重要指標是資料吞吐量(Throughput)指單位時間內可以成功傳輸的資料數量。對於大量順序讀寫的應用,如VOD(Video On Demand),則更關注吞吐量指標。

傳統磁碟本質上一種機械裝置,如FC, SAS, SATA磁碟,轉速通常為5400/7200/10K/15K rpm不等。影響磁碟的關鍵因素是磁碟服務時間,即磁碟完成一個I/O請求所花費的時間,它由尋道時間、旋轉延遲和資料傳輸時間三部分構成。

(1)尋道時間

Tseek是指將讀寫磁頭移動至正確的磁軌上所需要的時間。尋道時間越短,I/O操作越快,目前磁碟的平均尋道時間一般在3-15ms。

(2)旋轉延遲

Trotation 是指碟片旋轉將請求資料所在扇區移至讀寫磁頭下方所需要的時間。旋轉延遲取決於磁碟轉速,通常使用磁碟旋轉一週所需時間的1/2表示。比如,7200 rpm的磁碟平均旋轉延遲大約為60*1000/7200/2 = 4.17ms,而轉速為15000 rpm的磁碟其平均旋轉延遲約為2ms。

(3)資料傳輸時間

Ttransfer是指完成傳輸所請求的資料所需要的時間,它取決於資料傳輸率,其值等於資料大小除以資料傳輸率。目前IDE/ATA能達到133MB/s(MBPS),SATA II可達到300MB/s的介面資料傳輸率,資料傳輸時間通常遠小於前兩部分時間。

IOPS(每秒IO次數) = 1s/(尋道時間+旋轉延遲+資料傳輸時間)

因此,理論上可以計算出磁碟的最大IOPS,即IOPS = 1000ms/ (Tseek + Troatation),忽略資料傳輸時間。假設磁碟平均物理尋道時間為3ms, 磁碟轉速為7200,10K,15Krpm,則磁碟IOPS理論最大值分別為:

IOPS = 1000 / (3 + 60000/7200/2)  = 140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200

2.2 固態硬碟的IOPS

固 態硬碟SSD是一種電子裝置, 避免了傳統磁碟在尋道和旋轉上的時間花費,儲存單元定址開銷大大降低,因此IOPS可以非常高,能夠達到數萬甚至數十萬。實際測量中,IOPS數值會受到 很多因素的影響,包括I/O負載特徵(讀寫比例,順序和隨機,工作執行緒數,佇列深度,資料記錄大小)、系統配置、作業系統、磁碟驅動等等。因此對比測量磁 盤IOPS時,必須在同樣的測試基準下進行,即便如何也會產生一定的隨機不確定性。

通常情況下,IOPS可細分為如下幾個指標:

Toatal IOPS:混合讀寫和順序隨機I/O負載情況下的磁碟IOPS,這個與實際I/O情況最為相符,大多數應用關注此指標。

Random Read IOPS:100%隨機讀負載情況下的IOPS。

Random WriteIOPS:100%隨機寫負載情況下的IOPS。

Sequential ReadIOPS:100%順序負載讀情況下的IOPS。

Sequential WriteIOPS:100%順序寫負載情況下的IOPS。

三.ORION 工具說明

ORION (OracleI/O Calibration Tool) Oracle 公司推出的一個校準資料庫的儲存系統 I/O 效能的獨立工具。有關該工具的說明,參考:

我們使用ORION 工具測試一下看看:

[[email protected] software]# cat dave.lun

/dev/sdb1

[[email protected] software]#  ./orion_linux_x86-64 -run advanced -testname dave -num_disks 2 

ORION: ORacle IO Numbers -- Version11.1.0.7.0

dave_20111026_2026

Test will take approximately 16 minutes

Larger caches may take longer

檢視生成的結果:

[[email protected] software]# ls dave*

dave_20111026_2026_iops.csv  dave_20111026_2026_summary.txt  dave.lun_20111026_2025_summary.txt

dave_20111026_2026_lat.csv   dave_20111026_2026_trace.txt

dave_20111026_2026_mbps.csv  dave.lun

[[email protected] software]# cat dave_20111026_2026_summary.txt

ORION VERSION 11.1.0.7.0

Commandline:

-run advanced -testname dave -num_disks 2

This maps to this test:

Test: dave

Small IO size: 8 KB

Large IO size: 1024 KB

IO Types: Small Random IOs, Large RandomIOs

Simulated Array Type: CONCAT

Write: 0%

Cache Size: Not Entered

Duration for each Data Point: 60 seconds

Small Columns:,      0

Large Columns:,      0,     1,      2,      3,     4

Total Data Points: 15

Name: /dev/sdb1 Size: 449495069184

1 FILEs found.

Maximum Large MBPS=159.61 @ Small=0 andLarge=4

Maximum Small IOPS=534 @ Small=10 andLarge=0

Minimum Small Latency=4.97 @ Small=1 andLarge=0

這裡顯示的吞吐量是160MBPS. IOPS 為534.

kd

Orion可以支援下列IO負載

1. 小的隨機的IO:OLTP的應用主要是隨機的讀寫,大小和資料的塊大小一樣(一般是8K)。
這樣的應用主要是關注的吞吐量是IOPS和一個請求的平均延時時間。Orion可以模擬一個
隨機IO負載。指定的讀寫百分比,指定的IO大小,指定的IOs,IOs是分佈在不同的磁碟上。

2. 大的連續的IO:資料倉庫的應用,資料裝載,備份,和恢復會產生連續的讀寫流,這些
讀寫是由多個1M的IO組成的。這些應用都是處理大資料量的資料,主要是關注總體的資料
吞吐量MBPS

3. 大的隨機的IO: 一個連續的讀寫和其他的資料庫活動同時訪問磁碟。基於條帶化,一個
連續的讀寫擴充套件到多個磁碟上。因此,在磁碟的這個層次上,許多的連續的讀寫被看作隨機
的1M的IO,又被稱作多使用者的連續IO。

4. 混合的負載: Orion可以同時模擬前倆種負載:小的隨機的IO,大的連續的IO。這將使你
可以模擬,OLTP的8K的隨機讀寫的負載和4個連續的1M IO讀寫的備份的負載。

針對不同的IO負載,Orion可以在不同的IO壓力測試並得到效能引數:MBPS,IOPS,和IO
延遲時間。負載是術語,代表非同步的IOs的數目。內部本質來說,每一個負載層次,Orion
軟體一直在儘快的發I/O請求來完成這個層次的I/O負載。針對隨機的負載(大的和小的),
負載的層次就是I/Os的數目。針對大的連續的負載,負載的層次就是連續的讀寫流和每次
讀寫流的IO的數目。在負載層次範圍內測試指定的負載將幫助使用者理解效能是怎麼受影響的。

測試目標:

理論上,ORION可以用來測試任何支援非同步的字元裝置。ORION已經在下列型別的裝置上測試過。

1. DAS(directed_attatched)的儲存:
2. SAN(storage-area network)的儲存:
3. ORION沒有在NAS(network-attached storage).

ORION對儲存裝置的供應商:
供應商可以用ORION來理解Oracle是如何來在儲存上執行的。也可以用Orion來找出適合
Oracle最好的儲存配置。

ORION對Oracle管理員
Oracle管理員可以根據期望的工作量使用Orion來評估和比較不同的儲存陣列。他們也可以
用Orion來決定峰值時優化的網路連線數,儲存陣列數,儲存陣列控制器數,和磁碟數。附
錄A描述了根據資料庫現在的工作量來推測IOPS和MBPS需求。

開始使用Orion
1. 下載orion: 有Linux/x86,Solaris/SPARC 和Windows/x86版本
2. 安裝Orion
   Linux/Solaris:解壓Orion執行檔案。
   gunzip orion_linux_x86-64.giz
   Windows: 執行安裝程式
   C:\temp> orion_windows_x86-64.msi
  
3. 選擇測試名,我們使用的名是mytest

4. 建立檔名 mytest.lun,例如:
   /dev/raw/raw1
   /dev/raw/raw2
   ...
   /dev/raw/raw8

5. 驗證裝置是不是可以訪問。Linux可以用下面的命令:
   $ dd if=/dev/raw/raw1 f=/dev/null bs=32k count=1024
 1024+0 records in
 1024+0 records out
  
6. 驗證在你的平臺上已經有非同步IO的類庫。Orion測試完全是依賴非同步的IO。在linux和
solaris,類庫libaio需要安裝並被訪問。環境變數名是LD_LIBRARY_PATH或者是LIBPATH,
window已經安裝非同步IO。

7. 第一次測試,建議使用simple,simple測試衡量在不同的負載下的小隨機讀和大的隨
機讀。這些結果給我一些想法,不同型別的IO和負載下的IO效能。simple測試的命令:

 ./orion_linux_x86-64 -run simple -testname mytest -num_disks 4

ORION: ORacle IO Numbers -- Version 11.1.0.7.0
mytest_20101218_2205
Test will take approximately 30 minutes
Larger caches may take longer

Orion生成的IO負載層次考慮了在mytest.lun檔案中磁碟的數目。

8. 結果將被記錄在輸出檔案中。

輸出檔案:

Orion將產生幾個輸出檔案,

1. mytest_summary.txt: 這個檔案包含:
 a. 輸入引數
 b. 針對大的隨機和連續的工作量下觀察到的最大的吞吐量
 c. 針對小的隨機的工作量的IO速率
 d. 針對小的隨機的工作量的最小的延遲時間。

[[email protected] software]# more mytest_20101218_2205_summary.txt
ORION VERSION 11.1.0.7.0

Commandline:
-run simple -testname mytest -num_disks 4

This maps to this test:
Test: mytest
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      0,      1,      2,      3,      4,      5,      6,      7,      8
Total Data Points: 29

Name: /dev/sda5 Size: 102404703744
Name: /dev/sdb1 Size: 102404703744
Name: /dev/sdc1 Size: 102404703744
Name: /dev/sdd1 Size: 102404703744
4 FILEs found.

Maximum Large MBPS=62.80 @ Small=0 and Large=7
Maximum Small IOPS=647 @ Small=20 and Large=0
Minimum Small Latency=7.32 @ Small=1 and Large=0

2. mytest_mbps.csv檔案:這是個csv檔案。包含大的隨機或者連續的IO工作量。所有的csv
輸出檔案有個2維表。行代表大的IO負載層次。列代表小的IO負載層次。simple測試不包含
大的和小的IO結合。所以MBPS檔案只有一個列,0代表沒有小的IO。

# more mytest_20101218_2205_mbps.csv
Large/Small,      0,      1,      2,      3,      4,      5,      6,      7,   
  8,      9,     10,     11,     12,     13,     14,     15,     16,     17,   
 18,     19,     20
          1,  35.27
          2,  49.03
          3,  55.23
          4,  58.20
          5,  60.33
          6,  60.34
          7,  62.80
          8,  62.44

在這個例子中,當負載層次在5的時候,沒有小的IO操作,我們得到的資料吞吐量是60.33MBPS
我們可以用excel圖形來顯示MBPS的速率。


test_20101218_2205_mbps.csv
Large/Small,      0,      1,      2,      3,      4,      5,      6,      7,   
  8,      9,     10,     11,     12,     13,     14,     15,     16,     17,   
 18,     19,     20
         

3. mytest_iops.csv: 這是個小的隨機的IO工作量的IOPS吞吐量。

4. mytest_lat.csv: 這是個小的隨機的IO工作量下的延遲時間。

# more mytest_20101218_2205_lat.csv
Large/Small,      1,      2,      3,      4,      5,      6,      7,      8,   
  9,     10,     11,     12,     13,     14,     15,     16,     17,     18,   
 19,     20
          0,   7.32,   8.63,   9.93,  11.15,  12.31,  13.38,  14.59,  15.71,  16
.83,  18.23,  19.36,  20.45,  21.77,  23.02,  24.43,  25.73,  27.16,  28.23,  29
.57,  30.87
          1
          2
          3
          4
          5
          6
          7
          8

5. mytest_trace.txt: 包含擴充套件的,未處理的測試輸出。

輸入引數:Orion可以使用命令的引數來測試任意一種工作量。

強制輸入的引數:

run:測試執行的層次,這個選項提供simple,normal,advanced的層次。如果沒有指定
advanced,那麼設定有些非強制的引數(-cache_size和-verbose)將會出錯。
 simple:產生小的隨機的IO和大的連續的IO工作量。在這個選項中,小的隨機的IO和
 大的連續的IO是分開測試的。這個引數對應下列的Orion呼叫:
 ./orion -run advanced -testname mytest \
 -num_disks 4 \
 -size_small 8 -size_large 1024 -type rand \
 -simulate concat -write 0 -duragion 60 \
 -matrix basic

 normal: 除了simple的功能外,還會產生小的隨機的IO和大的連續的IO的結合。
 ./orion -run advanced -testname mytest \
 -num_disks 4 \
 -size_small 8 -size_large 1024 -type rand \
 -simulate concat -write 0 -duragion 60 \
 -matrix detailed

 advanced: 如果用這個選項,使用者需要指定可選的引數。

testname: 輸入檔案必須是.lun

num_disks: 實際測試的物理磁碟的數目。

可選的輸入引數:

help:幫助資訊

size_small: 小的隨機工作量的IO的大小(KB)

size_large: 大的隨機的或者連續工作量的大小(KB)。

type:大的IO的工作量(預設是rand):
 rand:大的隨機的IO
 seq:大的連續的IO

num_streamIO: 每個大的連續讀寫流的IO數目。只是在-type seq下使用。

simulate:大的連續的IO工作量小的資料分佈。
 contact:串聯指定的luns成一個虛擬的卷。在虛擬的捲上的連續的測試從某個點到一個
 lun的結束點。然後再到下一個lun。

 raid0:在指定的luns上條帶化成一個虛擬的卷。條帶的大小是1M(和asm的條帶大小一
 致),可以通過引數-stripe來更改。

write: 和讀相比的寫的百分比,這個引數在小的隨機的和大的連續的IO工作量下適用。在大
的連續的IO,每個讀寫流要麼是讀要麼是寫。這個引數是指只是寫百分比。寫的資料都是垃
圾資料。 寫的測試將破壞的指定的lun。

cache_size: 儲存陣列的讀寫快取大小(MB)。針對大的連續的IO工作量,Orion將在每個測
試點之前warm的cache。使用快取大小來決定快取操作。如果沒有指定,將有個預設值。如果
是0的話,將沒有warm快取。

duration: 每個測試點的時間。(預設是60)

matrix: 混合工作量測試的型別
 basic:沒有混合的工作量,小的隨機的IO和大的連續的IO分開測試。
 detailed:小的隨機的IO和大的連續的IO結合起來測試。
 point: 單個測試點,S代表小的隨機的IO,L代表大的隨機/連續的IO。S -num_small
 L -num_large
 col: 大的隨機/連續的IO
 row: 小的隨機的IO
 max:和detailed一樣,只是在最大的負載下測試工作量。可以用-num_small和
 -num_large引數指定。

num_small: 小的隨機的IO的最大數目。
num_large: 大的隨機的IO或者一個讀寫流的併發數目。

verbose:列印進度和狀態到控制檯。

命令列例子:
 為了理解你的儲存效能,小的隨機讀和大的隨機IO讀工作量,先開始執行:
 ./orion -run simple -num_disks 4 -testname mytest

 測試小的隨機讀和大的隨機讀的IO工作量,執行:
 ./orion -run normal -testname mytest -num_disks 4

 測試32K和1MB隨機讀的組合
 ./orion -run advanced -testname mytest -num_disks 4 -size_small 32 \
 -size_large 1024 -type rand -matrix detailed

 測試1MB連續寫流,模擬1MB的raid-0條帶化
 ./orion -run advanced -testname mytest -num_disk 4 -simulate raid0 \
 -stripe 1024 -write 100 -type seq -matrix col -num_small 0

常見問題:

在.lun中的捲髮生IO錯誤:
 用dd拷貝檔案命令來驗證
 驗證作業系統支援非同步IO
 在linux和solaris中, 類庫libaio必須在類庫路徑中

如果使用的是NAS
 確保檔案系統被載入
 .lun的檔案要包含一個或多個已有檔案,Orion不和目錄或載入點工
 作。檔案要足夠大,能代表你實際資料檔案大小。
 NFS在linux下非同步IO效能很差
 如果測試的時候遇到沒有初始化的或者未寫過的塊的時候,有些智慧的NAS系統
 將產生偽造的資料,解決方法是寫所有的塊。

如果在windows下測試
 在裸裝置上測試的時候,要對映一個碟符

如果是執行32位Orion在64位Linux上
 拷貝一份32位的libaio到64位機器上

如果測試的磁碟數超過30
 你應該使用duration引數,併為每個測試點制定一個更長的時間(120秒)。因
 為Orion讓所有的軸都執行在一個負載下。每個測試點需要加大時間。
 你可能遇到下列的錯誤
  specify a longer -duration value.

類庫的錯誤
 參考第一個常見錯誤
 NT-ONLY:確保oracle的類庫和orion在同一個目錄

遇到”unbelievably good"
 可能有個很大讀寫快取,一般儲存陣列控制器有很大的影響。找出快取的大小,
 並在引數-cache_size中為orion指定。
 卷的大小不夠,嘗試關閉快取。如果其他卷共享儲存,將會看到突出的IO操作。
 
Orion報告長時間執行
 如果num_disks高的話,執行時間也很長。
 引數cache_size影響執行時間,Orion為每個測試點準備快取需要2分鐘。 如
 果你關閉了你的快取,你可以指定引數cache_size=0
 如果指定的引數duration很長,執行時間是很長。

附錄A:分類資料庫的IO負載

為了正確的配置資料庫的儲存裝置,必須瞭解資料庫的效能需求。

 1 IO請求主要是單個塊還是多個塊
  資料庫將發出多個IO請求:並行查詢,查詢大資料量的表掃描,直接資料裝
  載,備份恢復。一般來說,OLTP主要是單個IO請求,DSS資料倉庫是多個IO請
  求。
 2 平均和峰值的IOPS是多少? 寫佔多少百分比。
 3 平均和峰值的MBPS是多少?寫佔多少百分比。

如果你的資料庫IO請求主要是單個塊,那就關注IOPS,如果資料庫IO請求主要是多個
塊,那就關注MBPS。

10gR2資料庫:可以從檢視v$sysstat得到IO的型別。
 單個數據塊的讀:"physical read total IO requests" - "physical read
 total multi block requests"
 多個數據塊的讀:"physical read total multi block requests"
 讀的總和:"physical read total IO requests"
 單個數據塊的寫:"physical write total IO requests" - "physical write
 total multi block requests"
 多個數據塊的寫:"physical write total multi block requests"
 寫的總和:"physical write total IO requests"

使用這些資料,你可以評估在一段時間範圍內(包含正常時間和峰值時間)讀寫的
IOPS和MBPS,

select name, value
  from v$sysstat
 where name in ('physical read total IO requests',
        'physical read total multi block requests',
        'physical write total IO requests',
        'physical write total multi block requests');

NAME VALUE
physical read total IO requests 2068290092
physical read total multi block requests 2255995
physical write total IO requests 9968770
physical write total multi block requests  251551

單個數據塊讀是98%
單個數據塊寫實97%

也可以從awr報表中得到這些資料。
Instance Activity Stats            DB/Inst: DBS108A/dbs108a  Snaps: 8881-8882 

-> Ordered by statistic name                                                   
                                                                               
Statistic                                     Total     per Second     per Trans
-------------------------------- ------------------ -------------- -------------
...
physical read total IO requests              27,791           15.7          38.7
physical read total bytes               319,881,216      180,368.5     444,897.4
physical read total multi block                 115            0.1           0.2
...
physical write total IO requests              4,278            2.4           6.0
physical write total bytes               49,528,320       27,927.1      68,885.0
physical write total multi block                 22            0.0           0.0

附錄B:資料倉庫
在資料倉庫設計和管理的時候,IO效能是一個關鍵的部分,典型的資料倉庫系統是
IO集中,操作在大資料量上,資料載入,重建索引和建立物化檢視。資料倉庫支援
的IO必須設計符合過度的需求。

資料倉庫的儲存配置是根據IO頻寬,而不是總的容量。磁碟的容量比磁碟吞吐量速
率發展快,結果少數幾個磁碟可以儲存大量的資料。但是大量的磁碟不能提供同樣
IO吞吐量。你可以用多個磁碟和管道來得到最大的頻寬。條帶化是一種方法來實現。
實現一個大的條帶大小(1M)來確保時間來定位磁碟和傳輸資料。

orion可以模擬連續的IO吞吐量,例如:
 白天的工作量:當終端客戶,其他應用查詢系統:許多單獨的併發只讀IO
 資料裝載:終端使用者可能訪問資料庫,寫的工作量和一些可能並行讀(也許是
 裝載程式或者終端使用者)
 重建索引和物化檢視:讀寫工作量
 備份:只讀的工作量,可能高的並行度
 
使用下列選項來模擬不同的資料倉庫的工作量

 run:使用advanced來模擬只讀連續的IO
 large:大的連續讀的IO大小。這個引數是os io大小的整數倍。
 type: 使用seq
 num_streamIO: 增加這個引數來模擬並行執行操作。指定計劃的並行度。一個
 好的開始點是CPU數目*一個CPU的執行緒數。
 simulate:如果使用硬體條帶化或者卷管理器條帶化,則使用concat。如果還
 沒有條帶化,比如ASM,則使用raid0。預設條帶大小是1M。
 write:寫佔用的百分比。
 matrix: 使用point來模擬單個連續工作量,或者使用col來模擬不斷增加的大
 的連續的工作量。
 num_large: 最大的大的IOs

./orion -run advanced \
-testname mytest \
-matrix point \
-num_small 0 \
-num_large 4 \
-size_large 1024 \
-num_disks 4 \
-type seq \
-num_streamIO 8 \
-simulate raid0 \
-cache_size 0 \
-write 0
-verbose

 
Commandline:
-run advanced -testname mytest -matrix point -num_small 0 -num_large 4 -size_lar
ge 1024 -num_disks 4 -type seq -num_streamIO 8 -simulate raid0 -cache_size 0 -wr
ite 0

This maps to this test:
Test: mytest
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Sequential Streams
Number of Concurrent IOs Per Stream: 8
Force streams to separate disks: No
Simulated Array Type: RAID 0
Stripe Depth: 1024 KB
Write: 0%
Cache Size: 0 MB
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      4
Total Data Points: 1

Name: /dev/sda5 Size: 102404703744
Name: /dev/sdb1 Size: 102404703744
Name: /dev/sdc1 Size: 102404703744
Name: /dev/sdd1 Size: 102404703744
4 FILEs found.

Maximum Large MBPS=66.88 @ Small=0 and Large=4

從測試資料看,在這種情況下,吞吐量是66.88M。理想的情況下:oracle可以達到95%。
下面的語句4個併發的會話。

select /*+ NO_MERGE(sales) */ count(*) from
 (select /*+ FULL(s) PARALLEL (s,8) */* from all_sales s) sales

在一個很好平衡的資料倉庫配置,應該有足夠的IO來利用CPU。作為一個起始點,可以
使用下列規則:一個GHZ的CPU可以驅動100M。比如說有4個3G的CPUs,那麼你的儲存應
該提供4*3*100=1200MBPS的吞吐量。在RAC環境中,這個數量可以乘以節點的數目。

1. 1 disk
./orion_linux_x86-64 -run simple -num_disks 1 -testname mytest1

ORION VERSION 11.1.0.7.0

Commandline:
-run simple -num_disks 1 -testname mytest1

This maps to this test:
Test: mytest1
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      0,      1,      2
Total Data Points: 8

Name: /dev/sda5 Size: 102404703744
1 FILEs found.

Maximum Large MBPS=29.20 @ Small=0 and Large=2
Maximum Small IOPS=177 @ Small=4 and Large=0
Minimum Small Latency=7.59 @ Small=1 and Large=0

從這裡看到這個磁碟的極限是177IOPS,29.20MBPS。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.10    0.00    0.13   12.38   87.39

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz
sda5         0.00   0.00 164.73  0.60 2635.67    9.62  1317.84     4.81    16.00    

avgqu-sz   await  svctm  %util
    3.01   18.26   6.06 100.22

從IOSTAT的輸出看到當這個磁碟的IOPS是164的時候,%util利用率已經是100%。等待時間是
18ms。

2. 2 disk
./orion_linux_x86-64 -run simple -num_disks 2 -testname mytest2

Commandline:
-run simple -num_disks 2 -testname mytest2

This maps to this test:
Test: mytest2
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      0,      1,      2,      3,      4
Total Data Points: 15

Name: /dev/sda5 Size: 102404703744
Name: /dev/sdb1 Size: 102404703744
2 FILEs found.

Maximum Large MBPS=50.94 @ Small=0 and Large=4
Maximum Small IOPS=330 @ Small=10 and Large=0
Minimum Small Latency=7.41 @ Small=1 and Large=0

從summary檔案中看到兩個磁碟的極限,MBPS是50.94M, IPOS是330。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.15    0.00    0.13   12.51   87.22

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 101.61  0.60 1622.49   14.46   811.24     7.23    16.02     1.03   10.11   7.56  77.29
sdb1         0.00   0.00 99.20  0.40 1600.00   12.85   800.00     6.43    16.19     0.99    9.91   7.50  74.70

從IOSTAT的輸出看到當這個磁碟的IOPS是200的時候,%util利用率已經是77%。等待時間是
10ms。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.18    0.00    0.20   12.44   87.19

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 166.73  0.80 2686.97   16.03  1343.49     8.02    16.13     5.23   31.10   5.93  99.42
sdb1         0.00   0.00 165.73  0.40 2658.12   12.83  1329.06     6.41    16.08     4.87   29.54   5.81  96.47

從IOSTAT的輸出看到當這個磁碟的IOPS是330左右的時候,%util利用率已經是99%。等待時間是
30ms。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.10    0.00    0.20   12.63   87.07

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 52.10  0.60 52533.87    9.62 26266.93     4.81   996.93     3.99   76.08  17.75  93.57
sdb1         0.00   0.00 49.70  0.20 51309.02    6.41 25654.51     3.21  1028.37     3.35   66.33  17.02  84.91

從IOSTAT的輸出看到當這個磁碟的MBPS是51M左右的時候,%util利用率已經是93%。等待時間是
70ms。兩個磁碟的條帶大小是1M。第一塊磁碟:26266.93/52.1 = 504K, 第二塊磁碟:
25654.51/49.7=516K

3. 3 disk
./orion_linux_x86-64 -run simple -num_disks 3 -testname mytest3

Commandline:
-run simple -num_disks 3 -testname mytest3

This maps to this test:
Test: mytest3
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      0,      1,      2,      3,      4,      5,      6
Total Data Points: 22

Name: /dev/sda5 Size: 102404703744
Name: /dev/sdb1 Size: 102404703744
Name: /dev/sdc1 Size: 102404703744
3 FILEs found.

Maximum Large MBPS=73.25 @ Small=0 and Large=6
Maximum Small IOPS=492 @ Small=15 and Large=0
Minimum Small Latency=7.30 @ Small=1 and Large=0

從summary檔案中看到三個磁碟的極限,MBPS是73.25M, IPOS是492。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.13    0.00    0.20   12.41   87.27

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 108.40  0.80 1731.20   16.00   865.60     8.00    16.00     1.34   12.32   7.24  79.02
sdb1         0.00   0.00 104.60  0.40 1676.80   12.80   838.40     6.40    16.09     1.16   11.03   6.99  73.36
sdc1         0.00   0.00 100.00  0.40 1609.60   12.80   804.80     6.40    16.16     1.14   11.23   7.16  71.88

從IOSTAT的輸出看到當三個磁碟的IOPS是300的時候,%util利用率已經是70%。等待時間是
10ms。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.15    0.00    0.23   12.26   87.37

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 165.13  0.60 2658.12    9.62  1329.06     4.81    16.10     4.84   29.14   5.87  97.25
sdb1         0.00   0.00 160.72  0.20 2581.16    6.41  1290.58     3.21    16.08     4.22   26.16   6.01  96.65
sdc1         0.00   0.00 160.92  0.20 2571.54    6.41  1285.77     3.21    16.00     4.00   25.01   5.95  95.79

從IOSTAT的輸出看到當三個磁碟的IOPS是485的時候,%util利用率已經是97%。等待時間是
29ms。

3. 3 disk
./orion_linux_x86-64 -run simple -num_disks 4 -testname mytest4

ORION VERSION 11.1.0.7.0

Commandline:
-run simple -num_disks 4 -testname mytest4

This maps to this test:
Test: mytest4
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      0,      1,      2,      3,      4,      5,      6,      7,      8
Total Data Points: 29

Name: /dev/sda5 Size: 102404703744
Name: /dev/sdb1 Size: 102404703744
Name: /dev/sdc1 Size: 102404703744
Name: /dev/sdd1 Size: 102404703744
4 FILEs found.

Maximum Large MBPS=63.24 @ Small=0 and Large=8
Maximum Small IOPS=649 @ Small=20 and Large=0
Minimum Small Latency=7.27 @ Small=1 and Large=0

從summary檔案中看到四個磁碟的極限,MBPS是63.24M, IPOS是649。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.35    0.00    0.20   12.31   87.14

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 92.77  0.60 1487.55   14.46   743.78     7.23    16.09     1.05   11.28   7.22  67.43
sdb1         0.00   0.00 93.57  0.40 1500.40   12.85   750.20     6.43    16.10     1.14   12.11   7.42  69.72
sdc1         0.00   0.00 86.14  0.40 1375.10   12.85   687.55     6.43    16.04     0.96   11.08   7.29  63.13
sdd1         0.00   0.00 86.95  0.00 1394.38    0.00   697.19     0.00    16.04     0.88   10.09   7.21  62.67

從IOSTAT的輸出看到當三個磁碟的IOPS是357的時候,%util利用率已經是70%。等待時間是
10ms。

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.15    0.00    0.33   12.18   87.34

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda5         0.00   0.00 155.51  0.80 2459.32    9.62  1229.66     4.81    15.79     5.40   34.95   6.15  96.11
sdb1         0.20   0.00 163.33  0.40 2619.64    6.41  1309.82     3.21    16.04     5.35   32.73   5.84  95.67
sdc1         0.00   0.00 163.33  0.40 2606.81    6.41  1303.41     3.21    15.96     4.27   26.08   5.88  96.31
sdd1         0.00   0.00 157.92  0.00 2561.92    0.00  1280.96     0.00    16.22     5.09   31.12   5.99  94.67

從IOSTAT的輸出看到當三個磁碟的IOPS是638的時候,%util利用率已經是96%。等待時間是
30ms。

響應時間+IOPS 就說明了系統的當前io狀況啊,響應時間在 10ms 左右能達到的最大iops 能力,
是系統io能力的一個最重要指標。

衡量系統io能力,我們也是關注的高峰期一段時間內穩定執行的狀況

簡單來說,如果一個database在peak time顯示出來的db file sequential/scattered read
average wait time的指標明顯低於7 ms, 那麼,我們不應該把焦點集中在Storage 上。雖然這個
指標不一定說明Storage 效能很好,但是至少表明系統的瓶頸並不在Storage 上1,改善Storage
效能未必能獲得很高回報。反之,如果一個database在peak time顯示出來的db file sequential/
scattered read average wait time的指標明顯高於10 ms,我們可能需要關注Storage的效能是否
存在瓶頸,當然,同時也可以從降低Total IO的角度去處理。

一個random IO的理論時間是:
7ms =  4-5ms(磁碟平均尋道時間)+ 2ms (傳輸時間) + 一些其它的消耗
如果不考慮file system cache hit(raw device/direct IO)  以及storage cache hit , 同時沒
有磁碟競爭,那麼,db file sequntial read的時間就會是 7ms左右.

而由於file system cache hit和storage cache hit的情況下,沒有磁碟競爭的系統db file
sequntial read 會小於 7ms 如果有磁碟競爭,而且競爭產生的延遲> file system cache hit和
storage cache hit的好處,就會大於7ms .10ms 可以說是一個經驗值,就是磁碟競爭產生的延遲
比較高了

相關推薦

關於IOPS指標效能影響

1.2 示例 Device Type IOPS Interface Notes 7,200 rpm SATA drives HDD ~75-100 IOPS[2] SATA 3 Gb/s 10,000 rpm SA

try catch 效能影響

引言 之前一直沒有去研究try catch的內部機制,只是一直停留在了感覺上,正好這週五開會交流學習的時候,有人提出了相關的問題。藉著週末,正好研究一番。 討論的問題 當時討論的是這樣的問題: 比較下面兩種try catch寫法,哪一種效能更好。

mysql觸發器效能影響

大佬們一直說不要用觸發器,觸發器對效能影響很多,但是一直似懂非懂,藉著最近有時間準備清理下公司庫裡的觸發器,研究下觸發器的機制跟對效能影響。想來定義:在MySQL中,觸發器可以在你執行INSERT、UPDATE或DELETE的時候,執行一些特定的操作。在建立觸發器時,可以指定

【百度】大型網站的HTTPS實踐(三)——HTTPS效能影響

HTTPS在保護使用者隱私,防止流量劫持方面發揮著非常關鍵的作用,但與此同時,HTTPS也會降低使用者訪問速度,增加網站伺服器的計算資源消耗。本文主要介紹HTTPS對效能的影響。 HTTPS對訪問速度的影響 在介紹速度優化策略之前,先來看下HTTPS對速度有什麼影響。影響主要來自兩方面:協議互動所增加的網

mysql優化之sql執行流程及表結構(schema)效能影響

part 1 sql執行流程(如下圖所示) 1、客戶端傳送一條查詢到伺服器。 2、伺服器通過許可權檢查後,先檢查查詢快取,命中則直接返回結果。否則進入3。 3、伺服器進行sql解析,預處理,再由優化器根據該sql涉及到的資料表的資訊計算,生成執行計劃。 4.、MySQL根據優化器生成的執行計劃,呼叫儲

cpu 分支預測效能影響

cpu 分支預測對效能的影響 現在的 cpu 一般都支援分支預測功能。維基百科中有以下描述: 在計算機體系結構中,分支預測器(英語:Branch predictor)是一種數位電路,在分支指令執行結束之前猜測哪一路分支將會被執行,以提高處理器的指令流水線的效能。使用分支預

訊息中介軟體學習總結(12)——Kafka與RocketMQ的多Topic效能穩定性的影響比較分析

引言 上期我們對比了RocketMQ和Kafka在多Topic場景下,收發訊息的對比測試,RocketMQ表現穩定,而Kafka的TPS在64個Topic時可以保持13萬,到了128個Topic就跌至0.85萬,導致無法完成測試。我們不禁要問: 為什麼看不到Kafka效能

資料庫新增索引效能影響以及使用場景

1.新增索引後查詢速度會變快   mysql中索引是儲存引擎層面用於快速查詢找到記錄的一種資料結構,索引對效能的影響非常重要,特別是表中資料量很大的時候,正確的索引會極大的提高查詢效率。簡單理解索引,就相當於一本磚頭厚書的目錄部分,通過目錄可以快速查詢到想要找的內容具體所在

測試go多協程併發寫入記憶體和磁碟效能影響

最近希望能把一些過程,由傳統的順序執行改變成併發執行,看這樣的優化是否能帶來效能的提高。於是寫了幾個test來測試帶來的影響。 測試的環境為mac pro,2.3 GHz Intel Core i5(雙核),16GB記憶體。 (1)先測試併發寫入記憶體是否能夠得到效能的提高

nil指標NSDictionary及NSArray初始化的影響

最近在做專案的時候遇到一個挺坑的崩潰問題,是由於NSDictionary初始化時nil指標引起的崩潰。假設我們現在要初始化一個{key1 : value1, key2 : value2, key3 : value3}的NSDictionary,一般有兩種初始化方

MySQL中採用型別varchar(20)和varchar(255)效能上的影響

1.MySQL建立索引時如果沒有限制索引的大小,索引長度會預設採用的該欄位的長度,也就是說varchar(20)和varchar(255)對應的索引長度分別為20*3(utf-8)(+2+1),255*3(utf-8)(+2+1),其中"+2"用來儲存長度資訊,“+1”用來

ceph bluestore bcache 磁碟齊對於效能影響

1. 磁碟劃分: # for sd in a b c d e f g h i j k l m n o ; do fdisk -l /dev/sd${sd} 2>/dev/null| grep "^ 1"; done 1 2048 1953523711 931

sequence cache設定 RAC效能影響

此文章為翻譯轉譯文章: 環境 : 11g 64位 2節點的RAC 開發同事每次上程式碼的時候,建立sequence都是指定“no cache”。長期下來效能很慢。下面分析下: 如果指定CACHE值,Oracle就可以預先在記憶體裡面放置一些Sequence

ABAP RESB表取數效能影響

系統環境: ECC6 EHP7     IBM-P740   192G RAM  IBM-P7+   32CORE   ORACLE 11.2.0.3 症狀: ZPPR0001_NEW生產訂單批量報工程式 ,運行於每天凌晨2:30, 執行速度緩慢。 2015-09-14

ArrayList初始容量效能影響

package testList; import java.util.ArrayList; public class TestLArrayList { public static void main(String[] args) { System.out.prin

Kafka vs RocketMQ——多Topic效能穩定性的影響

引言上期我們對比了RocketMQ和Kafka在多Topic場景下,收發訊息的對比測試,RocketMQ表現穩定,而Kafka的TPS在64個Topic時可以保持13萬,到了128個Topic就跌至0.85萬,導致無法完成測試。我們不禁要問:為什麼看不到Kafka效能暴跌的趨

Nginx快取區記憶體配置大小效能測試的影響

現象:Nginx與應用都在同一臺伺服器(4g記憶體、4核cpu)上,nginx快取區記憶體配置1g,開啟nginx的accesslog,跑圖片終端頁效能指令碼,觀察到accesslog裡面有90%以上的MISS狀態的,nginx快取沒有起到作用,加大nginx快取記憶體為2

再談Python多執行緒--避免GIL效能影響

在Python中使用多執行緒,如果你對GIL本身沒有一定的瞭解;那麼很有可能你只是寫出了正確的多執行緒程式碼,而並沒有達到多執行緒的目的,甚至截然相反的效果。下面介紹了Python中GIL的作用和侷限性,並提供了避免GIL影響效能的幾個建議。 GIL是CPython中特有

Drop TableMySQL的效能影響分析

【問題描述】 最近碰到有臺MySQL例項出現了MySQL服務短暫hang死,表現為瞬間的併發執行緒上升,連線數暴增。 排查Error Log檔案中有page_cleaner超時的資訊,引起我們的關注: 2019-08-24T23:47:09.361836+08:00 0 [Note] InnoDB: page

StringBuilder記憶體碎片效能影響

# StringBuilder記憶體碎片對效能的影響 ## TL;DR: `StringBuilder`內部是由多段`char[]`組成的**半自動連結串列**,因此頻繁從**中間**修改`StringBuilder`,會將原本連續的記憶體分隔為多段,從而影響讀取/遍歷效能。 連續記憶體與不連續記憶體的效