广告
返回顶部
首页 > 资讯 > 数据库 >oracle 异步IO简述
  • 528
分享到

oracle 异步IO简述

2024-04-02 19:04:59 528人浏览 安东尼
摘要

       在同步io中,线程启动一个IO请求之后就进入等待状态,知道IO结束后线程才结束等待,转而去处理其他请求。异步IO将IO请求发送到内

       在同步io中,线程启动一个IO请求之后就进入等待状态,知道IO结束后线程才结束等待,转而去处理其他请求。异步IO将IO请求发送到内核后就不管了,无需等待IO操作完成,就去处理其他事情了。异步IO可以提高性能。但是显而易见的是对磁盘处理IO能力有较高要求,否则提交的处理请求多,处理能力跟不上,根本无法达到提高性能的要求。异步IO需要linux内核是2.6版本。
检查操作系统是否启用异步IO:
cat /proc/slabinfo | grep kio
kioctx                29     40    384   10    1 : tunables   54   27    8 : slabdata      4      4      0
kiocb                  0      0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0
kiocb前两个值是0,表明异步IO没有启用。

要启用异步IO,需要两个参数配合:
alter system set filesystemio_options=setall scope=spfile;
alter system set disk_asynch_io = true scope=spfile;   --默认就是开启的
disk_asynch_io开启后还需要filesystemio_options也开启,不然还是不会启用,类似双开关。这种默认情况会出现db file async I/O submit等待事件。
filesystemio_options参数有四个值:
ASYNCH:在文件系统文件上启用异步I/O,在数据传送上没有计时要求。
DIRECTIO:在文件系统文件上启用直接I/O,绕过buffer cache。
SETALL:在文件系统文件上启用异步和直接I/O。
NONE:在文件系统文件上禁用异步和直接I/O。

如果disk_asynch_io=false的话还可以设置参数dbwr_io_slaves为一个大于0的值来模仿异步io。

内核参数中,fs.aio-max-nr参数指的是可以同时拥有的的异步IO请求数目。oracle建议大于等于1048576。

root@bd-dev-mingshuo-183:/home/oracle#more /etc/sysctl.conf |grep aio
fs.aio-max-nr = 1048576

sql> sho parameter disk_asynch_io

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
disk_asynch_io                       boolean     TRUE

SQL> sho parameter filesystem

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
filesystemio_options                 string      none

root@bd-dev-mingshuo-183:/home/oracle#ps -ef|grep dbw
root      5068  4412  0 16:56 pts/5    00:00:00 grep dbw
oracle   10201     1  0 Jul11 ?        00:02:41 ora_dbw0_mingdb
root@bd-dev-mingshuo-183:strace -p 10201 -o /home/oracle/dbwn.trc

写入一些数据:
SQL> create table test_io as select * from user_objects;
SQL> update test_io set object_id=11 ; SQL>  select file_no,filetype_name,asynch_io from v$iOStat_file;

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         0 Other                        ASYNC_OFF
         0 Control File                 ASYNC_OFF
         0 Log File                     ASYNC_OFF
         0 ArcHive Log                  ASYNC_OFF
         0 Data File Backup             ASYNC_OFF
         0 Data File Incremental Backup ASYNC_OFF
         0 Archive Log Backup           ASYNC_OFF
         0 Data File Copy               ASYNC_OFF
         0 Flashback Log                ASYNC_OFF
         0 Data Pump Dump File          ASYNC_OFF
         0 External Table               ASYNC_OFF

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         1 Data File                    ASYNC_OFF
         1 Temp File                    ASYNC_OFF
         2 Data File                    ASYNC_OFF
         2 Temp File                    ASYNC_OFF
         3 Data File                    ASYNC_OFF
         3 Temp File                    ASYNC_OFF
         4 Data File                    ASYNC_OFF
         5 Data File                    ASYNC_OFF
         6 Data File                    ASYNC_OFF
         7 Data File                    ASYNC_OFF
         8 Data File                    ASYNC_OFF

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         9 Data File                    ASYNC_OFF
        10 Data File                    ASYNC_OFF
        11 Data File                    ASYNC_OFF
        14 Data File                    ASYNC_OFF
        15 Data File                    ASYNC_OFF

27 rows selected.

修改参数并重启
alter system set filesystemio_options=setall scope=spfile;
startup force  --测试环境,暴力了一点。

重启后再写入一些数据 root@bd-dev-mingshuo-183:/home/oracle#ps -ef|grep dbw
oracle    5137     1  0 16:59 ?        00:00:00 ora_dbw0_mingdb
root      5374  4412  0 16:59 pts/5    00:00:00 grep dbw
strace -p 5137 -o /home/oracle/dbwn_aio.trc

