许久没有更新博客,上周末放假把网易大牛姜sir的著作MYSQL技术内幕InnoDB存储引擎又翻阅了一番,对当前工作的InnoDB特性有了一些新的认识,下面谈谈自己的读后感.

1. InnoDB的体系架构由一系列后台线程,内存池和文件组成,这点与其他DB有相似之处. 在内存中划分了一块区域,即缓冲池,用来临时存放用户读写的数据页. InnoDB上对缓冲池读写数据页,刷新到磁盘等操作也使用了CHECKPOINT机制,LRU算法,这点与SQLSERVER,DB2等数据库设计一致,这里不再阐述.需要注意的是MYSQL中指定LRU列表的midpoint控制位置由参数innodb_old_blocks_pct控制,该参数决定了新读取的页会插入到LRU尾部多少的位置.一般为37%.

2. 插入缓冲: 插入缓冲是InnoDB存储引擎开创性的设计,主要为了解决非聚集索引插入或更新操作时,由于非聚集索引离散地访问非聚集索引页,从而导致插入操作性能下降.这是因为非聚集索引本身的特性决定的.所以INNODB引入了插入缓冲这一特性,对于非聚集索引的插入或更新操作,不是每一次直接插入到索引页,而是先判断插入的非聚集索引页是否在缓冲池中,若在则直接插入,如果不在则先放到到一个Insert Buffer对象中.然后再以一定的频率和情况进行Insert Buffer和辅助索引页子节点的合并操作,这时通常能将多个插入合并到一个操作中(因为在一个索引页中),这样大大提高了对于非聚集索引插入的性能.

插入缓冲的使用需要同时满足两个条件:1.索引为辅助索引;2.索引不是唯一的.因为在插入缓冲时,数据库并不去查找索引页来判断插入的记录的唯一性.如果去查找肯定又会有离散读取的情况发生,从而导致insert buffer失去了意义.

插入缓冲目前存在的问题主要是在写密集的情况下,插入缓冲会占用过多的缓冲池内存.

目前DB2,SQLSERVER上均没有插入缓冲这项特性.

3.Double-Write: 两次写主要带给InnoDB数据引擎的是数据页的可靠性.在其他数据库下,当某个数据页在正在写的过程中发生灾难,如电源问题导致宕机,该数据页会出现写失效的情况.当然我们可以通过重做日志进行恢复,但是由于重做日志记录的本身是对页的物理操作,如偏移量,写入记录等等.当物理页本身在宕机过程中损坏,再通过重做日志恢复不可行.面对这种情况,DB2,SQLSERVER通过内部命令REPAIRDB或者其他REPAIR工具去修复数据页.而MYSQL InnoDB两次写特性保证数据再在写入磁盘前先顺序写入共享表空间上,然后通过函数同步磁盘.这样相当于创建了数据页的一个副本.

4.自适应哈希索引:这是MYSQL INNODB另一个重要特性. InnoDB存储引擎会监控对表上各索引页的查询,如果观察到建立哈希索引可以带来速度提升,则自行建立哈希索引.InnoDB存储引起会自动根据访问的频率和模式来自动地为某些热点页建立哈希索引.这个是SQLSERVER和DB2所不具备的

MYSQL中InnoDB特性浅谈

标签:存在   查找   频率   控制   恢复   物理   带来   技术   poi

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/ducklightfatman/p/6945480.html

mysql innodb4大特征_MYSQL中InnoDB特性浅谈相关推荐

  1. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  2. oracle数据库财务恢复,Oracle数据库备份与恢复特性浅谈【常用财务软件使用教程】...

    Oracle数据库备份与恢复特性浅谈 Oracle数据库备份与恢复有三种不同的方式,这里将简单介绍这些方式的使用策略已经Oracle数据库的用户角色管理策略. Oracle数据库备份与恢复是每个Ora ...

  3. 计算机在小学教育教学中的优劣,浅谈计算机教学在小学教育中的作用

    浅谈计算机教学在小学教育中的作用 浅谈计算机教学在小学教育中的作用 随着科技日新月异的发展,现代教育理念的改革.深化,对国民教育,特别是基础教育提出了更明确的要求,教育的根本任务就是使学习者学会如何学 ...

  4. 阿里云mysql不让锁表_MySQL中InnoDB锁不住表的原因

    MySQL中InnoDB锁不住表是因为如下两个参数的设置: mysql> show variables like '%timeout%'; +-------------------------- ...

  5. mysql truncate 大表_MySQL删除大表时潜在的问题(drop table,truncate table)

    case1,删除大表时,因为清理自适应hash索引占用的内容导致的MySQL服务挂起 case2,大表的随意Drop或者truncate导致MySQL服务的挂起 按照本文中的结论就是 MySQL5.6 ...

  6. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  7. mysql 锁24小时_MySQL中Alter table 不长时间锁表的情况汇总。

    查看原文:http://www.tanbo.name/html/99669.html 前言: MySQL 的大表运维总是令人头疼的一件事,特别是大表表结构的修改尤为困难. 首先,alter table ...

  8. mysql日期格式化季度_mysql中常用日期比较与计算函数

    MySql中时间比较的实现 unix_timestamp() unix_timestamp 函数可以接受一个参数,也可以不使用参数. 它的返回值是一个无符号的整数.不使用参数,它返回自1970年1月1 ...

  9. mysql sql 时间比较_mysql中sql语句进行日期比较

    这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...

最新文章

  1. Quartz 框架快速入门(二)
  2. 必须要熬夜的时候的最佳伴侣是什么?亲测有效
  3. [机器学习笔记] Note2--单变量线性回归
  4. NumPy常用属性及方法
  5. windows7系统适合哪个python_Python3.6.4在Windows7系统下安装配置教程
  6. 杭电1259ZJUTACM
  7. dalvik on J2EE: running tomcat on dalvik
  8. shell初学之nginx(域名)
  9. ApacheBench~网站性能测试工具
  10. 找到Linux共享文件夹的实际位置
  11. 一个自动化专业的工控人自学编程之路
  12. Unity利用Input类实现摄像机镜头拉近与拉远
  13. html视频怎么自动播放一次,HTML5视频自动播放/播放一次
  14. Elasticsearch报错received plaintext traffic on an encrypted channel, closing connection Netty4TcpChann
  15. firefly-rk3288开发板Linux驱动——AT24C02 E2PROM驱动
  16. mysql刷新当前数据库_sqlyog刷新数据库
  17. canvas图片画圆角
  18. 逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移
  19. 数据结构(使用尾插法实现单链表)
  20. 防火墙内外网隔离实例

热门文章

  1. Guava翻译系列之EventBus
  2. Linux 指令篇:文档编辑--col
  3. 【流媒體】Android 实时视频采集—Camera预览采集
  4. 苹果x人脸识别突然失灵_教你解决mac电脑键盘失灵的问题
  5. Linux里的21究竟是什么
  6. Linux卸载Mysql
  7. hive表定义(3种方式)
  8. JobTracker和TaskTracker
  9. oracle11g创建表空间大文件,oracle11g创建表空间 sql语法
  10. python3数字类型分为_Python初学3——数字类型及操作