mysql(下)
2021/7/21 2:05:54
本文主要是介绍mysql(下),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
log buffer redo日志的缓存 mysql其他的内容:表空间 行记录 锁
刷新到磁盘完成持久化,但是redis mysql都有内存缓存丢失的问题
bp---磁盘 1. 直接刷到磁盘会造成性能降低 2.先把提交的记录,操作信息缓存到另一个文件中,如果提交事务失败了,就从文件中取出这两条语句,再执行一下
一条记录 隐藏的字段 1.rolling_pointer回滚的指针 2.trx_id当前数据最新的一个事务id 3 row_id 有条件(没有主键、没有非空unique字段) 内存中max_row_id是全局变量,会把id分配给row_id之后自己再加1 之前在内存buffer pool中 256的倍数后会保存到磁盘
如果max_row_id已经到300,突然系统发生故障,256保存到磁盘,剩下的由256+256再重新分配
页面中的偏移量:前面的1248字节代表空间大小 在某个页面的偏移处写1、2、4、8个字节大小的redo日志 表空间和页号可以帮助定位到具体的页,在页中的具体位置写需要通过偏移量
mlog_write_string 数据没有默认的字节数,需要指定字节数
redolog是原子性的 插入语句(叶子结点、新建页、移动主键、内节点页面、页目录等都需要更改)
遍历redo 1 2 3 ..到rec_end时结束,前面的redo log都是一组
redo log的type占1个字节,一共有8位,第一位 为0 代表是普通日志 1代表是单独的原子性的操作
如果上面redo0 的type 为1,则单独执行,遍历从redo1开始
no编号 len长度 group第一个mtr的偏移量
body存具体的信息 checksum正确性校验
内存中若干个连续的redolog block
开始事务--sql---redo log ---mtr---block--logbuffer
2 并没有强制要把bpp中的数据刷新到磁盘,但是redolog一定要刷新到磁盘上
4.关闭服务器,收尾工作,会把没有刷新到磁盘的redolog刷到磁盘上
file初始值是2048 lsn初始值是8704
事 务 i d 什么是事务id? 为了保证事务唯一性的id 何时分配事务id?事务分只读事务--对临时表进行增删改的时候生成的事务id 读写事务 --对用户表进行增删改操作分配事务id 如何开启事务id? start transaction read only start transaction/begin 如何生成和维护事务id?
max_trx_id,全局变量,如果需要分配事务id的时候会从max_trx_id取,之后max_trx_id加1,当达到256的时候会刷新到磁盘
undo
这篇关于mysql(下)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程