核心模块-深入探索数据库引擎-MySQL-揭秘 (核心模块英文)
简介
Savepoint 是 MySQL 中的一种机制,允许在事务中创建标记点,以便在事务失败时回滚到该标记点。Savepoint 的原理是将事务的当前状态存储在各种数据结构中,包括服务器层、binlog 和 InnoDB 存储引擎。数据结构
1. Undo 日志序号
每个事务都有一个称为
undo_no
的属性,它存储着事务对表中记录进行的最后一个更改所生成的 undo 日志的序号。每个事务都维护自己独立的 undo 日志序号,与其他事务无关。
2. Savepoint 结构
创建 savepoint 时,服务器层、binlog 和 InnoDB 都会创建各自用于存储 savepoint 信息的结构: 服务器层 `SAVEPOINT` 对象:存储 savepoint 名称和 binlog 偏移量。 Binlog Binlog偏移量:指向 binlog 中 savepoint 事件的位置。 InnoDB `trx_named_savept_t` 对象:存储 savepoint 名称、事务对象的 `undo_no` 属性值以及前一个 savepoint 的指针。3. 内存布局
服务器层的 `SAVEPOINT` 对象、InnoDB 的 `trx_named_savept_t` 对象和 binlog 偏移量都存储在同一块内存中。以下是对齐的内存布局: | SAVEPOINT 对象 (48 字节) | trx_named_savept_t 对象 (40 字节) | Binlog 偏移量 (8 字节) |创建 Savepoint
1. 同名 Savepoint 查找
在创建 savepoint 之前,服务器层将检查用户线程中的 savepoint 链表是否存在同名的 savepoint。2. 删除同名 Savepoint
如果找到同名的 savepoint,服务器层将从链表中删除它。InnoDB 也将从事务对象的 savepoint 链表中删除相应的 savepoint 结构。3. 保存 Savepoint
删除同名 savepoint 后,服务器层将创建savepoint: 创建 `SAVEPOINT` 对象和 `trx_named_savept_t` 对象。 将 binlog 偏移量写入服务器层为它分配的内存。 将 `trx_named_savept_t` 对象添加到事务对象的 savepoint 链表。结论
MySQL savepoint 的原理涉及在服务器层、binlog 和 InnoDB 存储引擎中维护各种数据结构。通过这些结构,事务可以创建标记点并在发生故障时回滚到这些标记点。关于mysql数据库存储引擎描述
关于mysql数据库存储引擎描述
MySQL数据库有多种存储引擎,每种存储引擎都有其特定的特点和用途。以下是一些关于MySQL数据库存储引擎的描述:
1. InnoDB存储引擎:InnoDB是MySQL的默认存储引擎,它提供了事务支持、行级锁定和外键约束等功能。InnoDB适合于需要事务支持和复杂查询的应用程序。
2. MyISAM存储引擎:MyISAM是MySQL早期版本中常用的存储引擎,它不支持事务支持,但提供了全文搜索、表锁和全文索引等功能。MyISAM适合于不需要事务支持的应用程序。
3. Memory存储引擎:Memory存储引擎将数据存储在内存中,可以快速检索数据。Memory适合于需要快速检索数据的应用程序,但需要注意内存溢出的问题。
4. Archive存储引擎:Archive存储引擎适合于需要大量数据的备份和归档,它提供了高压缩比和低读写性能。
5. NDB Cluster存储引擎:NDB Cluster是一个分布式存储引擎,它提供了高可用性和高并发性能。NDB Cluster适合于需要高可用性和高并发性能的应用程序。
总之,MySQL数据库的存储引擎可以根据应用程序的需求进行选择,不同的存储引擎具有不同的特点和用途。
MySql引擎有哪些
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。 现在许多不同的数据库管理系统都支持多种不同的数据引擎。 MySql的核心就是存储引擎。 存储引擎查看MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5.1,可以在命令行窗口使用:SHOW ENGINES命令来查看MySQL使用的引擎,命令的输出为(我用的Navicat Premium):看到MySQL给用户提供了这么多存储引擎,包括处理事务安全表的引擎和出来了非事物安全表的引擎。 如果要想查看数据库默认使用哪个引擎,可以通过使用命令:SHOW VARIABLES LIKE storage_engine;来查看,查询结果为:在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。 Support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎 。 下面来看一下其中几种常用的引擎。 一 、Innodb支持事务,是事务安全的,提供行级锁与外键约束,有缓冲池,用于缓冲数据和索引。 适用场景:用于事务处理,具有ACID事物支持,应用于执行大量的insert和update操作的表。 二 、MyISAM 不支持事务,不支持外键约束,不支持行级锁,操作时需要锁定整张表,不过会保存表的行数,所以当执行select count(*) from tablename时执行特别快。 适用场景:用于管理非事务表,提供高速检索及全文检索能力,适用于有大量的select操作的表,如 日志表三 、MEMORY 使用存在于内存中的内容创建表,每一个memory只实际对应一个磁盘文件。 因为是存在内存中的,所以memory访问速度非常快,而且该引擎使用hash索引,可以一次定位,不需要像B树一样从根节点查找到支节点,所以精确查询时访问速度特别快,但是非精确查找时,比如like,这种范围查找,hash就起不到作用了。 另外一旦服务关闭,表中的数据就会丢失,因为没有存到磁盘中。 适用场景:主要用于内容变化不频繁的表,或者作为中间的查找表。 对表的更新要谨慎因为数据没有被写入到磁盘中,服务关闭前要考虑好数据的存储四、 MERGEMERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。 构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。 每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。 除了便于同时引用多个数据表而无需发出多条查询,MERGE数据表还提供了以下一些便利。 MERGE数据表可以用来创建一个尺寸超过各个MyISAM数据表所允许的最大长度逻辑单元你看一把经过压缩的数据表包括到MERGE数据表里。 比如说,在某一年结束之后,你应该不会再往相应的日志文件里添加记录,所以你可以用myisampack工具压缩它以节省空间,而MERGE数据表仍可以像往常那样工作
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。