author:skate
time:2009/09/09
1. linux开启AIO
从Oracle9iR2开始支持Linux上的异步IO,但是Oracle9iR2和Oracle10gR1中的AIO模块默认是disable的,如果要启用必须relink一下
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk async_on
make -f ins_rdbms.mk ioracle
当然,如果要关闭AIO支持,只需要使用async_off选项进行relink即可。在Oracle10gR2中AIO默认已经是开启的了。
可以通过ldd或者nm来检查oracle是否已经启用了AIO支持,有输出代表已经启用
说明:
ldd:能够显示可执行模块的dependency
nm:这个命令列出目标文件的符号。如果没有指定目标文件,默认是a.out
oracle@dbolap ~]$ ldd /home/oracle/oracle/product/10.2.0/db_1/bin/oracle |grep libaio
libaio.so.1 => /usr/lib64/libaio.so.1 (0x0000003036e00000)
[oracle@dbolap ~]$ nm /home/oracle/oracle/product/10.2.0/db_1/bin/oracle |grep io_getevent
w io_getevents@@LIBAIO_0.4
当然,Linux也必须已经安装了AIO相关的package
[oracle@dbolap ~]$ rpm -qa |grep aio
libaio-devel-0.3.105-2
libaio-0.3.105-2
可以通过查看slabinfo统计信息查看操作系统中AIO是否运行,slab是Linux的内存分配器,AIO相关的内存结构已经分配的话(第二列和第三列非0)说明AIO已经启用
cat /proc/slabinfo | grep kio
kioctx 102 170 384 10 1 :tunables 54 27 8 : slabdata 17 17 0
kiocb 488 495 256 15 1 :tunables 120 60 8 : slabdata 33 33 120
最后,还需要在Oracle中设置相关的初始化参数来使用AIO
disk_asynch_io = true
filesystemio_options = asynch #文件系统才需要
查看与修改
SQL> show parameter disk_asynch
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
disk_asynch_io boolean TRUE
SQL> show parameter filesystem
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
filesystemio_options string none
SQL> alter system set filesystemio_options=asynch scope =spfile;
System altered.
2.linux系统的块的大小
查看os系统块的大小
[root@dbolap ~]# /sbin/tune2fs -l /dev/sda1 |grep Block
Block count: 255024
Block size: 4096
Blocks per group: 32768
查看os页的大小
[root@dbolap ~]# getconf PAGESIZE
4096
[root@dbolap ~]#
块的大小修改:
是在创建文件系统时,指定块的大小
参考:
http://blog.csdn.net/wyzxg/archive/2008/03/13/2176520.aspx
3. linux的最大io:可以自己测试,例如用dd命令
dd if=/dev/zero of=/file 测试磁盘的纯写入性能
dd if=/file of=/dev/null 测试磁盘的纯读取性能
dd if=/file1 of=/file2 测试磁盘的读写性能
例如:
[root@dbolap ~]# time dd if=/dev/zero of=/u01/disk_test bs=8192 count=1000k
1024000+0 records in
1024000+0 records out
real 2m14.593s
user 0m0.268s
sys 0m25.777s
共用了135秒然后人工的粗略计算下
SQL> select 8192*1000000/1024/1024/135 from dual;
8192*1000000/1024/1024/135
--------------------------
57.8703703703704
然后在用iostat对比下
[root@dbolap ~]# iostat -d -x 2
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 13884.92 1.01 191.46 8.04 112542.71 4.02 56271.36 584.79 193.75 945.48 5.22 100.55
sda1 0.00 2.51 0.00 0.00 0.00 24.12 0.00 12.06 0.00 0.50 0.00 0.00 50.45
sda2 0.00 13873.37 1.01 187.94 8.04 112434.17 4.02 56217.09 595.11 190.78 935.43 5.32 100.55
sda3 0.00 1.01 0.00 1.01 0.00 12.06 0.00 6.03 12.00 1.05 1898.50 1000.50 100.55
sda4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda6 0.00 7.54 0.00 2.51 0.00 64.32 0.00 32.16 25.60 1.21 1320.00 400.20 100.55
sda7 0.00 0.50 0.00 0.00 0.00 8.04 0.00 4.02 0.00 0.21 0.00 0.00 20.60
sda8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 1.51 0.00 12.06 0.00 6.03 8.00 3.10 3163.67 667.00 100.55
dm-1 0.00 0.00 1.01 14054.27 8.04 112434.17 4.02 56217.09 8.00 14686.34 966.93 0.07 100.55
可以看出两个值还是差不多的,很接近的
参考:
http://blog.csdn.net/wyzxg/archive/2008/03/13/2176520.aspx
sar命令说明
http://bbs.chinaunix.net/viewthread.php?tid=778325
dd命令参考
http://yayi.biz/post/13.html
4.linux的iops的计算
root@dbolap ~]# iostat -d sda 2
Linux 2.6.9-78.ELsmp (dbolap.happypool.cn) 09/11/2009
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 7.40 5.41 721.20 7381654 984168616
sda 176.38 393.97 72156.78 784 143592
sda 230.85 963.18 99781.09 1936 200560
sda 253.77 470.35 127557.79 936 253840
sda 181.50 224.00 103668.00 448 207336
sda 173.50 600.00 109528.00 1200 219056
sda 181.09 517.41 65747.26 1040 132152
sda 200.00 508.00 115660.00 1016 231320
sda 172.00 288.00 72068.00 576 144136
sda 188.44 574.87 126653.27 1144 252040
sda 189.05 306.47 101213.93 616 203440
iostat的tps代表:每秒io的说量
tps:
Indicate the number of transfers per second that were
issued to the device. A transfer is an I/O request to the
device. Multiple logical requests can be combined into a
single I/O request to the device. A transfer is of inde-
terminate size
在只有的IO压力下,这个数据可以认为就是表征磁盘处理能力的iops,同时通过vmstat观察系统资源情况,
查看是否还有其他压力
[root@dbolap ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 20 122316 28260 6180 1703804 0 0 1 91 7 3 0 0 99 1
0 19 122316 25452 6260 1703452 0 0 106 59678 1218 238 0 5 17 78
0 19 122312 28012 6056 1699104 0 0 52 53200 1234 239 0 8 8 84
1 19 122312 25004 6056 1717940 0 0 114 22970 1202 252 0 7 9 83
0 17 122312 27620 5980 1714148 0 0 116 49656 1208 333 0 7 31 62
0 17 122312 27476 5912 1710884 0 0 128 47120 1225 339 0 7 11 82
0 21 122312 25108 5876 1711736 0 0 54 57868 1219 328 0 8 4 89
0 20 122312 28628 5988 1706728 0 0 90 50950 1210 333 0 6 12 81
1 20 122312 25940 6088 1705744 0 0 82 55006 1200 223 0 7 0 93
0 22 122312 26116 6044 1702452 2 0 104 50190 1216 223 0 6 0 94
0 22 122308 27396 6112 1698036 0 0 58 48906 1203 550 0 6 0 94
0 22 122308 29260 6116 1695448 0 0 50 37316 1229 232 0 6 0 94
0 28 122308 24300 6072 1695832 0 0 290 51034 1234 267 0 6 0 93
此时系统iowait很高,可以近似认为IO负载达到了峰值。
还可以用其他软件测试
orion,一款由Oracle公司提供,专门用于模拟数据库运行机制来测试存储的优秀IO存储测试软件,可以在不运行oracle数据库的情况下,仿真OLTP随机操作
http://www.ixdba.com/html/y2007/m06/125-orion-storage-test.html
5.linux的吞吐量
影响存储的iops: cache的算法(一般在oltp系统,cache的命中率在20%左右,)
磁盘的数量
影响存储吞吐量:磁盘的数量
存储的架构
SAN和NAS存储一般都具备2个评价指标:IOPS和带宽(throughput),两个指标互相独立又相互关联。体现存储系统性能的最主
要指标是IOPS。
IOPS(I/Os per second):即每秒输入输出次数。指的是系统在单位时间内能处理的最大的I/O频度;一般,OLTP应用涉及更多的
频繁读写,更多的考虑IOPS;
IOPS测试结果与很多测试参数和存储系统具体配置有关。IOPS还可以细分为100%顺序读(Sequential Read)IOPS、100%顺序
写IOPS、100%随机读IOPS、100%随机写IOPS等,在同等情况下这四种IOPS中100%顺序读的IOPS最高。
厂商公布的经常是IOPS很高的100%顺序读IOPS指标,但多数用户实际使用的环境既有顺序读写、也有随机读写操作;传输数
据块尺寸大小都有;所以产品在用户实际使用环境中性能自然就比标注的指标差。
较权威的存储性能基准测试:SPC和SPC-1 IOPS™
SPC(Storage Performance Council)即存储性能理事会。
SPC的SPC-1基准测试主要是针对随机I/O应用环境的,SPC-2基准测试主要是针对顺序I/O应用环境的。SPC-1基准测试很好地
模拟了OLTP、数据库和e-mail等真实应用环境,使SPC-1基准测试结果具有很高权威性和可比性。
SPC-1基准测试虽然规定了严格的顺序和随机读写比例和数据块尺寸以及在何种磁盘负载情况下取值,但没有规定被测存储
产品使用多少个磁盘,也没有规定被测存储产品设置何种RAID级别。好在存储性能理事会(SPC)要求测试报告必须详细地列出被
测存储系统的配置和价格。
SPC网站(http://www.storageperformance.org/results)上公布了大多数存储厂商的存储产品的SPC-1基准测试报告,通过
查询这些报告中的SPC-1 IOPS™值和测试报告中所描述的被测存储产品的磁盘总数,用户就可以根据下列公式快速估算你所采购
配置的某一存储产品实际性能和可靠性:
·实际性能(实际SPC-1 IOPS™)= [实际采购存储系统的磁盘数 / 测试报告中被测系统的磁盘数] X 测试报告的SPC-1 IOPS™
·可靠性:MTTFarray=MTTFdisk / 实际采购存储系统的磁盘数
throughput:指的是单位时间内最大的I/O流量;一些大量的顺序文件访问,例如流媒体,更多的考虑throughput指标。
带宽决定于整个阵列系统,与所配置的磁盘个数也有一定关系;而IOPs则基本由阵列控制器完全决定。在Web、E-mail、
数据库等小文件频繁读写的环境下,性能主要由IOPs决定。在视频、测绘等大文件连续读写的环境下,性能主要由带宽
决定。可见,在不同的应用方式中,需要考察的侧重点也不同。对NAS产品来说,主要性能指数也是两个:OPS和ORT,分
别代表每秒可响应的并发请求数和每个请求的平均反应时间。对磁带存储设备来说,单个磁带驱动器的读写速度是最重
要的性能指标。
--end---