Oracle在Solaris操作系统上实现异步I/O

简介:

一、 VXFS文件系统的简介

  VXFS文件系统是Veritas公司推出的一种高性能,高可用性的文件系统,一般用于数据中心。它是一种基于扩展的文件系统,能够让应用程序读取和写入大的连续块,适用于OLTP系统和DSS系统。

  Oracle数据库在Solaris操作系统上的vxfs文件系统上是可以实现异步I/O的,那Oracle数据库在vxfs文件系统中究竟该不该使用异步I/O?如何去判断是否Oracle数据库是真正实现了异步I/O?下面就这几个问题来具体的看看Oracle数据库在vxfs文件系统上的异步I/O。

  二、 VXFS文件系统上如何启用异步I/O

  首先我们必须要知道Solaris操作系统上那些磁盘上的文件系统是vxfs格式的,如何来查看一下哪些磁盘是属于vxfs格式的呢,可以使用如下的命令来查看:

Df -F vxfs

  /opt/oracle/db02 (/dev/vx/dsk/ipasdg/db02_vol):55665072 blocks 869766 files

  /opt/oracle/db03 (/dev/vx/dsk/ipasdg/db03_vol):41688928 blocks 651380 files

  /opt/oracle/db04 (/dev/vx/dsk/ipasdg/db04_vol):41688928 blocks 651380 files

  /opt/oracle/arch (/dev/vx/dsk/ipasdg/arch_vol):164632064 blocks 2572348 files

  /backup (/dev/vx/dsk/ipasdg/backup_vol):314529872 blocks 4914519 files


如果想在vxfs上面使用异步I/O,首先必须要安装一个叫做Quick I/O的模块,并且要启用Quick I/O,这个模块是需要单独向Veritas公司购买license的。默认的时候vxfs文件系统mount的时候是启用了Quick I/O的,如果在mount的时候指定了-o noqio的选项,那么Quick IO是被禁用的。

  如果想查看在一个文件系统上是否采用了Quick IO,常用的fsadmin,fstype这些命令都无法看出来,/etc/mnttab、/etc/vfstab这些文件也没有记录相关的信息。这里 介绍一种方法可以查看文件是否是Quick I/O的文件:

  ls -al 列出所有文件,包括Quick I/O文件和它的链接.

  $ ls -al d* .d*

  -rw-r--r-- 1 dba 104890368 Oct 2 13:42 .dbfile

  lrwxrwxrwx 1 dba 17 Oct 2 13:42 dbfile -> \ .dbfile::cdev:vxfs:

  ls -lL 显示是否Quick I/O被成功安装和启用。

  $ ls -lL dbfile

  crw-r--r-- 1 dba 45, 1 Oct 2 13:42 dbfile

  第一个字符c,表明这是一个裸字符设备文件,如果没有这个字符则表明Quick I/O没有正确安装或者是没有一个合法的license key。

  确认文件系统启用了Quick I/O后,然后就可以给Oracle配置异步I/O了,在Oracle的初始化参数中配置DISK_ASYNCH_IO = TRUE,然后重启数据库让其生效。

  因为启用了Quick I/O后,在OS级别上是消除了缓冲的,所以数据库的buffer cache在启用了Quick I/O后是应该需要增加的。

  三、 如何检测在VXFS文件系统上是否支持异步I/O

  对于Solaris操作系统可以使用下面的一段代码来检测系统是否支持异步I/O:

  原代码如下:

 /*

  * Quick kaio test. Read 1k bytes from a file using async I/O.

  * To compile:

  * cc -o aio aio.c -laio

  * To run:

  * aio file_name

  */

  #include

  #include

  #include

  #include

  #define BSIZE 1024

  main(int argc, char *argv[])

  {

  aio_result_t res;

  char buf[BSIZE];

  int fd;

  if ((fd=open(argv[1], O_RDONLY)) == -1) {

  perror("open");

  exit(-1);

  }

  aioread(fd, buf, BSIZE, 0L, SEEK_SET, &res);

  aiowait(0);

  if (res.aio_return == BSIZE) {

  printf("aio succeeded\n");

  close(fd);

  exit(0);

  }

  perror("aio");

  }


然后使用root用户编译:

  # cc -o aio aio.c -laio
这样就可以用来检测系统是否支持异步I/O了。










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/740602,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
存储 程序员
操作系统(15)-----I/O设备管理(万字总结~)(4)
操作系统(15)-----I/O设备管理(万字总结~)
99 2
|
7月前
|
存储 Unix 人机交互
操作系统(15)-----I/O设备管理(万字总结~)(1)
操作系统(15)-----I/O设备管理(万字总结~)
108 2
|
7月前
|
存储 网络协议 程序员
操作系统(15)-----I/O设备管理(万字总结~)(2)
操作系统(15)-----I/O设备管理(万字总结~)(2)
104 1
|
7月前
|
Unix Shell 数据安全/隐私保护
Solaris操作系统使用小技巧
Solaris操作系统使用小技巧
48 1
|
7月前
|
存储 缓存 算法
操作系统(15)-----I/O设备管理(万字总结~)(3)
操作系统(15)-----I/O设备管理(万字总结~)(3)
134 0
【操作系统】—I/O设备的基本概念和分类
【操作系统】—I/O设备的基本概念和分类
|
存储 网络协议 Linux
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
111 0
操作系统--I/O管理知识整理(供自己复习所用
I/O一直比较薄弱,都分不清在干啥,又听了一遍课,默写一下脑子里留下的东西,原来不是分不清,是听完课,脑子里就留下来30%…… I/O子系统层次结构
120 0
|
消息中间件 存储 分布式计算
大数据开发基础的操作系统的I/O原理
操作系统的I/O原理是大数据开发中必须掌握的一项基础知识。本篇文章将为大家介绍I/O原理的基本概念、工作原理以及应用场景。
103 0
|
存储 移动开发 算法
408操作系统学习笔记——输入/输出(I/O)管理(下)
408操作系统学习笔记——输入/输出(I/O)管理
432 1
408操作系统学习笔记——输入/输出(I/O)管理(下)