跳转到主要内容

技术研究
对Oracle数据库环境下的磁盘性能分析和测试
IBM 互联网服务器部  房树新 秦宝军

1、         问题背景

某用户使用了多台IBM pSeries服务器作为其关键业务服务器,其中两台M85 服务器(8CPU,8GB 内存)连接IBM 7133 SSA T40磁盘阵列(16 X 36GB Disk)运行其主要对外业务,另外一台F85 服务器使用PCI 4-Channel Ultra3 SCSI RAID Adaper连接四块内置的36GB的磁盘,运行另外的业务。 在日常运行中,系统管理人员发现F85的Oracle查询速度快于M85的Oracle查询速度,同时文件系统方式快于裸设备方式,为查明其原因,IBM工程师与CIECC系统管理人员做了如下的测试工作。

2、测试环境描述

M85 服务器配置:

  • AIX V433,ML09
  • Oracle V9.0.1 RAC Database
  • 8 X 750MHZ CPU, 8GB Memory
  • SSA 160 Adapter

7133 T40 Disk Array: 16 X 36GB Disk, 形成两个RAID5磁盘(由8个36GB磁盘构成),分别在两个RAID5磁盘上建立了两个数据库卷组(VG),存放业务数据。

F85 服务器配置:

  •   AIX V5.1,ML03

  •   Oracle V9.0.2 Database

  •   4 X 600MHZ CPU, 4GB Memory

  •   4-Channel Ultra3 SCSI RAID Adaper

由内置4块36GB磁盘形成了一个RAID5磁盘,在此RAID5磁盘上建立了一个数据库卷组(VG),存放业务数据。

3、测试内容

3.1 测试内容一:数据库查询

选择实际应用中的一个528MB的表(CONT_TEST),不加任何索引,做同样的条件查询,使其做全表查询,比较I/O吞吐。数据库查询条件如下:

select jkhth,ckhth,jkljzz from cont_test  where htpzzh ='番外经加工[2001]进核字第00279号';

我们分别在M85服务器和F85服务器上针对文件系统(jfs)与裸设备(raw device)两种方式进行了上述测试,测试结果如下:

  第一次测试完成时间AIX reboot,       Oracle restart 第二次测试完成时间AIX no reboot,在第一次基础上做查询 第三次测试完成时间AIX no reboot,在第二次基础上做查询
F85 RAW Devicedb_file_multiblock _read_count =16 18.62 SDB物理读块数: 66657DISK IO:34MB/S 7.72 SDB物理读块数: 18758 7.72 SDB物理读块数: 18762
F85 RAW Devicedb_file_multiblock _read_count = 64 17.34 SDB物理读块数: 66657DISK IO:38MB/S 7.31 SDB物理读块数: 18792 7.32 SDB物理读块数: 18794
F85 JFSdb_file_multiblock _read_count =16 20.34 SDB物理读块数: 66657DISK IO:34MB/S 4.82 SDB物理读块数: 18804 4.82 SDB物理读块数: 18805
F85 JFSdb_file_multiblock _read_count =64 20.81 SDB物理读块数: 66657DISK IO:33MB/S 4.81 SDB物理读块数: 18816 4.84 SDB物理读块数: 18818
M85 RAW Devicedb_file_multiblock _read_count =16 31.24 SDB物理读块数: 66642DISK IO:20MB/S 5.10 SDB物理读块数: 0 5.11 SDB物理读块数: 0

3.2 测试内容二:磁盘DD操作

从以上测试可见,M85的DISK IO只有20MB/S,而F85的DISK IO可达34MB/S,为确定磁盘是否是影响整个性能的瓶颈,我们决定使用AIX系统命令dd来评测两种服务器所连接的磁盘速度。

F85通过4-Channel Ultra3 SCSI RAID Adaper将内置4块36GB磁盘形成了一个RAID5磁盘hdisk1,M85通过SSA 160 卡形成两个loop,每个loop连接8个36GB Disk, 形成两个RAID 5磁盘hdisk2,hdisk3。我们分别使用下列命令读取其磁盘上的裸设备rtest:

dd if=/dev/rtest of=/dev/null bs=1024k

可得到F85和M85的顺序读数据的处理速度:

  M85 顺序读 7133 SSA RAID5 Single Loop F85 顺序读Ultra SCSI3 RAID5
DISK IO 44 MB/S 55 MB/S

 

3.3 测试内容三:7133 SSA磁盘DD操作

从以上测试可见,M85的7133 SSA DISK 在运行DD顺序读操作时IO为44MB/S,为确定其原因,我们在IBM公司TSC技术支持中心搭建了一个测试环境,其主要配置如下:

S80 服务器配置:

  •   AIX V5.1,ML03

  •   6 X 600MHZ CPU, 8GB Memory

  •   SSA 160 Adapter

  •   7133 D40 Disk Array: 8 X 18GB Disk,

我们对8块18GB 磁盘配置成如下的几种情况,进行测试:

A.      将8块18GB 磁盘在一个Loop内,形成硬RAID0磁盘

B.      将4块18GB 磁盘在一个Loop内,另外4块18GB 磁盘在另外的Loop内,使用AIX LVM机制,在8个磁盘上创建条带化逻辑卷test,即操作系统级RAID 0

C.      在B情况下,拔掉每个loop中的其中一根连线,即模拟开环状态下的磁盘处理。

D.      将4块18GB 磁盘在一个Loop内形成SSA RAID 0磁盘hdisk3,另外4块18GB 磁盘在另外的Loop内形成SSA RAID 0磁盘hdisk4, 使用AIX LVM机制,在hdisk3和hdisk4磁盘上创建条带化逻辑卷test,stripe size为64K。

