好看的做地图分析图的网站,物联网设计大赛官网,网站被黑能黑多长时间,建设网站所需资料MySQL由几块组成
连接器分析器优化器执行器 MySQL的三大log
blog
作用#xff1a;
用于主从同步与数据恢复
记录内容#xff1a;
已经完成的 DML(数据操作语句)#xff0c;主要是用于数据备份
redolog重试日志
作用#xff1a;
崩溃恢复#xff0c;用于事…MySQL由几块组成
连接器分析器优化器执行器 MySQL的三大log
blog
作用
用于主从同步与数据恢复
记录内容
已经完成的 DML(数据操作语句)主要是用于数据备份
redolog重试日志
作用
崩溃恢复用于事务的持久化确保数据一致性减少写磁盘IO慢的问题
记录内容
记录数据页的物理变化(可以理解为记录的是DML造成的数据diff)
工作机制 MySQL写操作同步写的是缓存区与redolog异步写的磁盘 思考写redolog也是磁盘操作为啥比直接写数据快 redolog是连续内存顺序写入不需要IO寻址所以更快 工作机制
写入顺序redolog 是顺序写入的这是非常高效的。两段式提交在事务提交时MySQL 首先将修改记录到 redolog然后再修改数据页。这样在系统崩溃时系统可以通过 redolog 恢复事务的修改。双写缓冲为了防止单点故障导致的数据丢失InnoDB 使用双写缓冲机制将数据同时写入 redolog 和缓冲池。
undolog
作用
事务的回滚多版本控制MVCC由undolog实现
记录内容
旧值用于事务的回滚
MVCC
多版本并发控制 可以看下面这个文章 MVCC详解
MVCC与undolog如何实现版本链
mysql列中会存有俩隐藏字段
trx_id: 最近操作的事务id(自增)事务可能未提交roll_pointer: 最新undolog日志 单条数据的undolog内容:(链表结构)datamysql数据快照roll_pointer这条数据上个的undolog地址 insert 语句产生的undolog roll_pointer内容为空因为他没有上个版本 所以可以通过mysql数据undolog 找到数据的历史版本
MVCC如何解决幻读问题
参考资料
简单概括如下 开启事务的时候会产生一个视图存本次事务id所有活跃的事务id等 数据的事务id最小的活跃事务id 证明已提交可读 数据的事务id本次事务id 证明未提交不可读 数据的事务id属于活跃的事务id 证明当时未提交不可读
这样就通过比较事务id的方式解决幻读了
MVCC如何实现读已提交与可重复读
读已提交实现原理 一致性读 每次 SELECT 查询都会获取最新提交的快照。事务读取时会忽略未提交的事务所做的修改读取其他事务已提交的最新版本。 事务ID比较 读取时检查数据行的创建版本号和删除版本号。 只读取创建版本号小于等于当前事务ID的数据并且删除版本号大于当前事务ID的数据或删除版本号为空的数据。
可重复读实现原理
固定的快照视图 事务开始时获取一个一致性快照整个事务期间读取的数据视图保持不变
一致性读
事务开始时获取一个一致性快照。在事务期间所有 SELECT 查询基于该一致性快照。 事务ID比较 读取时检查数据行的创建版本号和删除版本号。只读取创建版本号小于等于当前事务开始时的快照数据并且删除版本号大于当前事务开始时的快照数据或删除版本号为空的数据。 区别 可重复读在事务开始时会生成一个一致性快照存当时活跃的事务id读已提交比较的是数据上的事务id可重复读比较多是快照数据上的事务id 扩展
interpolateparams 参数做了什么
https://wklken.me/posts/2021/01/22/golang-sql-driver-interpolateparams.html interpolateparamsfalse prepared - execute - close 好处:
避免通过引号组装拼接sql语句。避免sql注入带来的安全风险可以多次执行的sql语句
interpolateparamstrue
execute - close
减少了prepared网络请求会防止SQL注入, 在驱动中通过转义特殊字符实现的