Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2799616
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2013-09-15 21:48:55

                                                 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

阅读(4958) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~