设为首页 收藏本站
查看: 531|回复: 0

[经验分享] oracle capability i/o(压力测试数据库服务器i/o性能)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-23 08:46:56 | 显示全部楼层 |阅读模式
今天是2014-04-21,今天简单只说明一下怎么影响重做数据的一个因素,那就是i/o吞吐量,oracle的介质恢复依赖于i/o,如果i/o存在瓶颈,那么势必会影响备库的介质恢复。
   那么i/o stack包含hbas,存储相关的交换机、存储物理磁盘。那么oracle建议在应用程序部署的时候,建议去验证i/o避免存在问题。但是之前有一个很刺手的问题,那就是如何去验证i/o侧吞吐量,换句话说怎么去验证i/o吞吐量更符合真实的生产环境。
  In Oracle Database 11g, the Real Application Testing feature (Capture/Replay) was introduced to inject real (captured) workload into the system. However, another new 11g feature is available to help assess the I/O capability of the database's storage system, and gauge maximum IOPS and Mbytes/s.
  capability i/o feature 是依据一个数据库内部的函数(dbms_resource_manager.calibrateio()),该函数是oracle database内部集成的,更能满足测试i/o问题,且在最后将输出相关报告信息。
   那么执行这个包需要注意什么呢?
1、权限,必须具有sysdba执行该过程的权限,另外需要打开timed_statistics。
2、确定异步i/o在数据库的所有数据文件和临时文件都已经得到应用启动,我们可以通过v$datafile 和v$iostat_file视图关联进行、确认。
eg:
col name format a50
select name,asynch_io from v$datafile f,v$iostat_file i
where f.file#=i.file_no
and (filetype_name='Data File' or filetype_name='Temp File');
如果异步i/o没有启动,设置disk_asynch_io=true启动该功能,但默认是开启的,如果在linux中最大slots使用完毕,那么将自动关闭噶 功能,这也就是为什么虽然设置了disk_asynch_io=true了却依然没有达到效果。最大的slots可以查看/proc/sys/fs/aio-max-nr  当前使用的可以查看/proc/sys/fs/aio-nr去分别确认。
3、确保服务器只有需要测试的数据库开启,避免 其他应用软件的影响。
4、对于RAC,需要确保所有的实例都开启,因为 将会对所有节点做全面的校对,执行该过程只需在一个实例即可。
5、确保只有一个用户执行一个校对i/o的操作。可以通过v$io_calibration_status查看当前鉴定状态。
另外查看资料了解到有这么几个过程:
The calibration will run in different phases. In the first phase, small block random I/O
workload is performed on each node and then concurrently on all nodes. The second
phase will generate large block sequential I/O on each node. Note, that the Calibrate
I/O is expecting that a datafile is spread across all disks specified in NUM_DISKS
variable. Furthermore, offline files are not considered for file I/O.
一旦执行完毕,其结果将存在于dba_rsrc_io_calibrate表中。

好了。
了解到这些,下面开始去实验操作。让实践得真知。
语法如下:
SET SERVEROUTPUT ON
DECLARE
  lat  INTEGER;
  iops INTEGER;
  mbps INTEGER;
BEGIN
-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat);
   DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat);

  DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
  DBMS_OUTPUT.PUT_LINE ('latency  = ' || lat);
  DBMS_OUTPUT.PUT_LINE ('max_mbps = ' || mbps);
end;
/
参数介绍如下:
Parameter Description
num_physical_disks
Approximate number of physical disks in the database storage(物理磁盘个数 input)

max_latency
Maximum tolerable latency in milliseconds for database-block-sized IO requests(最大可用容忍延迟的毫秒数 input)

max_iops
Maximum number of I/O requests per second that can be sustained. The I/O requests are randomly-distributed, database-block-sized reads.(持续中每秒请求最大i/o的数量 output)

max_mbps
Maximum throughput of I/O that can be sustained, expressed in megabytes per second. The I/O requests are randomly-distributed, 1 megabyte reads.(持续中最大的吞吐量M为单位)

actual_latency
Average latency of database-block-sized I/O requests at max_iops rate, expressed in milliseconds(平均延迟)

环境为oracle linux 6.4 +database 11.2.0.4(RAC 2节点 )+asm 11.2.0.4
对了,另外如果数据库使用的是asm,那么如果验证的死数据文件需要使用datadg中的所有物理磁盘,而不是fra中的物理磁盘。虽然我使用存储化的lun进行的映射,但是
num_physical_disks必须是真实物理磁盘个数,因为是测试是一个磁盘,那么这个参数为1。
1、验证是否启动async i/o
[oracle@rac-one ~]$ sqlplus / as sysdba  

