《MySQL系列-InnoDB引擎10》InnoDB关键特性-异步IO

Posted DATA数据猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《MySQL系列-InnoDB引擎10》InnoDB关键特性-异步IO相关的知识,希望对你有一定的参考价值。

InnoDB 关键特性

  InnoDB存储引擎的关键特性包括:

  • Insert Buffer (插入缓冲)
  • Double Write (两次写)
  • Adaptive Hash Index (自适应哈希索引)
  • Async IO (异步IO)
  • Flush Neighbor Page (刷新领接页)

  这些特性为InnoDB存储引擎带来了更好的性能以及更高的可靠性。

异步IO

  为了提高磁盘操作性能,当前的数据库系统都采用异步IO(Async IO)的方式来处理磁盘操作。InnoDB引擎也是如此。

  与Async IO对应的是Sync IO,即没进行一次IO操作,需要等待当前操作结束后才能继续接下来的操作,但是如果用户发出的是一条索引扫码的查询,那么这条SQL查询语句可能需要扫描多个索引页,也就是需要进行多次的IO操作在每扫描一个页等待其他完成后再进行下一次的扫描,这也是需要进行多次IO操作。在每扫描一个页并等待其完成后再进行下一次的扫描,这也是完全没有必要的。用户可以在发出一个IO请求后,立即再发出一个IO请求,当全部请求发送完毕后,等待所有IO操作的完成,也就是Async IO。

  Async IO的另一个优势是可以进行IO Merge操作,也就是将多个IO合并为1个IO,这样可以提高IOPS的性能。例如用户需要访问页的(sapce,page_no)为:

(8,6)、(8,7)、(8,8)

  每个页的大小为16KB,那么同步IO需要进行3次IO操作。而AIO会判断到这三个页是连续的(显然可以通过(space,page_no)可知)。因此AIO底层会发送一个IO请求,从(8,6)开始,读取48KB的页。

  参数innodb_use_native_aio用来控制是否启用Native AIO,在Linux操作系统下,默认值为ON:

mysql> show variables like 'innodb_use_native_aio'\\G;
*************************** 1. row ***************************
Variable_name: innodb_use_native_aio
        Value: ON
1 row in set (0.00 sec)

  用户可以通过开启和关闭Native AIO功能来比较InnoDB性能的提升。官方的测试显示,启用Native AIO,恢复速度可以提高75%。

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

以上是关于《MySQL系列-InnoDB引擎10》InnoDB关键特性-异步IO的主要内容,如果未能解决你的问题,请参考以下文章

《MySQL系列-InnoDB引擎10》InnoDB关键特性-异步IO

《MySQL系列-InnoDB引擎10》InnoDB关键特性-异步IO

如何选择mysql存储引擎

《MySQL系列-InnoDB引擎23》文件-InnoDB存储引擎文件-表空间文件

Innodb 体系架构

《MySQL系列-InnoDB引擎12》启动关闭与恢复