zoukankan      html  css  js  c++  java
  • innodb之关键特性异步IO

    1.前言

      为了提高磁盘操作性能,当前的数据库系统都采用异步IO(Asynchronous IO,AIO)的方式来处理磁盘操作

    2.AIO

      异步IO相较于同步IO而言的是,当它每扫描一个页之后不需要等待其完成就可以再进行扫描下一次的扫描,另外一个优势是可以进行IO merge操作,也就是可以将多个IO合并成一个IO,这样就可以提高IOPS的性能,例如用户需要访问页的(space,page_no)为:(8,6)、(8,7)、(8,8) 每个页的大小为16K,那么同步IO需要进行3次IO操作。而AIO会判断到这三个页是连续的(显然可以通过(space ,page_no)得知)。因此AIO底层会发送一个IO请求,从(8,6)开始,读取48kb的页

      在innodb1.1x之前,AIO的实现通过innodb存储引擎中的代码来模拟实现。而从innodb1.1.x开始(innodb plugin不支持),提供了内核级别的AIO的支持,称为Native AIO,因此在编译或者运行该版Mysql时,需要libaio库的支持。需要注意的是,Native AiO需要操作系统提供支持。Windows系统和Linux系统都Native AIO支持,而MAC os上面未提供。 

    root@localhost 14:53:  [liulin]> show variables like '%innodb_use%';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_use_native_aio | ON    |
    +-----------------------+-------+
    1 row in set (0.00 sec)

      通过查看该参数是默认开始状态,用户可以通过开启和关闭Native AIO功能来比较Innodb性能的提升。官方显示,启用Native AIO,恢复速度可以提高75%

      在innodb存储引擎中,read ahead方式的读取都是通过AIO完成,脏页的刷新,即磁盘的写入操作则全部是由AIO完成。

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/zmc60/p/15223136.html
Copyright © 2011-2022 走看看