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)
  • 相关阅读:
    基本技能训练之线程
    关于UEditor的使用配置(图片上传配置)
    PAT 乙级练习题1002. 写出这个数 (20)
    codeforces 682C Alyona and the Tree DFS
    codeforces 681D Gifts by the List dfs+构造
    codeforces 678E Another Sith Tournament 概率dp
    codeforces 680E Bear and Square Grid 巧妙暴力
    codeforces 678D Iterated Linear Function 矩阵快速幂
    codeforces 679A Bear and Prime 100 交互
    XTUOJ 1248 TC or CF 搜索
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6156085.html
Copyright © 2011-2022 走看看