INNODB,是Mysql5.7的默认存储引擎,是事务安全的,支持ACID,具有提交,回滚和crash-recovery【灾备】能力,以保护用户数据。

优势:一旦Server崩溃,Innodb会自动保存已提交的数据,undo未被提交的事务;不会产生业务上的影响。

Innodb buffer pool 会缓存被访问的数据,可加速数据处理。

将关联数据拆分到多个表,需建立外键【foreign key】以确保数据完整性。

为表建立适当的主键【primary key】,这样在引用主键时where ,order by ,group by ,join 会很快。

在 insert,update ,delete 时自动使用change buffering机制,缓存已更改数据。

Adaptive Hash Index 风格会加快耗时的重复数据查询。

压缩表和相关index.

可以较小的影响【性能和可用性】来创建和删除index.

使用DYNAMIC row format,对于BLOB和长文本类型的处理更高效。

可以通过查询 INFORMATION_SCHEMA中表来监控存储引擎的内部工作情况。

通过查询performance_schema中表来监控存储引擎的详细性能信息。

For InnoDB-specific tuning techniques you can apply in your application code, see Section 9.5, “Optimizing for InnoDB Tables”.

Innodb 现可以使用FULLTEXT索引执行全文检索;

Innodb 现在具有更出色的读表现。

布置于只读媒介上的程序现可以使用Innodb表。

InnoDB 是多版本控制存储引擎,将被改变行的旧版本信息存储于表空间的rollback segment 区域中。Innodb可使用该区域的信息执行undo操作【在事务回滚时】;也使用该信息构建譔行的早期版本数据。

 INNODB configure

INNODB buffer pool is used to cache data and index in memory.In configue file ,innodb_buffer_pool_size is about 50%-80% of computer's memory.

innodb_old_blocks_pct, 在buffer pool 中旧数据的占比【百分比】

innodb_old_blocks_time,在buffer Pool 中被插入旧区中的数据在第一次被访问多久后再移入新区【如果还存在】

innodb_buffer_pool_chunk_size

在设置innodb_buffer_pool_instances时,保证每一个buffer_pool实例都至少有一个GB,这样才能够最大可能的提高效率,默认时innodb_buffer_pool_instances=1。

在innodb_buffer_pool的管理上,Mysql不是使用严格意义上的LRU算法,Innodb使用了一种技术来最大化的减少被载入Buffer Pool但从没使用的数据。innodb_old_blocks_pct,设置非热点数据占比,默认37%,该值不应过高;innodb_old_blocks_time,设值窗口时间,即在这个时间内的访问不被载入新区,该值设置越大,数据过期的越快,默认一秒【1000】。

监测Buffer pool 的设置效果,可使用 SHOW ENGINE INNODB STATUS,查看buffer pool 使用统计情况。

如:

配置Innodb中dirty pages处理,在Innodb中有专门的后台Task做Flushing的操作,有两个触发临界点:一个是innodb_max_dirty_pages_pct,设置dirty pages的占比,当大于等于该占比时触发Flushing【根据RedoLog的产生速度和刷新频率来确定实际占比】;第二个是当Log文件的空间用尽,达到sharp checkpoiont而进行Flushing【这种大量IO会对Mysql性能产生较大影响】,为了避免这种情形出现,可使用自适应算法【self-adapting algorithm】,可通过innodb_adaptive_flushing来设置期启用与否。

我们知道buffer pool里存放了很多热点数据,为了在重启Server时恢复最最常用的热点数据,加速预热,我们可以保存Buffer pool 的状态信息以便恢复时使用。

可通过innodb_buffer_pool_dump_at_shutdown,innodb_buffer_pool_load_at_startup来配置是否启用buffer pool 状态保存,innodb_buffer_pool_dump_pct配置舍弃热点数据的百分比【25-100】。其实保存文件是很小的,因为其中只保存了定位数据的位置信息【tablespaceId和pageId】,保存文件默认是在Data directory下的ib_buffer_pool。保存的这些位置信息其实来自于information_schema.innodb_buffer_page_lru表中。当然该文件路径名称也可以通过系统变量:innodb_buffer_pool_filename配置。

