数据库oracle io读写,oracle数据库中的异步IO

linux 2.4以上是支持异步IO了,oracle 10g r2开始都默认使用异步IO了,关于异步IO可以参考http://www.ibm.com/developerworks/cn/linux/l-async/,

异步IO的好处小结如下:

Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果

1、检查linux相关包

[root@anpc ~]# rpm -qa | grep aio

libaio-devel-0.3.106-3.2

libaio-0.3.106-3.2

libaio-devel-0.3.106-3.2

libaio-0.3.106-3.2

libsane-hpaio-1.6.7-4.1.el5_2.4

[root@anpc ~]# cat /proc/slabinfo | grep kio

kioctx                64     96    320   12    1 : tunables   54   27    8 : slabdata      8      8      0

kiocb                  0      0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0

kiocb值的第二列和第三列非0即是已使用。

The kioctx and kiocb are Async I/O data structures that are defined in aio.h.

If it shows a non zero value that means async io is enabled.

source code loaded /usr/src/linux-/include/linux/aio.h

从2.6 kernel开始,已经取消了对IO size的限制,Oracle建议将aio-max-nr的值设置为1048576或更高。

[root@anpc ~]# echo 1048576 > /proc/sys/fs/aio-max-nr

2、检查Oracle软件是否开启AIO支持。

[oracle@anpc ~]$ /usr/bin/ldd $ORACLE_HOME/bin/oracle | grep libaio

libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002aaaac4a9000)

如上面显示说明已经开启

[oracle@anpc ~]$ /usr/bin/nm $ORACLE_HOME/bin/oracle | grep io_getevent

w io_getevents@@LIBAIO_0.4

如上面显示说明已经开启

10GR1以前版本需要手动开启AIO,relink一下。

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk async_on

make -f ins_rdbms.mk ioracle

关闭Oracle的异步功能支持

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk async_off

3、开启Oracle数据库AIO功能的支持。

SQL> alter system set filesystemio_options = setall scope=spfile;

SQL> alter system set disk_asynch_io = true scope=spfile;

SQL> shutdown immediate

SQL> startup

4、查看是否开启

[root@anpc ~]# cat /proc/slabinfo | grep kio

kioctx                64     96    320   12    1 : tunables   54   27    8 : slabdata      8      8      0

kiocb                 15     15    256   15    1 : tunables  120   60    8 : slabdata      1      1      0

非零说明已经开启

补充:

在oracle里为了提高io的速度,常用参数db_writer_processes 和 dbwr_io_slaves

在数据库里事务数非常高,或db cache很大,一个DBWn process跟不上数据的load,我们可以调整这两个参数,这两个

参数的作用就是增加io读写进程,启用异步io,加快io的速度

多个 slaves 可以并行写数据文件,而多个dbwr也可以并行写数据文件

一个 dbwr 多个 slaves是 dbwr 搜集dirty  buffer 而 slaves 写数据文件

多个dbwr 可以并行地搜集dirty buffer 并且并行地写数据文件

但是如果系统支持AIO一般不用设置多dbwr 或者 io slaves

db_writer_processes:在多cpu,多磁盘的环境,一般是每8个cpu一个dbwr进程

什么时候配置这两个参数 如果系统的io是瓶颈是,检查os是否支持异步io,如果支持异步io,但目前没有使用,那就启用异步io来缓解io瓶颈。如果os不支持异步io, 或os已经启用异步io,但io还是瓶颈,那我们可以配置多个dbwr进程。配置这两个参数是要注意,大都是如下 一个db_writer_processes,多个dbwr_io_slaves 多个db_writer_processes,dbwr_io_slaves不启用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值