我是靠谱客的博主 仁爱红牛,最近开发中收集的这篇文章主要介绍【MySQL】 MySQL 8.0 新特性之数据字典1. 数据字典2. 删除了基于文件的元数据存储3. 字典数据的事务存储4. 数据字典对象缓存5. INFORMATION_SCHEMA和数据字典集成,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL 8.0 新特性之数据字典

  • 1. 数据字典
    • 1.1 数据字典如何升级
    • 1.2 使用 MySQL 的 debug 版本查看数据字典表
  • 2. 删除了基于文件的元数据存储
  • 3. 字典数据的事务存储
  • 4. 数据字典对象缓存
  • 5. INFORMATION_SCHEMA和数据字典集成
    • 5.1 查询优化

MySQL Server 8.0 合并了一个全局的事务数据字典,用于存储有关数据库对象的信息,也有了原子DDL功能。在 MySQL 以前的版本中,字典数据存储在元数据文件、非事务性表和特定于存储引擎的数据字典中。

在学习 MySQL 数据字典之前,先一起了解一下什么是数据字典元数据

  • 数据字典就类似于系统编目或花名册,它保存数据库服务器上的元数据信息(数据库的整体属性信息)。

  • 元数据信息包括:数据库的属性信息、数据表的属性信息、字段的属性信息、视图的属性信息、用户信息、统计类信息等。

1. 数据字典

数据字典表是受保护的,只有在 MySQL 的 debug 版本中才能访问。但是,MySQL 支持通过 INFORMATION_SCHEMA 表和 SHOW 命令来访问存储在数据字典表中的数据。

MySQL 系统表在 MySQL 8.0 中仍然存在,可以通过 SHOW TABLES 语句在 MySQL 系统数据库来查看。MySQL 数据字典表和系统表的区别在于,数据字典表包含执行SQL查询所需的元数据,而系统表包含时区、帮助信息等辅助数据。

1.1 数据字典如何升级

1.2 使用 MySQL 的 debug 版本查看数据字典表

数据字典表是受保护的,只有在 MySQL 的 debug 版本中才能访问。编译 debug 版本参考:Compiling MySQL for Debugging

不建议直接修改或写入数据字典表,这可能会导致您的 MySQL 实例无法运行。

  • 使用调试支持编译 MySQL 后,使用此 SET 语句使数据字典表对mysql客户端会话可见:
mysql> SET SESSION debug='+d,skip_dd_table_access_check';

在这里插入图片描述

  • 使用此查询检索数据字典表:
mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden='System';

  • 用于 SHOW CREATE TABLE 查看数据字典表定义。例如:
mysql> SHOW CREATE TABLE mysql.catalogsG

在这里插入图片描述

2. 删除了基于文件的元数据存储

在以前的 MySQL 版本中,字典数据部分存储在元数据文件中。基于文件的元数据存储有以下问题:

  • 昂贵的文件扫描成本;
  • 对文件系统相关错误的敏感性太低;
  • 会有一大堆处理复制和容灾故障恢复的复杂代码;
  • 缺乏可扩展性导致难以为新功能和关系对象添加元数据。

下面列出已从 MySQL 中删除的元数据文件。除非另有说明,以前存储在元数据文件中的数据现在存储在数据字典表中。

  • .frm 文件:表定义文件,是描述数据表结构的文件。、

  • .par 文件:分区定义文件。 InnoDB 引入了对 InnoDB 表的本机分区支持后,在 MySQL 5.7 中停止使用分区定义文件

  • TRN 文件:触发命名空间文件。

  • .TRG 文件:触发参数文件。

  • .isl 文件:InnoDB 符号链接文件,包含在数据目录之外创建的 file-per-table 表空间文件的位置。

  • db.opt 文件:数据库配置文件。这些文件(每个数据库目录一个)包含数据库默认字符集属性。

  • ddl_log.log文件:该文件包含由数据定义语句(例如:DROP TABLE 和ALTER TABLE)生成的元数据操作的记录。

3. 字典数据的事务存储

数据字典模式将字典数据存储在事务 ( InnoDB) 表中。数据字典表与非数据字典系统表一起位于 MySQL 数据库中。

数据字典表是在一个名为 mysql.ibd 的 InnoDB 表空间中创建的,它位于 MySQL 数据目录中。mysql.ibd 表空间文件必须位于 MySQL 数据目录下,并且其名称不能被其他表空间修改或使用。

字典数据受提交、回滚和崩溃恢复功能的保护,与保护存储在InnoDB表中的用户数据相同。

4. 数据字典对象缓存

