MySQL如何保证crash-safe的()
背景知识
可以先看一下我写的为什么需要两阶段提交,两阶段提交+redo log保证了crash-safe
疑问
两阶段提交是流程上的保证,但是在向redo log(位于内存中的log buffer)中写数据后,如何保证redo log向磁盘写入成功呢?
Linux背景知识
在向磁盘写数据时,一般都会先把数据写进内存内核态中的page cache,然后再调用fsync()函数进行数据的刷盘。
所以针对应用程序向磁盘写数据,一般是这样的流程
文章图片
image.png 其中涉及到了三个存储数据的位置,分别是
- 用户内存 xxx buffer
- 内核态内存 page cache
- 磁盘
【MySQL如何保证crash-safe的()】使用innodb_flush_log_at_trx_commit进行相应的配置。
严格程度由弱到强分别是
0:写到用户态 xxx buffer
2:写到内核态内存 cache page
1:直接写到硬盘中
一般为了数据的不丢失,都会选择1,但也会导致性能有所下降。
推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 如何寻找情感问答App的分析切入点
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树
- Linux下面如何查看tomcat已经使用多少线程
- thinkphp|thinkphp 3.2 如何调用第三方类库
- 2019女表什么牌子好(如何挑选女士手表?)