一、Oracle在Linux下使用异步IO配置

最近在测试Oracle的时候,很想测试下使用异步IO的性能。但是异步IO是需要专门配置的,否则的话,容易遇到很著名的“ORA-01578: ORACLE data block corrupted (file # 202, block # 257)”的问题。

那么什么是异步IO呢,异步IO有什么好处?

一般说来,异步I/O是和同步I/O相比较来说的,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完. 相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能; 使用异步I/O会提高I/O流量,如果应用是对裸设备进行操作,这种优势更加明显, 因此象数据库,文件服务器等应用往往会利用异步I/O,使得多个I/O操作同时执行.

Oracle在默认情况是不使用异步IO的。可查看参数filesystemio_options(默认值为none),有四种选项

■ ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission.
■ DIRECTIO: enable direct I/O on file system files, which bypasses the buffer cache.
■ SETALL: enable both asynchronous and direct I/O on file system files.
■ NONE: disable both asynchronous and direct I/O on file system files.

Oracle : 11.2.0.0.0

Linux:debian  2.6.18-6-amd64

具体步骤如下:

1、首先用root用户安装以下必要的包

# aptitude search libaio
i   libaio-dev                                     - Linux kernel AIO access library - development files                                                      
i   libaio1                                           - Linux kernel AIO access library - shared library

# aptitude install  libaio1 libaio-dev

2、在系统级支持异步I/O

Oracle建议将aio-max-nr的值设置为1048576或更高。

# echo > /proc/sys/fs/aio-max-nr 1048576

3、在数据库级启用异步I/O

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

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

SQL>shutdown immediate

$ cd $ORACLE_HOME/rdbms/lib
$ ln -s /usr/lib/libaio.so.1 skgaio.o
$ make PL_ORALIBS=-laio -f ins_rdbms.mk async_on

SQL>startup

4、检查异步I/O是否在使用


    用以下命令即可检查异步IO是否在使用,kiocb的值不为0即是已使用。与kernel 2.4.x不同,没有显示kiobuf,因为从kernel 2.5.43开始,kiobuf已经从内核中被移除。

$ cat /proc/slabinfo | grep kio 
kioctx 64 110 384 10 1 : tunables 54 27 8 : slabdata 11 11 0 
kiocb 13 315 256 15 1 : tunables 120 60 8 : slabdata 21 21 44

二、Oracle异步IO缺点

异步io可能会导致坏块,所以没有dg情况下,最好禁用
在有db_file_parallel_wait等待高的情况下,可以试着禁用异步io
在异步io性能不如同步io的情况下,关闭异步io,可以调大dbwriter_processes,使用dbwr_io_slaves 
sga小的情况下,也不适合设置setall
redhat6上的ext4上设置改参数setall可能会有问题
https://access.redhat.com/solutions/519883
disk_asynch_io是相当于主开关,不管是文件系统还是raw,控制着异步io的开启与关闭,filesystemio_options是子开关,控制着文件系统上的异步io。所以如果你的库只用了文件系统,那么异步io只是受filesystemio_options控制。
 
整理自:
https://blog.csdn.net/aoerqileng/article/details/78738353
https://blog.csdn.net/yongjiao124/article/details/51239735

Oracle 异步IO 优缺点的更多相关文章

  1. ORACLE数据库异步IO介绍

    异步IO概念 Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背 ...

  2. Oracle在Linux下使用异步IO(aio)配置

    1.首先用root用户安装以下必要的rpm包 # rpm -Uvh libaio-0.3.106-3.2.x86_64.rpm# rpm -Uvh libaio-devel-0.3.106-3.2.x ...

  3. oracle启用异步IO(db file async I/O submit)

    市局双随机awr报告中有大量db file async I/O submit等待事件 参考两篇文章: [案例]Oracle等待事件db file async I/O submit产生原因和解决办法 d ...

  4. Oracle 之 AIO (异步io)

    Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等 ...

  5. 转 查看磁盘IO负载 - 看哪些进程在读写磁盘 以及oracle 异步I/O 和同步I/O

    https://www.cnblogs.com/cloudstorage/archive/2012/11/11/2764623.html #####sample 1: Oracle等待事件db fil ...

  6. python 自动化之路 day 10 协程、异步IO、队列、缓存

    本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Twsited网络框架 引子 到目 ...

  7. Python之路,Day10 - 异步IO\数据库\队列\缓存

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  8. Day10 - Python协程、异步IO、redis缓存、rabbitMQ队列

    Python之路,Day9 - 异步IO\数据库\队列\缓存   本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitM ...

  9. 意外断电数据库无法启动牵扯到异步IO的参数设置

    一客户机房新装的UPS不太稳定,好几次意外断电,第3次意外断电之后问题终于来了, 数据库起不来了-- 数据库的硬件环境是一台IBM DS5020存储,2台IBM X3850 X5 软件环境是Linux ...

随机推荐

  1. json转义问题

    后端程序接受前台传递过来json 1正常json没有问题 比如  {"id":21,"userName":"2张天师","phon ...

  2. hadoop 异常

    2019-09-20 22:49:51,955 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to ...

  3. mybatis关键映射的另一种写法

  4. Tkinter & mysql 的登录框练习

    import tkinter as tk from tkinter import messagebox import pymysql class SignIn(object): def __init_ ...

  5. Python接口自动化基础---token鉴权

    有些登录使用cookie,有些登录需要token验证,token传参一般有两种形式,一种是在请求头中,一种是使用URL传参 这里举例说明一下请求头中的token方式: #登录 param1={'use ...

  6. 【转载】C#中Add方法将往List集合末尾添加相应元素对象

    在C#的List集合操作中,有时候需要将符合条件的对象添加到已有List集合中的末尾,此时就需要使用到List集合的Add方法,Add方法的作用为将对应的元素添加到List集合末尾,Add方法签名为v ...

  7. 刚接触HTML5应该先学哪里才好?

    好吧,话不多说,直接来点干货吧! 刚接触html的小白都感觉摸不着头脑?应该怎么学习呢,其实HTML5可能对于还没有接触过的小白来说会比较的难,听起来也比较新颖.这是个什么骚东西!其实不然,这个就是构 ...

  8. 浅谈React编程思想

    React是Facebook推出的面向视图层开发的一个框架,用于解决大型应用,包括如何很好地管理DOM结构,是构建大型,快速Web app的首选方式. React使用JavaScript来构建用户界面 ...

  9. SSRF绕过IP限制方法总结

    SSRF绕过IP限制方法总结 - Summary of SSRF methods for bypassing IP restrictions -https://www.cnblogs.com/iAmS ...

  10. SVN commit:remains in tree-conflict错误的解决办法

    转自:https://chenjinbo1983.iteye.com/blog/2005123 昨天在提交一个新类包的时候,出错了,重新提交了几次也不行. 错误是:Aborting commit: ‘ ...