测量Oracle系统的存储性能

原文地址:http://www.oracle-base.com/articles/misc/measuring-storage-performance-for-oracle-systems.php

存储供应商为他们的产品提供了大量的性能数据,但是这些信息不一定反应了用于Oracle数据库时的存储性能。本文概述了一些用于测试存储系统性能的简单方法,包括Oracle提供的一些实用工具。

Oracle实用工具使用模拟负载仿真Oracle数据库的操作类型。

DD

可以通过计算dd命令写入的时间,快速粗略地测试磁盘的性能。

# time sh -c "dd if=/dev/zero f=dd-test-file bs=8k count=1000000 && sync"

1000000+0 records in

1000000+0 records out

8192000000 bytes (8.2 GB) copied, 126.739 seconds, 64.6 MB/s

real    2m9.576s

user    0m0.147s

sys     0m12.234s


# ls -l dd-test-file

-rw-r--r-- 1 root root 8192000000 Mar  7 11:36 dd-test-file

这种方法不能反应通过Oracle系统访问时的磁盘性能。

ORION

ORION(ORacle IO Numbers)模拟Oracle数据库执行的I/O类型,用于不需要安装Oracle时测量存储系统的I/O性能。下载地址:http://www.oracle.com/technetwork/cn/topics/index-088165-zhs.html

下载对于平台的文件后进行解压,修改文件的可执行权限:

# gunzip orion_linux_x86-64.gz

# chmod u+x orion_linux_x86-64

使用以下命令显示帮助信息。

# ./orion_linux_x86-64 -help

执行测试之前需要知道Oracle使用的LUN。本文使用虚拟机进行测试,因此使用ext3文件系统伪造几个LUN。

# mkdir /luns

# dd if=/dev/zero f=/luns/lun1 bs=1024k count=10

# dd if=/dev/zero f=/luns/lun2 bs=1024k count=10

# dd if=/dev/zero f=/luns/lun3 bs=1024k count=10

# dd if=/dev/zero f=/luns/lun4 bs=1024k count=10

接下来,创建一个LUN配置文件。假设测试名为“ob-test”,因此配置文件名为“ob-test.lun”。确认配置文件与ORION可执行文件位于同一目录。文件内容如下:

/luns/lun1

/luns/lun2

/luns/lun3

/luns/lun4

如果没有指定测试名,默认为“orion”,配置文件名为“orion.lun”。

接下来是运行测试。以下运行的是一个全格点的测试,比较一系列小的I/O操作(8K)与大的I/O操作(1M)的性能。使用“normal”选项运行可能需要很长的时间,因此可以首先尝试运行“basic”选项。

# ./orion_linux_x86-64 -run normal -testname ob-test
ORION: ORacle IO Numbers -- Version 11.1.0.7.0
ob-test_20100720_1229
Test will take approximately 190 minutes
Larger caches may take longer

测试完成之后,在ORION程序目录将会创建几个新文件,包含了每个测试的IOPS、MBPS以及等待时间。此次运行产生的文件包括:

ob-test_20100720_1229_summary.txt
ob-test_20100720_1229_iops.csv
ob-test_20100720_1229_mbps.csv
ob-test_20100720_1229_lat.csv
ob-test_20100720_1229_trace.txt

记住,仿真都不是完美的,但是测试结果能够让你知道存储系统能够达到的性能。

DBMS_RESOURCE_MANAGER.CALIBRATE_IO

在Oracle Database 11g Release 1中引入的过程CALIBRATE_IO从Oracle内部提供了获取存储系统性能的方法。该过程的使用存在一些限制。

  • 该过程的调用需要SYSDBA权限。
  • TIMED_STATISTICS参数必须设置为TRUE,这是STATISTICS_LEVEL参数设置为TYPICAL时的默认值。
  • 数据文件必须使用异步I/O进行访问,这是使用ASM时的默认设置。

可以通过以下查询检查数据文件当前的异步I/O设置。

SELECT d.name,
       i.asynch_io
FROM   v$datafile d,
       v$iostat_file i
WHERE  d.file# = i.file_no
AND    i.filetype_name  = 'Data File';

NAME                                               ASYNCH_IO
-------------------------------------------------- ---------
/u01/app/oracle/oradata/DB11G/system01.dbf         ASYNC_OFF
/u01/app/oracle/oradata/DB11G/sysaux01.dbf         ASYNC_OFF
/u01/app/oracle/oradata/DB11G/undotbs01.dbf        ASYNC_OFF
/u01/app/oracle/oradata/DB11G/users01.dbf          ASYNC_OFF
/u01/app/oracle/oradata/DB11G/example01.dbf        ASYNC_OFF

5 rows selected.

要打开异步I/O,提交以下命名并重启数据库。

ALTER SYSTEM SET filesystemio_options=setall SCOPE=SPFILE;

如果存储支持异步I/O,ASYNC_IO标记现在应该发生了改变。

SELECT d.name,
       i.asynch_io
FROM   v$datafile d,
       v$iostat_file i
WHERE  d.file# = i.file_no
AND    i.filetype_name  = 'Data File';

NAME                                               ASYNCH_IO
-------------------------------------------------- ---------
/u01/app/oracle/oradata/DB11G/system01.dbf         ASYNC_ON
/u01/app/oracle/oradata/DB11G/sysaux01.dbf         ASYNC_ON
/u01/app/oracle/oradata/DB11G/undotbs01.dbf        ASYNC_ON
/u01/app/oracle/oradata/DB11G/users01.dbf          ASYNC_ON
/u01/app/oracle/oradata/DB11G/example01.dbf        ASYNC_ON

5 rows selected.

然后运行以下代码调用该过程。

CONN / AS SYSDBA

SET SERVEROUTPUT ON
DECLARE
  l_latency  PLS_INTEGER;
  l_iops     PLS_INTEGER;
  l_mbps     PLS_INTEGER;
BEGIN
   DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 1,
                                       max_latency        => 20,
                                       max_iops           => l_iops,
                                       max_mbps           => l_mbps,
                                       actual_latency     => l_latency);
 
  DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops);
  DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps);
  DBMS_OUTPUT.put_line('Latency  = ' || l_latency);
END;
/

Max IOPS = 95
Max MBPS = 449
Latency  = 20

PL/SQL procedure successfully completed.

除了在屏幕显示之外,校准结果可以通过视图DBA_RSRC_IO_CALIBRATE进行查看。

SET LINESIZE 100
COLUMN start_time FORMAT A20
COLUMN end_time FORMAT A20

SELECT TO_CHAR(start_time, 'DD-MON-YYY HH24:MI:SS') AS start_time,
       TO_CHAR(end_time, 'DD-MON-YYY HH24:MI:SS') AS end_time,
       max_iops,
       max_mbps,
       max_pmbps,
       latency,
       num_physical_disks AS disks
FROM   dba_rsrc_io_calibrate;

START_TIME           END_TIME               MAX_IOPS   MAX_MBPS  MAX_PMBPS    LATENCY      DISKS
-------------------- -------------------- ---------- ---------- ---------- ---------- ----------
20-JUL-010 18:07:21  20-JUL-010 18:13:55          95        449        461         20          1

校准过程可以通过视图V$IO_CALIBRATEION_STATUS进行监控。

SLOB

除了以上方法之外,还可以尝试Kevin Closson的SLOB工具。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-756687/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24945919/viewspace-756687/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值