SQL*Plus: Release 11.2.0.4.0 Production on Mon Apr 21 22:35:23 2014  

Copyright (c) 1982, 2013, Oracle.  All rights reserved.  


Connected to:  
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production  
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,  
Data Mining and Real Application Testing options  

SQL> show parameter disk_asynch_io(查看数据库是否启用了异步i/o)  

NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
disk_asynch_io                       boolean     TRUE  
SQL> !  
[oracle@rac-one ~]$ more /proc/sys/fs/aio-max-nr (系统slots最大数量)  
1048576  
[oracle@rac-one ~]$ more /proc/sys/fs/aio-nr (当前使用的slots)  
23680  
[oracle@rac-one ~]$ exit  
exit  

SQL> col name for a50  
SQL> set linesize 200  
SQL> select name,asynch_io from v$datafile f,v$iostat_file i where f.file#=i.file_no and (filetype_name='Data File' or filetype_name='Temp File');      -------------(查看启用了async的文件信息)  

NAME                                               ASYNCH_IO  
-------------------------------------------------- ---------  
+DATADG/rac/datafile/system.262.839537769          ASYNC_ON  
+DATADG/rac/datafile/system.262.839537769          ASYNC_ON  
+DATADG/rac/datafile/sysaux.263.839537911          ASYNC_ON  
+DATADG/rac/datafile/undotbs1.264.839538031        ASYNC_ON  
+DATADG/rac/datafile/undotbs2.266.839538155        ASYNC_ON  
+DATADG/rac/datafile/users.267.839538199           ASYNC_ON  

6 rows selected.  

SQL>   
开始验证i/o:  

SQL> set serveroutput on  
SQL> declare  
  2    lat integer;  
  3    iops integer;  
  4    mbps integer;  
  5  begin  
  6  --dbms_resource_manager.calibrate_io(<num_disks>,<max_latency>,iops,mbps,lat);  
  7  dbms_resource_manager.calibrate_io(1,10,iops,mbps,lat);  
  8  dbms_output.put_line('max_iops=' || iops);  
  9  dbms_output.put_line('latency='  || lat);  
10  dbms_output.put_line('max_mbps=' || mbps);  
11  end;  
12  /  


查看状态信息:  

SQL> select * from v$io_calibration_status;  

STATUS        CALIBRATION_TIME  
------------- ---------------------------------------------------------------------------  
IN PROGRESS  

SQL> select file_no,small_read_megabytes,small_read_reqs,large_read_megabytes,large_read_reqs from v$iostat_file;  

   FILE_NO SMALL_READ_MEGABYTES SMALL_READ_REQS LARGE_READ_MEGABYTES LARGE_READ_REQS  
---------- -------------------- --------------- -------------------- ---------------  
         0                    0              24                    0               0  
         0                  107            6819                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         0                    0               0                    0               0  
         1                   40            4808                  884             901  

   FILE_NO SMALL_READ_MEGABYTES SMALL_READ_REQS LARGE_READ_MEGABYTES LARGE_READ_REQS  
---------- -------------------- --------------- -------------------- ---------------  
         1                    0               4                    0               0  
         2                   28            2515                  777             779  
         3                    5             577                  351             351  
         4                    3             404                  264             264  

可知正在进行测试中:
执行结束将输出结果如下:
SQL> declare  
  2    lat integer;  
  3    iops integer;  
  4    mbps integer;  
  5  begin  
  6  --dbms_resource_manager.calibrate_io(<num_disks>,<max_latency>,iops,mbps,lat);  
  7  dbms_resource_manager.calibrate_io(1,10,iops,mbps,lat);  
  8  dbms_output.put_line('max_iops=' || iops);  
  9  dbms_output.put_line('latency='  || lat);  
10  dbms_output.put_line('max_mbps=' || mbps);  
11  end;  
12  /  
max_iops=45  
latency=42  
max_mbps=12  

PL/SQL procedure successfully completed.  

SQL>   


可以知道这两个节点请求小块读为45,最大吞吐量为12M/s。虚拟机就是卡的掉渣。





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18172-1-1.html 上篇帖子: oracle 打开trace,并分析trace 下篇帖子: IMP-00013 只有 DBA 才能导入由其他 DBA 导出的文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表