InnoDB 中文参考手册 --- 10 multiversioning 的实现

参考|参考手册|中文

InnoDB 中文参考手册 --- 犬犬(心帆)翻译 10 multiversioning 的实现
因为 InnoDB 是一个 multiversioned 数据库系统,它必须在表空间内保存记录行的先期版本信息。这个信息被存储在被称为回滚段(rollback segment)的数据结构中,这与 Oracle 相似。

InnoDB 在内部处理时在数据库中为每行记录添加两个字段。一个6-byte 字段描述最后一个插入或更新该行的事务的标识符。同样被删除记录在内部处理上为更新该行的某一标志位, 该标志位用于记录它已被删除。每行记录同样包含着一个名为滚指针(roll pointer)的 7-byte 字段。这个指针指向一个在回滚段中存储的撤消日志记录(undo log record)。如果该行被更新过,那么撤消日志记录中包含必要的信息来重建它被更新前的内容。

InnoDB 需要通过一个事务的回滚来实现使用回滚段中的信息执行撤销操作。它也用于为一个 consistent read 来重建一个记录行的早期版本。

在回滚段中的撤销日志被分为插入和更新撤销日志。插入撤销日志(Insert undo logs)仅仅只在事务回滚时需要,它可以在事务一提交就被抛弃。更新撤销日志(Update undo logs)同样也在 consistent reads 中使用,它们将在当前没有事务时被抛弃。InnoDB 指派了一个数据快照,而 consistent read 需要更新撤销日志中的信息来重建一个数据库行的早期版本。

必须记录有规律地提交你的事务,同样的这些事务只发出了consistent reads。否则 InnoDB 不能够从更新撤销日志中抛弃数据,则回滚段可能会增加地太大而填满了整个表空间。

回滚段中的撤销日志记录的物理尺寸通常比它们相对应的插入或更新的记录要小些。 你可以通过学习这些信息估算出回滚段所需的空间。

在 multiversioning 的设计中,以一条 SQL 语句删除一个记录行时,该记录并不会立即从数据库中移除。只在当 InnoDB 抛弃删除的更新撤销日志记录时,它才会从数据库中物理地移除相应的记录行以及它的索引。 这个移除操作被称为 purge,它是非常快的,通常以与执行删除的 SQL 语句相同的时间顺序执行。
 

时间: 2024-08-30 15:59:34

InnoDB 中文参考手册 --- 10 multiversioning 的实现的相关文章

InnoDB 中文参考手册 --- 目录

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 InnoDB home InnoDB Engine in MySQL-Max-3.23.56/MySQL-4.0.12The Up-to-Date Reference Manual of InnoDB Updated April 21, 2003: Added notes to section 4.3 that a self-referential ON UPDATE CASCADE and SET NULL conve

InnoDB 中文参考手册 --- 14 InnoDB 表的限制

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 14 InnoDB 表的限制 在 < 3.23.50 版本的 InnoDB 中,不可以使用 ALTER TABLE 或 CREATE INDEX 来修改一个已经有了外键约束或参考了外键约束的表.使用 DROP TABLE 和 CREATE TABLE 来代替它. 不可以将 MySQL 系统表(如 'user' 或 'host' )转换成 InnoDB 类型.系统表必须总是为 MyISAM 类型的. InnoDB 表不支持

InnoDB 中文参考手册 --- 译者序

参考|参考手册|中文 InnoDB 中文参考手册 译者: 犬犬(心帆) Shuixin13@163.com0 译者序 Enterprise Level Solutions, High Availability and Robust Data Integrity for MySQL Transactions, row level locking, hot backup, and foreign keys for MySQL - without compromising the speed of M

InnoDB 中文参考手册 --- 2 InnoDB 启动选项

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 2 InnoDB 启动选项为了在 MySQL-Max-3.23 中使用 InnoDB 表,你必须在配置文件'my.cnf'或'my.ini'(WINDOWS系统)中的 [mysqld] 区中详细指定配置参数. 作为最小设置,在 3.23 中你必须在 innodb_data_file_path 上指定数据文件名能及大小.如果在'my.cnf'中没有指定innodb_data_home_dir,系统将在 MySQL 的 da

InnoDB 中文参考手册 --- 3 建立一个 InnoDB 数据库

参考|参考手册|数据|数据库|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 3 建立一个 InnoDB 数据库假设你已经安装了 MySQL 并且已经修改了 my.cnf 包含了必要的 InnoDB 参数设置 .在启动 MySQL 之前必须检查为InnoDB 指定的数据与日志文件路径是否存在以及在 这些目录上有足够的权限.InnoDB 不会自己建立目录,只能建立文件.同时检查是否有足够的磁盘空间存放数据与日志文件. 当创建一个 InnoDB 数据库时最好以命令行方式来运行 MySQL

InnoDB 中文参考手册 --- 6 备份和恢复 InnoDB 数据库

备份|参考|参考手册|恢复|数据|数据库|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 6 备份和恢复 InnoDB 数据库安全的数据库管理就是使用正规的数据备份. InnoDB Hot Backup 是一个在线备份工具,你可以在 InnoDB 数据库运行时使用它来实现在线备份.InnoDB Hot Backup 不需要你关闭你的服务器也不需要加任何锁或影响其它普通的数据操作.InnoDB Hot Backup 是一个非免费的附加工具,它的费用为每 MySQL 服务器每年 400

InnoDB 中文参考手册 --- 8 InnoDB 事务模式与锁定

参考|参考手册|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 8 InnoDB 事务模式与锁定在 InnoDB 事务处理模式中, the goal has been to combine the best properties of a multiversioning database to traditional two-phase locking. InnoDB 进行行级的锁定,并以与 Oracle 非锁定读取(non-locking)类似的方式读取数据. InnoDB 中的锁

InnoDB 中文参考手册 --- 9 性能调整技巧

参考|参考手册|技巧|性能|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 9 性能调整技巧(Performance tuning tips)1. 如果 Unix top 或 Windows 任务管理器(Task Manager) 显示服务的 CPU 占用率小于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)你的系统瓶颈可能在磁盘读写上.或许你提交了大量的事务,或者是缓冲池

InnoDB 中文参考手册 --- 11 表和索引结构

参考|参考手册|索引|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 11 表和索引结构MySQL 在数据库目录下的 .frm 文件中存储它的数据字典信息.但是每个 InnoDB 类型表也同样在 InnoDB 表空间内的内部的数据字典中存在它自己的进入点.当 MySQL 移除(drop) 一个表或一个数据库时,它将同时删除 .frm 文件,以及在 InnoDB 的数据字典中相对应的进入点.这就是为什么不能通过简单的删除 .frm 文件为移除数据库中的 InnoDB 类型表的原因,以及