博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
InnoDB杂记
阅读量:6457 次
发布时间:2019-06-23

本文共 1120 字,大约阅读时间需要 3 分钟。

一.InnoDB写数据流程(猜想)
 
myisam是将索引放入内存缓存(Key Cache,大小有 设置)
innodb是将索引和数据文件都放入内存缓存池(Buffer Pool,简称BP,大小由 设置,log buffer大小由 决定)
 
如果一个事务过来后比如要将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)

转载于:https://www.cnblogs.com/itfenqing/p/6156085.html

你可能感兴趣的文章
我为什么要写LeetCode的博客?
查看>>
BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)
查看>>
JQuery中$.ajax()方法参数详解
查看>>
zoom和transform:scale的区别
查看>>
跨浏览器兼容的HTML5视频音频播放器
查看>>
【转载】WinCE MUI的实现
查看>>
【转载】使用UltraEdit来拷贝粘贴二进制
查看>>
css样式优先级
查看>>
PHP连接SQL Server数据库
查看>>
Codeforces B - Tavas and SaDDas
查看>>
typescript学习(一) 变量类型
查看>>
[BZOJ 2730][HNOI2012]矿场搭建(Tarjan)
查看>>
JavaScript之JSON详解
查看>>
【转载】如何实施异构服务器的负载均衡及过载保护?
查看>>
提交form表单页面不跳转
查看>>
一篇文章教你读懂Makefile
查看>>
文献列表
查看>>
C语言100个算法经典例题(四)
查看>>
iOS开发-基本的网络知识
查看>>
在IIS环境下配置Rewrite规则
查看>>