懂你所需,做你所想
当前位置: 仙桃云科 > 新闻资讯 > 技术指导 >

InnoDB关键特性之刷新邻接页-异步IO

发表日期:2017-07-31文章编辑:仙桃云科网络科技有限公司

 

Flush neighbor page

  1、工作原理

  2、参数控制

AIO

  1、开启异步IO

一、刷新邻接页功能

1、工作原理

  当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,故该工作机制在传统机械磁盘下有着显著的优势。

  1、在写入次数基本不增加的情况下,增加了写入的量;

  2、加速了脏页的回收;

  3、充分利用double write每次1M写入的特征;

  4、这个功能打开以后会发现iostat里面的wrqm(合并写)这个值会比较高;

2、问题考虑

  1、是不是可能将不怎么脏的页进行了写入,而该页之后又会很快变成脏页?

  2、固态硬盘有着较高的 IOPS,是否还需要这个特性?

  为此,InnoDB 存储引擎从 1.2.x 版本开始提供了参数 innodb_flush_neighbors,用来控制是否启用该特性。对于传统机械硬盘建议启用该特性,而对于固态硬盘有着超高 IOPS 性能的磁盘,则建议将该参数设置为 0、即关闭此特性。

3、参数控制:innodb_flush_neighbors

复制代码
mysql> show variables like '%neigh%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_flush_neighbors | 1     |  #默认刷新邻接页功能开启
+------------------------+-------+
1 row in set (0.00 sec)
复制代码

  1,表示打开了刷新邻接页的功能,顺带着刷新在 buffer pool 中位于磁盘上相同的 extend 区的相邻的脏页。

  0,表示关闭刷新邻接页

  2 ,表示刷新在 buffer pool 中位于磁盘上相同的 extend 区的脏页。

4、Flush neighbor page的影响

  1、对于insert频繁的系统,这个功能比较适合

  2、对于update频繁的系统,这个功能可能会带来一些副作用

    1、update顺带着刷新其他页;

    2、对于update频繁的表,这些页马上就脏了,白白浪费写负载。

 

二、异步IO功能

1、关于AIO与SIO

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

  1、异步IO:用户可以在发出一个IO请求后立即再发出另外一个IO请求,当全部IO请求发送完毕后,等待所有IO操作完成,这就是AIO。

  2、与AIO对应的是Sync IO,即每进行一次IO操作,需要等待此次操作结束才能继续接下来的操作。

2、开启异步IO

  首先OS要有异步io,且开启,然后mysqld要链接,要不然OS异步io没有开启,数据库的异步io也起不来。(this variable applies to Linux systems only, and cannot be changed while the server is running.)

  1、文件系统层面需要打开这个功能:一般都是默认开启的。

[root@localhost /]# ldconfig -v|grep libaio
    libaio.so.1.0.0 -> libaio.so.1.0.0
    libaio.so.1 -> libaio.so.1.0.1

  2、AIO是数据库层面的一个特性需要打开:默认是开启,开启的native aio性能提升,可以提高到75%。

复制代码
mysql> show variables like 'innodb_use_native_aio';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_use_native_aio | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
复制代码

3、异步IO的好处  

  1、不用等待直接响应上一个用户的请求;

  2、多次的请求在一起排序,请求的数据页是在一起的,一次读出来,减少多次读。(数据库的读写请求队列放在文件系统中单独分配的一块小内存结构里,非文件系统的缓存)

4、wio:wait io

  1、同步IO一定会产生wait IO

  2、异步IO会降低wait IO,但是也可能会有wait IO

  3、尽量采用异步IO(性能高于同步IO)

  4、数据库层面启用异步IO

  5、文件系统层面启用异步IO,Linux具备异步IO的能力

  6、操作系统层面wio的含义理解

复制代码
[root@localhost /]# sar 1
Linux 2.6.32-431.el6.x86_64 (one)     07/14/2017     _x86_64_    (6 CPU)

04:23:25 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
04:23:26 AM     all      0.17      0.00      0.33      0.00      0.00     99.50
04:23:27 AM     all      0.00      0.00      1.00      0.00      0.00     99.00
^C
[root@localhost /]# iostat 1
Linux 2.6.32-431.el6.x86_64 (one)     07/14/2017     _x86_64_    (6 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.02    0.02    0.00   99.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.26         6.70         4.07     619320     376232
scd0              0.00         0.00         0.00        352          0
复制代码

  说明进程或是线程等待io的时间,值最好是小于5,大于25一定是io有问题。

在InnoDB存储引擎中,read ahead方式的读取都是通过AIO完成,脏页的刷新,也是通过AIO完成。

如没特殊注明,文章均为仙桃云科网络原创,转载请注明来自>
相关新闻

Java6和Java8在Windows上共存...

最近在做一个Android的项目,一开始安装的是Java8用于项目的开发。但是在项目后期需要用到drozer用于检测项目的安全性,要搭建drozer的测试环境必须要使用Java6,否则会出...

日期:2017-08-30

OpenGL与CUDA互操作方式总结...

一、介绍 CUDA是Nvidia推出的一个通用GPU计算平台,对于提升并行任务的效率非常有帮助。本人主管的项目中采用了OpenGL做图像渲染,但是在数据处理方面比较慢,导致帧率一直...

日期:2017-08-18

nodejs-基础与深入...

01-nodejs介绍 1.什么是nodejs 1. (javascript跑在机器端,服务端)Javascript on the machine 2. (跑在谷歌v8引擎上)A runtime for Google Chrome s V8 Javascript eng...

日期:2017-08-07

InnoDB关键特性之刷新邻接页-异...

Flush neighbor page 1、工作原理 2、参数控制 AIO 1、开启异步IO 一、刷新邻接页功能 1、工作原理 当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,...

日期:2017-07-31

Java8 Stream代码详解+BenchMark...

1、基本介绍 1、创建方式 1、Array的Stream创建 1、直接创建 // main Stream stream = Stream. of ( a , b , c );String [] strArray = new String[] { a , b , c };stream...

日期:2017-07-24

Java 数据类型在实际开发中应用...

在实际编程中,往往存在着这样的数据集,它们的数值在程序中是稳定的,而且数据集中的元素是有限的。在JDK1.5之前,人们用接口来描述这一种数据类型。 1.5以后引入枚举 一...

日期:2017-07-17