MySQL存储引擎简介

1、存储引擎与MySQL

创建表时,MySQL默认使用innodb存储引擎在硬盘上为该表创建存储,可以选择替代存储引擎用于每个表,通常,根据哪些存储引擎可以提供最适合应用程序的需求功能来选择。每个存储引擎具有一组运行特征,特征包括用于管理查询争用的锁的类型以及该存储引擎是否支持事务,这些引擎属性对查询处理性能,并发行以及死锁预防具有一定影响。创建表时,MySQL默认使用innodb存储引擎在硬盘上为该表创建存储,可以选择替代存储引擎用于每个表,通常,根据哪些存储引擎可以提供最适合应用程序的需求功能来选择。每个存储引擎具有一组运行特征,特征包括用于管理查询争用的锁的类型以及该存储引擎是否支持事务,这些引擎属性对查询处理性能,并发行以及死锁预防具有一定影响。

2、可用的存储引擎

MySQL提供并维护多个存储引擎,MySQL服务器还可以与许多个第三方存储引擎兼容。MySQL存储引擎是数据库服务器内的低级别引擎,负责存储和检索数据,并且可以通过内部MySQL API进行访问,在某些情况下可由应用程序直接访问。注意,一个应用程序可以在任何时间使用多个存储引擎,InnoDB和NDBCLUSTER是具有事务性的两个存储引擎。

3、InnoDB存储引擎

(1)事务安全:通过事务提交,回滚以及用于保护用户数据的故障恢复功能,可以实现ACID遵从性。

(2)外键支持:包括级联删除和更新。

(3)混合查询:同一语句内,可以将InnoDB表与来自其他MySQL存储引擎表混合,比如可以使用join在单个查询中合并来自InnoDB和MEMEORY表的数据

(4)全文索引:可以在文本列中有效搜索单词和短语。

4、InnoDB是默认存储引擎

使用ALTER TABLE更改引擎是一项成本很高的操作,因为它在内部将所有数据从一个引擎复制到另一个引擎,不要将MySQL数据库(例如user或host)中的MySQL系统表  转换为InnoDB,系统表使用MYISAM。

5、InnoDB功能

6、InnoDB系统表空间

InnoDB 使用两个主要的基于磁盘的资源来运行:

(1)表空间:在单个逻辑存储区域中存储表内容(数据行)和索引

(2)日志文件:记录回滚和恢复的事务活动

InnoDB 在表空间中存储数据、索引、元数据、日志和缓冲区。默认情况下,数据和索引存储在基于表的表空间中。InnoDB 使用共享表空间来包含元数据、撤消日志、更改缓冲区以及两次写缓冲区。

共享表空间可以占用多个文件。可以将共享表空间中的最后一个文件配置为自动扩展,在这种情况下,如果表空间装满,InnoDB 会自动扩展该表空间。默认情况下,共享表空间还包含回滚段。事务修改行时,将在回滚段中存储撤消日志信息。此信息用于回滚失败的事务。通过将 innodb_undo_logs 选项设置为非零值并配置innodb_undo_tablespaces 的值,来将回滚段移出共享表空间。

7、数据表空间

InnoDB 创建的每个新表在数据库目录中设置一个 .ibd 文件来搭配表的 .frm 文件。.ibd 文件用作表自己的表空间文件,InnoDB 存储表内容和索引。您仍需要共享表空间,因为它包含 InnoDB 数据字典和回滚段。可以使用 innodb_file_per_table 选项控制此设置。您需要默认设置来使用一些其他功能,例如表压缩和快速截断。不是将数据存储在基于表的表空间中,可以通过使用 skip_innodb_file_per_table

选项或者将 innodb_file_per_table 选项设置为 OFF 来将数据存储在共享数据库中。禁用该选项不会影响已经创建的任何 InnoDB 表的可访问性。仍然可以访问这些表。可以混合同一数据库中不同表中的表空间类型。更改该设置仅会更改已创建的新表的默认值,或者已更改来将引擎设置为 InnoDB 的表(甚至已经在使用 InnoDB 的表)的默认值。

8、表空间目录结构

除了其表空间文件,InnoDB 存储引擎还管理一组特定于 InnoDB 的日志文件,其中包含关于正在进行的事务的信息。客户机执行事务时,其进行的更改存放在 InnoDB 日志(ib_logfile) 中。最新日志内容缓存在内存中。通常,缓存的日志信息会在事务提交时写入并刷新到磁盘上的日志文件中,虽然也可能提前发生该操作。

9、共享表空间配置

如果命名了多个数据文件,则通过分号 (;) 符号分隔这些文件,如第二个幻灯片示例中所示。增加 InnoDB 系统表空间的一种更容易(但是不太可取)的方式是从一开始就将其配置为自动扩展。在表空间定义中指定最后一个数据文件的 autoextend 属性。然后,InnoDB 在用完空间时会以 64 MB 增量自动增加该文件的大小。可以通过置

innodb_autoextend_increment 系统变量的值来更改该增量大小,以 MB 为单位。如果使用关键字 autoextend 定义了最后一个数据文件,重新配置表空间的过程必须考虑最后一个数据文件已经增长到的大小。获取数据文件的大小,将其向下舍入到1024 × 1024 字节 (= 1 MB) 的最近倍数,并在 innodb_data_file_path 中显式指定舍入的大小。然后,可以添加其他数据文件(使用尚不存在的文件名)。请记住,仅 innodb_data_file_path 中的最后一个数据文件可以指定为自动扩展。

10、日志文件和缓冲区

客户机执行事务时,其进行的更改存放在 InnoDB 日志中。最新日志内容缓存在内存中(日志缓冲区)。缓存的日志信息会在事务提交时写入并刷新到磁盘上的日志文件中,虽然也可能提前发生该操作。

如果修改表时发生故障,将使用日志文件进行自动恢复。MySQL 服务器重新启动时,它会重新应用日志中记录的更改,以确保表中反映所有已提交事务。

11、缓冲区池配置

MySQL 使用多个缓冲区池来改进大型缓冲区池(通常为多 GB 范围)的性能。使用散列函数将缓冲区池中的每个页随机分配给一个缓冲区池。每个缓冲区池管理其自己的空闲列表、刷新列表、LRU 以及连接到缓冲区池的所有其他数据结构,并由其自己的缓冲区池互斥锁进行保护。默认情况下,MySQL 配置八个缓冲区池实例(除了在 32 位

widows系统上)要更改此设置,请将 innodb_buffer_pool_instances 配置选项设置为从 1(最小值)到64(最大值)的一个值。仅当将 innodb_buffer_pool_size 设置为大小为 1 GB 或更大时,此选项才生效。您指定的总大小在所有缓冲区池之间分割。您应指定innodb_buffer_pool_instances 和 innodb_buffer_pool_size 的组合,从而每个缓冲区池实例至少为 1 GB。要在服务器启动时预装入缓冲区池,请启用选项

innodb_buffer_pool_dump_at_shutdown

innodb_buffer_pool_load_at_startup

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值