zoukankan      html  css  js  c++  java
  • InnoDB杂记

    一.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)
  • 相关阅读:
    常见设备标记长度查询
    word怎么在方框中打对号
    shell dict 操作
    词表数据转换
    GoLand tool tips
    mac使用技巧
    人生三大陷阱
    【js重学系列】执行上下文
    uniapp-ui库
    【js重学系列】instanceof
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6156085.html
Copyright © 2011-2022 走看看