E.      将4块18GB 磁盘在一个Loop内,另外4块18GB 磁盘在另外的Loop内, 使用AIX LVM机制,在第一个loop的四块磁盘上创建条带化逻辑卷test,stripe size为64K,即形成操作系统级RAID 0

F.      将在第一个Loop上的4个磁盘创建的条带化逻辑卷test,镜像到另外一个Loop上的4个磁盘上,即形成操作系统级RAID 0+1

我们对以上四种情况,分别使用下列命令读取裸设备rtest,可得到下列测试结果:

dd if=/dev/rtest of=/dev/null bs=1024k

可得到不同情况下的7133 SSA磁盘的顺序读数据性能数据。

  SSA 卡 IO速度 SSA 逻辑盘速度
测试A 8 块18GB 磁盘在一个 Loop 内,形成硬SSA RAID 0 磁盘 44.0 MB/S 44 MB/S
测试4 块18GB 磁盘在一个Loop内,另外4块18GB 磁盘在另外的Loop内,使用 AIX LVM 机制,在 8 个磁盘上创建条带化逻辑卷 test,即操作系统级RAID 0 87.8 MB/S Disks:   % tm_act     Kbps      tps    Kb_read
hdisk3          92.0     11008.0     163.0      11008
hdisk4          95.0     11008.0     163.0      11008
hdisk5          95.0     10944.0     162.0      10944
hdisk6          95.0     10944.0     162.0      10944
hdisk7          97.0     10944.0     162.0      10944
hdisk8          93.0     10944.0     162.0      10944
hdisk9          98.0     11008.0     163.0      11008
hdisk10         98.0     11008.0     163.0      11008
测试C 4 块18GB 磁盘在一个 Loop 内,另外4块18GB 磁盘在另外的 Loop 内,使用 AIX LVM 机制,在8个磁盘上创建条带化逻辑卷 test,即操作系统级 RAID 0,拔掉每个 loop 中的其中一根连线,即模拟开环状态下的磁盘处理。 64.5 MB/S Disks:        % tm_act     Kbps      tps    Kb_read 
hdisk3          82.0     8064.0      63.0       8064        
hdisk4          50.0     8064.0      63.0       8064        
hdisk5          94.0     8064.0      63.0       8064        
hdisk6          94.0     8064.0      63.0       8064        
hdisk7          94.0     8064.0      63.0       8064        
hdisk8          81.0     8064.0      63.0       8064        
hdisk9          95.0     8064.0      63.0       8064        
hdisk10         54.0     8064.0      63.0       8064        
测试D 4 块 18GB 磁盘在一个 Loop 内形成 SSA RAID 0 磁盘hdisk3,另外 4 块 18GB 磁盘在另外的 Loop 内形成 SSA RAID 0 磁盘hdisk4, 使用 AIX LVM 机制,在 hdisk3 和 hdisk4 磁盘上创建条带化逻辑卷 test,stripe size 为64K。 86.1 MB/S Disks:        % tm_act     Kbps      tps    Kb_read
hdisk3          94.0     43072.0     370.0      43072
hdisk4          99.0     43072.0     370.0      43072
测试E 4 块 18GB 磁盘在一个 Loop 内,另外 4 块18GB 磁盘在另外的 Loop 内, 使用 AIX LVM 机制,在第一个 loop 的四块磁盘上创建条带化逻辑卷 test,stripe size 为 64K,即形成操作系统级RAID 0 52.2 MB/S Disks:        % tm_act     Kbps      tps    Kb_read
hdisk3          90.0     13056.0     102.0      13056
hdisk4          96.0     13056.0     102.0      13056
hdisk5          91.0     13056.0     102.0      13056
hdisk6          97.0     13056.0     102.0      13056
测试F 将在第一个 Loop 上的 4 个磁盘创建的条带化逻辑卷 test,镜像到另外一个 Loop 上的 4 个磁盘上,即形成操作系统级 RAID 0+1 63.5 MB/S Disks:        % tm_act     Kbps      tps    Kb_read
hdisk3          68.0     15872.0     124.0      15872        
hdisk4           0.0       0.0                 0.0          0        
hdisk5          66.0     15872.0     124.0      15872        
hdisk6           0.0       0.0                 0.0          0        
hdisk7           0.0       0.0                 0.0          0        
hdisk8          97.0     15872.0     124.0      15872        
hdisk9           0.0       0.0                 0.0          0        
hdisk10         97.0     15872.0     124.0      15872        

 

4、测试结论

通过以上测试,我们可以得出以下结论:

  •   在Oracle 数据库模式下,裸设备方式比文件系统处理速度要快,Oracle读取528MB的表,在裸设备下读取时间为17.34S,文件系统方式下读取时间为20.34S。

  •   对于我们测试的顺序读模式,7133 SSA 160磁盘控制卡比4-Channel Ultra3 SCSI RAID Adaper的吞吐量要高,7133 SSA 160的吞吐量量为88MB/S,4-Channel Ultra3 SCSI RAID Adaper的吞吐量为55MB/S。

  •   对于业务模式为顺序读写的应用,尽量将不同的磁盘摆放在不同的loop上,可充分利用SSA 160卡的吞吐量,单loop的吞吐量为44MB/S, 双loop的吞吐量为88MB/s - 90MB/S。

  •   使用AIX LVM提供的软RAID 0,RAID 0+1,比用SSA卡提供的硬RAID 要快。

  •   在SSA loop被开环(break)的情况下,操作可以照常进行,性能相对闭环仅损失26%。