什么影响oracle io,Exadata IO过程解读

Exadata IO过程解读

首先我们来看传统的oracle数据库在执行io的过程,假设现在DBWR进程需要写入一个数据块到磁盘上去。大体流程是DBWR进程

发布一个IO调用,操作系统执行IO函数,数据流主要是oracle buffer=>HBA卡=>光纤=>存储交换机=>存储控制器=>存储cache(磁盘)

可以看出DBWR进程在执行io时,和其他应用程序使用IO使用一样的,都是使用标准的操作系统IO函数.

SQL> alter system flush buffer_cache;

System altered.

% time     seconds  usecs/call     calls    errors syscall

------ ----------- ----------- --------- --------- ----------------

91.13    0.003996           3      1284           semtimedop

3.83    0.000168          15        11           pwrite

2.69    0.000118           0       890           semctl

2.35    0.000103           0      5145           times

0.00    0.000000           0         1           read

0.00    0.000000           0         1           open

0.00    0.000000           0         1           close

0.00    0.000000           0         8           getrusage

------ ----------- ----------- --------- --------- ----------------

100.00    0.004385                  7341           total

可以看到pwrite一直在增长,查看一下系统帮助,答案这个系统函数是linux系统执行写调用的系统函数.

在Exadata上,ORACLE开发了一种全新,专有的协议,称为iDB协议.这个协议主要是用来在infiniband上的连接来实现到storage server的IO.

当Exadata上的DBWR进程执行IO时,首先把需要发布的IO经过组装成包,再调用专有的sendmsg函数通过infiniband发送到storage server上,

在storage server上的cellsrv进程接收到这个消息,解压,再根据消息的类型,进行相应的IO(本质是由cellsrv进程调用storage server上的操作系统的标准IO函数).

在RDBMS层面上,Exadata和传统的IO特点大不相同.比如smart scan就是通过在封装在消息包里,然后由cellsrv进行相应的处理。iDB可能还会包括其他的一些元数据,如是否有IORM,

Exadata上的RDBMS,ASM,CLUSTER都是链接了libcell.so协议,对于iDB的实现和函数都是在这个库文件中实现,这一点和非Exadata上的相应

oracle软件有很大的不同.

[oracle@rac1 lib]$ ls -l libcell*

-rw-r--r-- 1 oracle oinstall 1932476 May 24 10:37 libcell12.a

-rw-r--r-- 1 oracle oinstall 1399742 May 24 10:37 libcell12.so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值