一.InnoDB写数据流程(猜想)
myisam是将索引放入内存缓存(Key Cache,大小有key_buffer_size设置)
innodb时间索引和数据文件都放入内存缓存池(Buffer Pool,简称BP,大小由innodb_buffer_pool_size设置,log buffer大小由innodb_log_buffer_size)
如果一个事务过来后比如要将A=3修改成A=4,InnoDB是如何处理的呢?
1.A=3的时候记录到undolog
2.A=4的时候记录到redolog
undolog保存在表共享空间中
redolog即ib_logfile*
事务提交过程:
1.如果BP中有没有A=3的这条数据,InnoDB会将数据从磁盘提取出来放入BP.
2.记录A=3到undolog
3.修改A=4
4.记录A=4到redolog(log buffer)
5.提交事务
5.将redolog持久化,log buffer将之前在内存中redolog写入日志文件(即ib_logfile*),返回给client事务已经提交
7.这个时候PB中的数据已经和磁盘中的数据不一样了,脏页产生了,InnoDB根据一定算法决定开始刷盘.
8.数据页从PB写入double write buffer(双写缓存,也在表共享空间内)
9.double write buffer再将数据页写入到ibd文件中
*如果到执行完4后,不提交事务,执行rollback,那么系统将从undolog中取出数据替换,而因为redolog是一个连续分配的空间,为保证顺序IO,redolog不会被删除掉
*如果innodb在操作8的过程中出现问题,那么可以从redolog中恢复
*如果在操作9的时候出现了问题,innodb可以从double write buffer取出好的页写入idb(这可能就是为什么double write buffer不在内存中,而在文件中)
二.如何设置合适的innodb_buffer_pool_size
计算Innodb_buffer_pool_pages_data(包含数据的页数)/Innodb_buffer_pool_pages_total(总页数)*100%
当结果 > 95% 则增加 innodb_buffer_pool_size, 建议使用物理内存的 75%
当结果 < 95% 则减少 innodb_buffer_pool_size, 
建议设置大小为: Innodb_buffer_pool_pages_data* Innodb_page_size(页大小) * 1.05 / (1024*1024*1024)

InnoDB杂记的更多相关文章

  1. MySQL杂记

    参考资料: w3school  SQL 教程 : http://www.w3school.com.cn/sql/index.asp 21分钟 MySQL 入门教程 : http://www.cnblo ...

  2. 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)

    python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...

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

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

  4. InnoDB关键特性学习笔记

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

  5. InnoDB体系结构学习笔记

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

  6. InnoDB:Lock & Transaction

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

  7. innodb 自增列重复值问题

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

  8. MySql - InnoDB - 事务 , Php版

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

  9. [Erlang 0118] Erlang 杂记 V

       我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下.    做笔记 一开始笔记软件做的不好的时候就发邮件给自己, ...

随机推荐

  1. laravel 输出sql

    $queries = DB::getQueryLog(); $a = end($queries); $tmp = str_replace('?', '"'.'%s'.'"', $a ...

  2. iOS 设置非ARC类

    用-fno-objc-arc标记来禁用在ARC工程那些不支持ARC的文件的ARC用-fobjc-arc标记启用非ARC工程中支持ARC的文件

  3. 关于Android 5.0 网络图标叹号的解决办法

    那么下面就给出解决方法(无需root): 1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录: adb shell "settings put global captive ...

  4. MongoDB的用户管理(6)

    注意: A)在mongodb中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据. 即 use admin , -->相当于进入超级用户管理模式. B)mongo ...

  5. WPF程序在Windows 7下应用Windows 8主题

    这篇博客介绍如何在Windows 7下应用Windows 8的主题. 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同.这是为什么呢?WPF程序启动时会加载 ...

  6. MIT 6.828 JOS学习笔记3. Exercise 1.2

    这篇博文是对Lab 1中的Exercise 2的解答~ Lab 1 Exercise 2: 使用GDB的'si'命令,去追踪ROM BIOS几条指令,并且试图去猜测,它是在做什么.但是不需要把每个细节 ...

  7. linux 使用命令笔记

    这篇随笔用来记载常用的 linux 终端命令 1. 重命名 方案a. mv old.c new.c     //正规命令,把old.c 重命名为: new.c 方案b. cp old.c new.c ...

  8. python 线程之 threading(四)

    python 线程之 threading(三) http://www.cnblogs.com/someoneHan/p/6213100.html中对Event做了简单的介绍. 但是如果线程打算一遍一遍 ...

  9. Angular过滤器

    angular中的过滤器有: currency 过滤货币 number  过滤数字, date  过滤日期 json 把js对象过滤为json字符串 limitTo  截取字符串,参数是正数则从左往右 ...

  10. 中间人攻击(MITM)姿势总结

    相关学习资料 http://www.cnblogs.com/LittleHann/p/3733469.html http://www.cnblogs.com/LittleHann/p/3738141. ...