Oracle磁盤輸入輸出性能調優(yōu):Linux系統(tǒng)下的小型計算機系統(tǒng)接口(SCSI)性能調優(yōu)
本文是講述有關Oracle數據庫磁盤輸入輸出性能和優(yōu)化的各個不同方面的一系列文章中的一篇。每篇技巧性的文章都摘自即將由Rampant科技出版社出版的圖書《Oracle磁盤輸入輸出性能調優(yōu)》,作者是Mike Ault。從該系列文章的主頁上能看到其他即將發(fā)布的部分。
Linux系統(tǒng)下的小型計算機系統(tǒng)接口(SCSI)性能調優(yōu)
在linux系統(tǒng)下,要么通過在啟動命令Grub或Lilo的啟動文件中指定參數、要么通過在文件/etc/modules.conf中指定選項,來對小型計算機系統(tǒng)接口(SCSI)進行性能調優(yōu)。接下來讓我們依次查看這兩種情況的例子。在Linux系統(tǒng)下,可以通過使用帶-Tt選項的命令hdparm來測量這個接口的相對性能。注意,在Linux系統(tǒng)中,IEEE 1394接口被看作是一個SCSI接口。下面的例子是用來對普通的SBP2接口進行性能調優(yōu),但是這些技術也能夠被特定的SCSI驅動器使用。
首先,讓我們看一下這個接口的當前設置。通過在/proc/scsi/sbp2目錄下查看LUN號來獲取這些當前設置信息。本例使用LUN 0。
[root@aultlinux1 root]# cat /proc/scsi/sbp2/0
IEEE-1394 SBP-2 protocol driver (host: ohci1394)
$Rev: 601 $ James Goodwin <jamesg@filanet.com>
SBP-2 module load options:
- Max speed supported: S400
- Max sectors per I/O supported: 255
- Max outstanding commands supported: 8
- Max outstanding commands per lun supported: 1
- Serialized I/O (debug): no
- Exclusive login: no
現(xiàn)在,我們?yōu)榻涌赼s-is運行一個時間測試,來測試其平均速度(多執(zhí)行幾次,取其平均值):
/dev/sda:
Timing buffer-cache reads: 128 MB in 3.99 seconds = 32.08 MB/sec
Timing buffered disk reads: 64 MB in 6.86 seconds = 9.33 MB/sec
[root@aultlinux1 root]# hdparm -Tt /dev/sda
現(xiàn)在,我們設置文件/etc/modules.conf中的SBP2選項的值。我們使顯著命令的數量加倍,設為16,并增加每個LUN的命令數量,設為2:
alias parport_lowlevel parport_pc
alias eth0 3c59x
alias usb-controller usb-ohci
alias eth1 tulip
alias ieee1394-controller ohci1394
alias scsi_hostadapter sbp2
options sbp2 sbp2_max_outstanding_cmds=16 sbp2_max_cmds_per_lun=2
接下來,重啟計算機以使設置生效,并重新查看文件/proc/scsi/sbp2/0中我們的設置
[root@aultlinux1 root]# cat /proc/scsi/sbp2/0
IEEE-1394 SBP-2 protocol driver (host: ohci1394)
$Rev: 601 $ James Goodwin <jamesg@filanet.com>
SBP-2 module load options:
- Max speed supported: S400
- Max sectors per I/O supported: 255
- Max outstanding commands supported: 16
- Max outstanding commands per lun supported: 2
- Serialized I/O (debug): no
- Exclusive login: no
更改了我們的設置后,我們從新運行時間測試:
[root@aultlinux1 etc]# hdparm -Tt /dev/sda
/dev/sda:
Timing buffer-cache reads: 128 MB in 4.03 seconds = 35.36 MB/sec
Timing buffered disk reads: 64 MB in 6.04 seconds = 11.25 MB/sec
僅做了一個簡單的修改,我們提高了這個設備的SCSI速度,比例達120.6%(11.25/9.33*100= 120.6)?傮w而言,會獲得20%的速度提高。隨后,我們把顯著命令的數量再加倍、加四倍,最終達到255倍,我們發(fā)現(xiàn)當設置其值為16時性能達到最頂點(11.25 MB/sec)。如果被調節(jié)的服務器位于一個集群中,所有服務器都應該擁有相同的設置。
Unix系統(tǒng)下的小型計算機系統(tǒng)接口(SCSI)性能調優(yōu)
Unix系統(tǒng)下的小型計算機系統(tǒng)接口(SCSI)性能調優(yōu)依賴于所設計的Unix版本和被調節(jié)的SCSI卡或者主板接口。讓我們看一下Sun的例子。
在任何系統(tǒng)上,包括Sun,系統(tǒng)總線的帶寬是固定的。如果總線上有太多設備的話,將導致比總線能處理的更多的數據量,總而導致競爭和包丟失。
在Sun的Solaris操作系統(tǒng)上,命令prtdiag –v用來報告系統(tǒng)總線的配置信息。通過增加總線上設備的報告能力(使用prtdiag –v命令),并查看它們是否超過了總線的能力,就有可能了解總線是否超負荷。只要有可能,相同的主板上應該放置相似的接口卡,以使中斷被定向到同一個CPU(及其緩沖區(qū))。表3-1顯示了一些典型Sun系統(tǒng)總線的能力信息:
Bus |
Speed |
Width |
Burst Bandwidth |
Sustained Bandwidth |
MBus |
33MHz |
64 bit |
264 MB/s |
86 MB/s |
MBus |
36MHz |
64 bit |
288 MB/s |
94 MB/s |
MBus |
40MHz |
64 bit |
320 MB/s |
105 MB/s |
MBus |
50MHz |
64 bit |
400 MB/s |
130 MB/s |
XDBus |
40MHz |
64 bit |
320 MB/s |
250 MB/s |
XDBus |
50MHz |
64 bit |
400 MB/s |
312 MB/s |
UPA |
72MHz |
128 bit |
1.15 GB/s |
1 GB/s |
UPA |
83.5MHz |
128 bit |
1.3 GB/s |
1.2 GB/s |
UPA |
100MHz |
128 bit |
1.5 GB/s |
1.44 GB/s |
Gigaplane |
83.5MHz |
256 bit |
2.6 GB/s |
2.5 GB/s |
GigaplaneXB |
100MHz |
1024 bit |
12.8 GB/s |
12.8 GB/s |
圖3-1:典型的總線能力