字典对象缓存是一个共享的全局缓存,它将以前访问的数据字典对象存储在内存中,以支持对象重用和最小化磁盘I/O。与 MySQL 使用的其他缓存机制类似,字典对象缓存使用基于lru的驱逐策略从内存中驱逐最近最少使用的对象。

mysql> show variables like '%definition%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| schema_definition_cache         | 256   |
| stored_program_definition_cache | 256   |
| table_definition_cache          | 2000  |
| tablespace_definition_cache     | 256   |
+---------------------------------+-------+
4 rows in set (0.01 sec)

字典对象缓存包括存储不同对象类型的缓存分区。一些缓存分区大小限制是可配置的,而另一些则是硬编码的。

  • tablespace_definition_cache - 表空间定义缓存分区:存储表空间定义对象,默认值为 256。

  • schema_definition_cache - 架构定义缓存分区:存储架构定义对象,默认值为 256。

  • table_definition_cache - 表定义缓存分区,存储表定义对象。

  • stored_program_definition_cache - 存储程序定义缓存分区:存储存储程序定义对象,默认值为 256。

  • 字符集定义缓存分区:存储字符集定义对象,硬编码对象限制为 256。

  • 归类定义缓存分区:存储归类定义对象,硬编码对象限制为 256。

5. INFORMATION_SCHEMA和数据字典集成

随着数据字典的引入,一些 INFORMATION_SCHEMA 表被实现为数据字典表的视图,对这些表的查询现在效率更高,因为它们从数据字典表获得信息,而不是通过其他较慢的方法。

5.1 查询优化

MySQL 8.0 数据字典存放在表中,对他们进行查询时,可以充分利用 SQL 语句的特性,如索引、连接等。而 MySQL 8.0 之前,需要从文件中读取数据。

MySQL 5.7

mysql> explain select * from information_schema.tables where table_schema = 'sbtest';
+----+-------------+--------+------------+------+---------------+--------------+---------+------+------+----------+--------------------------------------------------+
| id | select_type | table  | partitions | type | possible_keys | key          | key_len | ref  | rows | filtered | Extra                                            |
+----+-------------+--------+------------+------+---------------+--------------+---------+------+------+----------+--------------------------------------------------+
|  1 | SIMPLE      | tables | NULL       | ALL  | NULL          | TABLE_SCHEMA | NULL    | NULL | NULL |     NULL | Using where; Open_full_table; Scanned 1 database |
+----+-------------+--------+------------+------+---------------+--------------+---------+------+------+----------+--------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
-----------------------------------

MySQL 8.0

mysql> explain select * from information_schema.tables where table_schema = 'sbtest';
+----+-------------+-------+------------+--------+--------------------+------------+---------+-------------------------+------+----------+-------------+
| id | select_type | table | partitions | type   | possible_keys      | key        | key_len | ref                     | rows | filtered | Extra       |
+----+-------------+-------+------------+--------+--------------------+------------+---------+-------------------------+------+----------+-------------+
|  1 | SIMPLE      | cat   | NULL       | index  | PRIMARY            | name       | 194     | NULL                    |    1 |   100.00 | Using index |
|  1 | SIMPLE      | sch   | NULL       | eq_ref | PRIMARY,catalog_id | catalog_id | 202     | mysql.cat.id,const      |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | tbl   | NULL       | ref    | schema_id          | schema_id  | 8       | mysql.sch.id            |   92 |   100.00 | Using where |
|  1 | SIMPLE      | col   | NULL       | eq_ref | PRIMARY            | PRIMARY    | 8       | mysql.tbl.collation_id  |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | ts    | NULL       | eq_ref | PRIMARY            | PRIMARY    | 8       | mysql.tbl.tablespace_id |    1 |   100.00 | NULL        |
|  1 | SIMPLE      | stat  | NULL       | eq_ref | PRIMARY            | PRIMARY    | 388     | const,mysql.tbl.name    |    1 |   100.00 | NULL        |
+----+-------------+-------+------------+--------+--------------------+------------+---------+-------------------------+------+----------+-------------+
6 rows in set, 1 warning (0.73 sec)

最后

以上就是仁爱红牛为你收集整理的【MySQL】 MySQL 8.0 新特性之数据字典1. 数据字典2. 删除了基于文件的元数据存储3. 字典数据的事务存储4. 数据字典对象缓存5. INFORMATION_SCHEMA和数据字典集成的全部内容,希望文章能够帮你解决【MySQL】 MySQL 8.0 新特性之数据字典1. 数据字典2. 删除了基于文件的元数据存储3. 字典数据的事务存储4. 数据字典对象缓存5. INFORMATION_SCHEMA和数据字典集成所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部