对比两种情况下的trace文件:
同步IO:
root@bd-dev-mingshuo-183:/home/oracle#more dbwn.trc |grep pwrite
pwrite(267, "\2\242\0\0FW\202\1\326\351;\0\0\0\10\4j\257\0\0\207\0\35\0\211\0\0\0\"\0\f\f"..., 8192, 1256767488) = 8192
pwrite(267, "\2\242\0\0\360g\202\1\275\351;\0\0\0\2\4X\17\0\0\235\0\0\0\213\0\0\0\37\00099"..., 8192, 1291714560) = 8192
pwrite(267, "\2\242\0\0\303\177\202\1\276\351;\0\0\0\2\4\351\367\0\0\254\0\31\0\212\0\0\0 \00011"..., 8192, 1341677568) = 8192
pwrite(267, "\2\242\0\0\260\213\202\1\270\351;\0\0\0\4\4\263_\0\0&\1\31\0006\0\0\0\21\0&&"..., 8192, 1366687744) = 8192

异步IO:
more /home/oracle/dbwn_aio.trc|grep io_
io_submit(140219848069120, 1, {{data:0x7f8775482ed0, pwrite, filedes:262, str:"\6\242\0\0\3Y\0\1\246z=\0\0\0\1\6\246\310\0\0\2\0\0\0\322\"\0\0\245z=\0"..., nbytes:8192, offset:186671104}}) = 1
io_getevents(140219848069120, 1, 128, {{0x7f8775482ed0, 0x7f8775482ed0, 8192, 0}}, {600, 0}) = 1
io_submit(140219848069120, 1, {{data:0x7f8775482ed0, pwrite, filedes:262, str:"\6\242\0\0\360j\0\1\246z=\0\0\0\1\6\257\337\0\0\1\36@\0\323\"\0\0\245z=\0"..., nbytes:8192, offset:224264192}}) = 1
io_getevents(140219848069120, 1, 128, {{0x7f8775482ed0, 0x7f8775482ed0, 8192, 0}}, {600, 0}) = 1
io_submit(140219848069120, 1, {{data:0x7f8775482ed0, pwrite, filedes:262, str:"\6\242\0\0\177D\0\1\246z=\0\0\0\1\6\305\207\0\0\2\0\0\0\324\"\0\0\245z=\0"..., nbytes:8192, offset:143646720}}) = 1
io_getevents(140219848069120, 1, 128, {{0x7f8775482ed0, 0x7f8775482ed0, 8192, 0}}, {600, 0}) = 1

pwrite代表同步IO。
io_submit/io_getevents代表异步IO。io_submit代表一次异步IO请求,io_getevents获得IO处理结果。获取结果的目的是将结果写入io_event,而且在io_submit和io_getevents之间还有很多步骤,并不是这里看到的请求了还在继续等待,好像与异步IO相违背,其实并没有。

开启异步IO后:
SQL> select file_no,filetype_name,asynch_io from v$iostat_file;

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         0 Other                        ASYNC_OFF
         0 Control File                 ASYNC_OFF
         0 Log File                     ASYNC_OFF
         0 Archive Log                  ASYNC_OFF
         0 Data File Backup             ASYNC_OFF
         0 Data File Incremental Backup ASYNC_OFF
         0 Archive Log Backup           ASYNC_OFF
         0 Data File Copy               ASYNC_OFF
         0 Flashback Log                ASYNC_OFF
         0 Data Pump Dump File          ASYNC_OFF
         0 External Table               ASYNC_OFF

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         1 Data File                    ASYNC_ON
         1 Temp File                    ASYNC_ON
         2 Data File                    ASYNC_ON
         2 Temp File                    ASYNC_ON
         3 Data File                    ASYNC_ON
         3 Temp File                    ASYNC_ON
         4 Data File                    ASYNC_ON
         5 Data File                    ASYNC_ON
         6 Data File                    ASYNC_ON
         7 Data File                    ASYNC_ON
         8 Data File                    ASYNC_ON

   FILE_NO FILETYPE_NAME                ASYNCH_IO
---------- ---------------------------- ---------
         9 Data File                    ASYNC_ON
        10 Data File                    ASYNC_ON
        11 Data File                    ASYNC_ON
        14 Data File                    ASYNC_ON
        15 Data File                    ASYNC_ON

27 rows selected.

数据文件和临时文件都变成异步方式了,不过还是有一些文件仍然是同步,这可能是因为不能丢数据的缘故。比如日志文件如果启用异步IO了,那么很可能就会造成数据丢失。

您可能感兴趣的文档:

--结束END--

本文标题: oracle 异步IO简述

