文章目录
- [MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点5:数据字典(Data Dictionary)](#MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点5:数据字典(Data Dictionary))
-
- [File-based Metadata Storage (基于文件的元数据存储)](#File-based Metadata Storage (基于文件的元数据存储))
- [Transactional Data Dictionary (事务数据字典)](#Transactional Data Dictionary (事务数据字典))
- [Serialized Dictionary Information (SDI) :数据字典的序列化(持久化存储)](#Serialized Dictionary Information (SDI) :数据字典的序列化(持久化存储))
- [Dictionary Object Cache(数据字典对象缓存)](#Dictionary Object Cache(数据字典对象缓存))
- 例题
- 参考
【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)
MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点5:数据字典(Data Dictionary)
元数据 是数据库中描述数据的数据,包括各种数据库对象的定义,例如:
- 表和列的定义
- 索引和约束的定义
- 用户和权限的定义
...
而数据字典就是存储元数据的地方。
File-based Metadata Storage (基于文件的元数据存储)
MySQL 8.0之前的版本,数据字典中的元数据是存放在不同的元数据文件中。
File Type | Description |
---|---|
.frm files | 表的元数据文件。 |
.par files | 分区定义文件。 |
随着InnoDB表的本地分区支持的引入,在MySQL 5.7中InnoDB停止使用分区定义文件。 | |
.TRN files | 触发器命名空间文件。 |
.TRG files | 触发器参数文件。 |
.isl files | InnoDB符号链接文件,包含在数据目录之外创建的文件表空间文件的位置。 |
db.opt files | 数据库配置文件。 |
每个数据库目录有一个这样文件,包含数据库默认字符集属性。 | |
ddl_log.log file | 元数据操作记录文件。 |
该文件包含由数据定义语句(如DROP TABLE和ALTER TABLE)生成的元数据操作记录。 |
Transactional Data Dictionary (事务数据字典)
从MySQL 8.0开始,数据字典信息集中存放在InnoDB的数据字典表中。
- 数据字典表归属于mysql database
- 存放在一个单一的InnoDB表空间中,即在MySQL数据目录中名为mysql.ibd的文件
- INFORMATION_SCHEMA的一些表和 SHOW 语句作为访问数据字典的接口
Serialized Dictionary Information (SDI) :数据字典的序列化(持久化存储)
MySQL 8.0开始对数据字典的存储进行了修改,即将存储在.frm、.par、.TRN等系统文件中的数据字典信息存储到InnoDB的字典表中。
同时,除了在数据字典中存储元数据外,MySQL还以序列化(SDI)的形式存储它。
Serialized Dictionary Information (SDI)是MySQL中存储关于数据库对象的元数据(数据字典)的一种形式,用于提供元数据的冗余性。
SDI数据通过对表进行DDL操作或CHECK TABLE FOR UPGRADE进行更新,并且以JSON格式存储。
对于SDI信息的存储,会根据存储引擎的不同有所不同:
- InnoDB将SDI数据与数据一起存储在其表空间文件中。
-除了临时表空间和撤销表空间文件外,SDI存在于所有InnoDB表空间文件中。
-InnoDB表空间文件中的SDI记录仅描述表和表空间对象。 - NDBCLUSTER将SDI数据存储在NDB字典中。
- 其他存储引擎(如MyISAM等)将SDI数据存储在数据库目录中的.sdi文件中。
参考:
https://dev.mysql.com/doc/refman/8.0/en/serialized-dictionary-information.html
对于SDI信息,可以通过MySQL提供的ibd2sdi工具进行查看和转储。
关于ibd2sdi工具可以参考如下文章:
【MySQL】ibd2sdi工具介绍和使用
https://teacherwhat.blog.csdn.net/article/details/132917728
Dictionary Object Cache(数据字典对象缓存)
数据字典对象缓存是一个共享的全局缓存,将先前访问过的数据字典对象存储在内存中,以实现对象的重用并最小化磁盘I/O。
与MySQL使用的其他缓存机制类似,数据字典对象缓存使用基于LRU的驱逐策略,从内存中驱逐最近未使用的对象。
数据字典对象缓存由存储不同对象类型的缓存分区组成。
某些缓存分区的大小限制是可配置的,而其他分区的大小是硬编码的。
Cache Partition | Description | Variable | Default value |
---|---|---|---|
tablespace definition cache partition | Stores tablespace definition objects | tablespace_definition_cache | 256 |
schema definition cache partition | Stores schema definition objects | schema_definition_cache | 256 |
table definition cache partition | Stores table definition objects | max_connections | 151 |
stored program definition cache partition | Stores stored program definition objects | stored_program_definition_cache | 256 |
character set definition cache partition | Stores character set definition objects | - | hardcoded object limit of 256 |
collation definition cache partition | Stores collation definition objects | - | hardcoded object limit of 256 |
参考:
https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-object-cache.html
例题
clike
Choose three.
Which three methods display the complete table definition of an InnoDB table?
A) hexdump -v -C table.frm
B) REPAIR TABLE table USE_FRM
C) mysqldump --no-data schema table
D) Query the Information Schema.
E) SELECT * FROM table 1\G
F) SHOW CREATE TABLE
Answer:CDF
参考
Chapter 14 MySQL Data Dictionary
https://dev.mysql.com/doc/refman/8.0/en/data-dictionary.html
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html#mysqld-8-0-0-data-dictionary
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html#mysqld-8-0-12-data-dictionary