
InnoDB是当前MySQL的默认的存储引擎,也是互联网等公司数据库存储引擎的不二选择。InnoDB的特性如下:
InnoDB的存储结构又可以分为逻辑存储结构和物理存储结构。下面分别进行介绍。
InnoDB存储引擎的逻辑存储结构和Oracle大致相同,所有数据都被逻辑地存放在一个空间中,我们称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。InnoDB存储引擎的逻辑存储结构大致如下图所示。

mysql> show variables like 'innodb_page_size';
# 输出的信息如下:
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+MySQL与Oracle一样都是通过逻辑存储结构来管理物理存储结构,即管理硬盘上存储的各种文件。下面将详细介绍InnoDB存储引擎中的主要文件。
“.ibd”文件和ibdata文件 这两种文件都是存放Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为 Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。
redo log是InnoDB存储引擎层生成的日志,主要为了保证数据的可靠性和事务的持久性。每个redo log默认的大小是1G,由参数“innodb_log_file_size”参数决定。
mysql> show variables like "innodb_log_file_size";
# 输出的信息如下:
+----------------------+------------+
| Variable_name | Value |
+----------------------+------------+
| innodb_log_file_size | 1073741824 |
+----------------------+------------+mysql --help | grep my.cnf
# 输出的信息如下:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnfmysql> show variables like 'log_error';
# 输出的信息如下:
+---------------+---------------------------------+
| Variable_name | Value |
+---------------+---------------------------------+
| log_error | /usr/local/mysql/data/error.log |
+---------------+---------------------------------+实际上MySQL内存的组成和Oracle类似,也可以分为SGA(系统全局区)和PGA(程序缓存区)。通过下面语句可以进行查看。
mysql> show variables like '%buffer%';InnoDB的线程结构主要分为主线程结构、I/O线程结构和其他线程结构。
后台线程中的主线程(master thread),优先级别最高。主线程内部有四个循环:
其中最主要的就是主循环(loop),该循环分为每1秒操作和每10秒操作两种情况。
MySQL有4大如下I/O线程,分别是:
其他线程结构包括:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。