暂无图片
事务是如何通过日志来实现的?
我来答
分享
小林同学
2023-12-07
事务是如何通过日志来实现的?

事务是如何通过日志来实现的?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
yBmZlQzJ

在 Innodb 存储引擎中,事务日志是通过 redo 和 innodb 的存储引擎日志缓冲(Innodb log buffer)来实现的。


当开始一个事务的时候,会记录该事务的 lsn(log sequence number)号;


当事务执行时,会往 InnoDB 存储引擎的日志缓存里面插入事务日志;


当 事 务 提 交 时 , 必 须 将 存 储 引 擎 的 日 志 缓 冲 写 入 磁 盘 ( 通 过innodb_flush_log_at_trx_commit 来控制),也就是写数据前,需要先写日志。这种方式称为“预写日志方式”,innodb 通过此方式来保证事务的完整性。


也就意味着磁盘上存储的数据页和内存缓冲池上面的页是不同步的,是先写入 redo log,然后写入 data file,因此是一种异步的方式。

暂无图片 评论
暂无图片 有用 5
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
Mysql的日志日积月累,占用的磁盘空间越来越大,磁盘可用空间越来越少,怎么自动清理或者手动清理
回答 1
已采纳
这有篇自动清理日志的文章和脚本,配置如下内容即可.(Binlog的话,设置expirelogsdays后,mysql就会自动清理)文章地址:https://cloud.tencent.com/deve
MySQL数据库导入SQL文件,导错文件了,这个能回滚吗? 服务器上的数据库少字段,就从本地导出了一个SQL文件,就把原来的表给覆盖了,啥都没了,我想问下这个能回滚吗?
回答 1
如果没有备份,没有办法了。
mysql8.0,物理内存占用较高,又不释放,必须重启数据库才能解决问题,请问哪些因素会导致内存过高,缓存不释放?
回答 3
已采纳
我遇到过和这个相类似的问题就是内存无限的增长,mysql的数据库不会释放,应用是微服务跑的,应用厂家的数据库大神给看也没看出啥毛病,然后每天定时释放内存。
MySQL数据库在什么情况下收集表统计信息?
回答 1
已采纳
数据库表的统计信息可以通过MySQL自动收集,也可以手动进行收集。MySQL会在以下情况下自动执行统计信息的收集:1)第一次打开表的时候。2)表修改的行超过1/6或者20亿条及以上时。3)当有新记录插
buffer pool命中率有没有系统视图能查询的?只能用show global status吗?--mysql
回答 1
查询performanceschema.globalstatus也可以获取状态信息然后计算缓存命中率可以使用showengineinnodbstatus\G直接查看(root@127.0.0.1)[p
MySQL存储过程开发用什么工具?
回答 2
路过学习了
有没有关于mysql json的资料?官网的比较难理解
回答 1
已采纳
https://www.modb.pro/db/1692011734424961024
MySQL 8.0 ,服务器8c16g,myini要如何配置才是最佳性能?
回答 1
已采纳
innodbbufferpoolsize尽量给大点,比如12g其它参数根据实际需要修改
rpm包安装mysql8.0,配置文件不是/etc/my.cnf,怎么修改配置?
回答 1
在/etc/my.cnf里面先配置一下mysql相关的配置项安装mysql8.0的rpm包将my.cnf文件移动到你想要的位置启动mysql服务mysqld mysqlddefaultsfi
查询缓存的参数有哪些?
回答 1
已采纳
这里有非常详细的,https://dev.mysql.com/doc/refman/5.7/en/querycache.html