内容概述

  1. 数据库存储引擎概述

  2. 数据库存储引擎种类

  3. 数据库存储引擎特性

  4. 数据库存储引擎应用

  5. 数据库存储引擎结构

1. 数据库存储引擎概述

作用:数据库存储引擎主要负责数据库信息有序存储和调取(类似于文件系统)

--存储引擎结构(存储数据角度--段区页--磁道---block--扇区)

--存储架构角度- 表空间信息-- 各种表空间文件

2. 数据库存储引擎种类

## 查看可以应用的存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

3. 数据库存储引擎特性(Innodb)

序号

特性

解释说明

01

数据访问性

支持多版本并发控制特性,支持行级锁控制并发

02

数据索引特性

支持聚簇索引,辅助索引,可以组织存储数据和优化查询

03

数据事务特性

支持事务概念特性,可以实现数据安全保证

04

数据缓冲特性

支持多缓冲区功能,自适应hash索引

05

数据迁移特性

支持复制数据数据中的高级功能特性,支持数据备份恢复的热备

06

数据自愈特性

支持自动故障恢复

07

数据存储特性

支持数据双写机制,数据存储有关的安全机制

4. 数据库存储引擎应用

存储引擎设置

## 查看数据库默认存储引擎
mysql> select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+

## 永久修改存储引擎配置
vim /etc/my.cnf
[mysqld]
default_storage_engine=InnoDB

## 修改单张表的存储引擎
ALTER TABLE 表名 ENGINE = InnoDB;

5. 数据库存储引擎结构

磁盘结构部分:

类型一:共享表空间

文件:ibdata1

早期:所有数据库相关的数据统一存储在共享表空间文件中

目前:共享表空间中数据已经做了拆分,此时只保留change buffer 数据信息进行保存

类型二:独立表空间

文件:表名.ibd

作用:主要用于存储表的结构和数据信息

管理:

mysql> select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
|                       1 |
+-------------------------+
-- 当默认设置为1表示所有用户数据单独存储到ibd文件中,当设置为0时会将数据信息存储到ibdata文件中

作用:

01:可以实现快速的数据迁移

数据库服务器A xxx大表 -------数据库服务器B xxx大表

02: 当服务程序异常时,可以利用表空间文件修复数据

tips:要恢复数据的表结构需要清楚 ibd数据 -- 创建好表

类型三:undo 表空间

作用:可以将事务变化前的数据页信息进行保存,便于进行数据的回滚操作

文件:undo_00x

配置:

mysql> select @@innodb_undo_tablespaces;
+---------------------------+
| @@innodb_undo_tablespaces |
+---------------------------+
|                         2 |
+---------------------------+
-- 设置undo日志文件的个数
mysql> select @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
|                 1073741824 |
+----------------------------+
-- 设置单独undo文件存储日志数据量 默认一个G

类型四:temp 表空间

作用:用于存储临时数据信息,比如 排序的数据信息,分组的数据信息

文件:ibtmp1

类型五:redo 事务日志

作用:用于存储数据操作记录信息,实现方法:利用WAL技术

文件:ib_logfileX

配置:

mysql> select @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
|                 1073741824 |
+----------------------------+

类型六:ib_buffer_pool 预热文件

作用:预热文件可以用于缓冲和缓存,可以存储热数据页

文件:ib_buffer_pool

类型七:Doublewrite Buffer(DWB)文件

作用:可以保证数据页信心存储,不会出现坏页或者出现坏页时,可以修复坏页

文件:#ib_16384_0.dblwr #ib_16384_1.dblwr

内存结构部分:

类型一:AHI

作用:用于存储热点数据页的内存地址信息,可以快速调取数据页中数据,减少走索引树IO的消耗

类型二:change buffer

作用:将辅助索引树中,变化的索引数据页信息进行临时存储,避免辅助索引树结构频繁变化,导致ye'wu

访问索引树受到影响

类型三:Buffer Pool

作用:包含了AHI内存数据信息 + change buffer 内存数据信息 + 磁盘加载数据页信息和索引页信息

配置:

mysql> select @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                 134217728 |
+---------------------------+