如果需要紧急保存状态,可 set Global innodb_buffer_pool_dump_now=ON;若在运行时想恢复,可set global innodb_buffer_pool_load_now=ON;

Mysql 有单独的后台线程来做这个事。

显示Buffer pool dump和load进程状态信息:

INNODB的更多相关文章

  1. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  2. InnoDB关键特性学习笔记

    插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...

  3. InnoDB体系结构学习笔记

    后台线程 Master Thread 核心的后台线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括(脏页的刷新).合并插入缓冲.(UNDO页的回收)等 IO Thread 4个writ ...

  4. InnoDB:Lock & Transaction

    InnoDB 是一个支持事务的Engine,要保证事务ACID,必然会用到Lock.就像在Java编程一下,要保证数据的线程安全性,必然会用到Lock.了解Lock,Transaction可以帮助sq ...

  5. innodb 自增列重复值问题

    1 innodb 自增列出现重复值的问题 先从问题入手,重现下这个bug use test; drop table t1; create table t1(id int auto_increment, ...

  6. MySql - InnoDB - 事务 , Php版

    (出处:http://www.cnblogs.com/linguanh/) 1,前序 由于要重构APP(社交类) 服务端接口的部分代码,故接触到了 innoDB,以及事务这个词,下面主要是以例子的形式 ...

  7. MySQL的InnoDB索引原理详解

    摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇 ...

  8. MySQL存储引擎--MyISAM与InnoDB区别

    InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISA ...

  9. MySQL 从 5.5 升级到 5.6,启动时报错 [ERROR] Plugin 'InnoDB' init function returned error

    MySQL 从 5.5 升级到 5.6,启动时报错: [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'Inn ...

  10. Mysql 存储引擎中InnoDB与Myisam的主要区别

    一直以为我spring事物没有配置好,结果发现是mysql的表本身设置成了Myisam 引擎.改成innodb就支持事物了. 1, 事务处理 innodb 支持事务功能,myisam 不支持. Myi ...

随机推荐

  1. Android三种消息提示

    Android消息提示有三种方式: 1  使用Toast显示消息提示框 Toast类用于在屏幕中显示一个提示信息框,该消息提示框没有任何控制按钮,并且不会获得焦点,经过一定时间后自动消失.通常用于显示 ...

  2. Javascript高级程序设计——this、闭包、函数表达式

    在javascript中函数声明会被提升,而函数表达式不会被提升.当函数执行时,会创建一个执行环境和相应的作用域链,然后利用arguments和其他的命名参数的值来初始化函数的活动对象,作用域链链中所 ...

  3. JQuery实战手风琴-遁地龙卷风

    (-1)写在前面 这个图片是我从网上下载的,向这位前辈致敬.图片资源在我的百度云盘里.http://pan.baidu.com/s/1nvfJHdZ 我用的是chrome49,JQuery3.0,案例 ...

  4. Caffe学习系列(12):不同格式下计算图片的均值和caffe.proto

    均值是所有训练样本的均值,减去之后再进行训练会提高其速度和精度. 1.caffe下的均值 数据格式是二进制的binaryproto,作者提供了计算均值的文件compute_image_mean, 计算 ...

  5. MS DOS 命令大全

    刚好看到留下来以备用: 一)MD——建立子目录命令 1.功能:创建新的子目录 2.类型:内部命令 3.格式:MD[盘符:][路径名]〈子目录名〉 4.使用说明: (1)“盘符”:指定要建立子目录的磁盘 ...

  6. .oi 小游戏

    http://agar.io/ http://diep.io/ http://slither.io/ http://splix.io/ http://wilds.io/ http://kingz.io ...

  7. django的前后的结合,search搜索功能案例

    利用django的Q()功能可以很好的展开搜索功能 假设我要做个这样的搜索功能

  8. java检测文件内是否包含指定内容

    package com.test; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.File ...

  9. 5.8---像素设定(CC150)

    注意:仔细注意位置. public static int[] renderPixel(int[] screen, int x, int y){ int[] ans = new int[screen.l ...

  10. ffmpeg解码音频流

    //初始化.注册编解码器 avcodec_init(); av_register_all(); avformat_network_init(); //选取测试文件 char* FileName=&qu ...