本文链接: https://www.lsjlt.com/news/45807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle 异步IO简述
           在同步IO中,线程启动一个IO请求之后就进入等待状态,知道IO结束后线程才结束等待,转而去处理其他请求。异步IO将IO请求发送到内...
    99+
    2022-10-18
  • Oracle 之 AIO (异步io)
     Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能。它是Linux 2.6 版本内核的一个标准特性,AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用...
    99+
    2022-10-18
  • Python3 异步IO--asynci
    Python3 异步IO--asyncio asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。 asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后...
    99+
    2023-01-31
    IO asynci
  • Python3 异步IO--async/
    Python3 异步IO--async/await 用asyncio提供的@asyncio.coroutine可以把一个generator标记为coroutine类型,然后在coroutine内部用yield from调用另一个corout...
    99+
    2023-01-31
    IO async
  • oracle异步IO中的filesystemio_options参数是怎样的
    本篇文章给大家分享的是有关oracle异步IO中的filesystemio_options参数是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看...
    99+
    2022-10-19
  • Python3 异步IO--协程
    Python3 异步IO--协程 概念: 协程,又称微线程,纤程。英文名Coroutine。 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B...
    99+
    2023-01-31
    IO 协程
  • golang是异步io吗
    golang不是异步io,但golang提供了一种简化并发编程的方式,使得在处理I/O操作时可以实现异步效果。在Golang中,可以使用goroutines和channels实现非阻塞的异步I/O操作,Golang还提供了一些标准库,例如n...
    99+
    2023-07-24
  • 一步步理解python的异步IO
      分享至:一步步理解python的异步IO 前言 看到越来越多的大佬都在使用python的异步IO,协程等概念来实现高效的IO处理过程,可是我对这些概念还不太懂,就学习了一下。 因为是初学者,在理解上有很多不到位的地方,如果有错误,还希...
    99+
    2023-01-31
    python IO
  • nodejs是同步还是异步io
    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript来编写服务器端代码。在Node.js中,I/O是一个核心概念,它非常重要,因为在服务器应用程序中,I/O操作往往是最常见的操作...
    99+
    2023-05-23
  • asyncio异步IO--协程(Coro
    摘要:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口。在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理解。本文内容主要针对python3.7...
    99+
    2023-01-30
    IO asyncio Coro
  • 简述Java中throw-throws异常抛出
    目录一、throws抛出异常 Throws抛出异常的规则:二、使用throw抛出异常 三、比较 3.1 在声明方法时候抛出异常  3.2 在方法中抛出异常  &n...
    99+
    2022-11-12
  • Python异步IO怎么理解
    这篇文章主要讲解了“Python异步IO怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python异步IO怎么理解”吧!Python 3.4标准库有一个新模块asyncio,用来支持...
    99+
    2023-06-17
  • Python笔记-IO同步和异步、 读写
    IO:Input/Output 由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这10...
    99+
    2023-01-31
    笔记 Python IO
  • Node.js 的异步 IO 性能探讨
    Python 和 Ruby 也有这样的框架,但因为在实际使用中会不可避免地用到含有同步代码的库,因此没能成长起来,而在 Node.js 之前,JavaScript 的服务器端编程几乎是空白,所以 Node....
    99+
    2022-06-04
    性能 Node js
  • Java非阻塞IO和异步IO的详细介绍
    这篇文章主要讲解了“Java非阻塞IO和异步IO的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java非阻塞IO和异步IO的详细介绍”吧!阻塞模式 IO我们已经介绍过使用 Java...
    99+
    2023-06-02
  • python之事件驱动与异步IO
      写服务器处理模型的程序时,通常有以下几种模型:  1.每收到一个请求,创建一个新的进程来处理该请求  2.每收到一个请求,创建一个新的线程来处理该请求  3.每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求(协程...
    99+
    2023-01-31
    事件 python IO
  • Javascript异步编程简介
    这篇文章主要介绍“Javascript异步编程简介”,在日常操作中,相信很多人在Javascript异步编程简介问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Javascri...
    99+
    2022-10-19
  • Nodejs中的非阻塞异步IO是什么
    这篇文章主要讲解了“Nodejs中的非阻塞异步IO是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Nodejs中的非阻塞异步IO是什么”吧!我们以网络请求IO为例,首先介绍服务端处理一次...
    99+
    2023-07-04
  • Innodb关键特性之什么是异步IO
    这篇文章主要介绍“Innodb关键特性之什么是异步IO”,在日常操作中,相信很多人在Innodb关键特性之什么是异步IO问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Inno...
    99+
    2022-10-18
  • React Suspense前后端IO异步操作处理
    目录简单介绍SuspenseSuspense主要用法和场景一. React18之前的做法二. React18之后Suspense配合前端表格组件处理前后端IO异步操作简单介绍Susp...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作