首页 > 数据库 >探索MySQL 8的事务数据字典:数据库对象信息存储

探索MySQL 8的事务数据字典:数据库对象信息存储

时间:2023-08-14 10:00:09浏览次数:41  
标签:存储 数据库 事务 MySQL 数据 字典


MySQL 8带来了重大的架构变革,用事务数据字典(TDD)这种更高效、更可靠的方法取代了传统的基于MyISAM引擎的系统表。这一升级极大地改进了元数据的管理和存储,从而提高了各种数据库对象的可靠性和可扩展性。本文将通过实际案例探讨MySQL 8事务数据字典的复杂性、优势及其在现实生活中的应用。

InnoDB作为MySQL 8存储引擎的核心,事务数据字典(TDD)在存储表、索引、约束、触发器等数据库对象的关键元数据方面发挥着基础性作用。这一创新架构取代了过时的基于MyISAM的系统表,有效地实现了数据字典信息的事务处理,并符合ACID原则。

事务数据字典 (TDD) 的主要目标是提高MySQL数据库的整体性能、稳定性和可扩展性。它通过大幅减少系统表锁争用和最小化磁盘I/O来实现这一目标,最终提高并发性和可靠性。

在MySQL 5.7中,mysql系统数据库由数据目录中名为"mysql"的子目录表示。不过,在MySQL 8.0中,这种机制被更先进的事务数据字典(TDD)所取代。现在,数据字典表被合并到一个名为"mysql.ibd"的InnoDB表空间中,该表空间位于MySQL数据目录中。mysql.ibd表空间文件必须保留在指定位置并保留其名称,因为任何其他表空间都不能修改或使用它。

字典数据与存储在InnoDB表中的用户数据享受同样的保护,通过提交、回滚和崩溃恢复功能确保数据完整性。这种整合使系统数据的管理更具凝聚力,提高了数据库的整体可靠性和一致性。


事务数据字典的优点
1.原子事务:事务数据字典可确保数据库模式更改作为原子事务执行。这意味着,与创建或更改数据库对象相关的所有修改要么都成功,要么都不成功。因此,即使操作遇到错误或失败,数据库也能保持一致。
2.提高并发性:由于移除了基于MyISAM的系统表,全局锁的争用大大减少。因此,多个事务可以同时访问和修改数据字典的不同部分,从而提高整体性能和可扩展性。
3.崩溃恢复和数据一致性:由于TDD会在事务日志中记录模式更改,因此崩溃恢复变得更加可靠。在崩溃期间,MySQL可以重放记录,以确保数据一致性,而无需依赖MyISAM修复流程。

 

在事务数据字典中存储数据库对象信息
现在通过示例来看看MySQL 8事务数据字典如何存储各种数据库对象的信息:

 

创建新表

create table test (
    id int primary key auto_increment,
    name varchar(24) not null,
    dept varchar(24)
);

TDD记录表的元数据,包括列名、数据类型、约束和索引。这些信息存储在事务存储中,确保了模式更改的原子性。

 

修改表结构

alter table test add column salary decimal(8, 2);

TDD将这种更改作为事务处理。它将有关新列的信息存储在日志缓冲区中,一旦事务提交,数据字典就会相应更新。

 

索引和约束
MySQL 8 TDD会存储表上定义的索引和约束的信息。例如:

create index idx_dept on test (dept);

索引创建作为事务记录在数据字典中,这样就有可能在恢复过程中重建数据库的状态。

 

数据字典视图
MySQL提供了多个数据字典视图,允许用户直接查询元数据信息。一些基本的数据字典视图包括

·information_schema.tables:提供数据库中表的详细信息
·information_schema.columns:包含有关表列的信息
·information_schema.innodb_indexes:提供有关innodb索引的信息
·information_schema.table_constraints:提供有关表约束的信息

 

结论
MySQL 8事务数据字典改变了数据库对象元数据的管理方式。通过引入原子事务和改进并发性,它确保了更好的性能和数据一致性。通过本文中讨论的示例,看到了事务数据字典是如何有效存储数据库对象信息并促进崩溃恢复的。

采用 MySQL 8 并充分利用事务数据字典的优势,无疑将带来更强大、更高效的数据库系统,使其成为任何基于MySQL的应用程序的必要升级。

 

 

标签:存储,数据库,事务,MySQL,数据,字典
From: https://www.cnblogs.com/abclife/p/17619484.html

相关文章

  • 技术分享 | kill掉mysqld_safe进程会影响mysqld进程?
    1、背景公司内部看到一则问题1、kill-9mysqld_safe进程2、systemd检测到mysqld_safe进程不存在后,重新拉起mysqld_safe进程3、mysqld_safe进程启动后,发现mysqld进程也被重启期望:启、停mysqld_safe进程,不会影响mysqld进程2、systemd服务启动2.1、复现问题......
  • 面试官:为什么MySQL不建议使用NULL作为列默认值?(转)
    原文:https://mp.weixin.qq.com/s/4aWKVvGTjG4Hiv2ULxQiAg来源:微信公众号“Java充电社”今天来分享一道美团高频面试题,5分钟搞懂“为什么MySQL不建议使用NULL作为列默认值?”。对于这个问题,通常能听到的答案是 使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你......
  • 再见,Navicat!阿里推出一款数据库新工具,功能真心强大!
    Chat2DB是一款有开源免费的多数据库客户端工具,支持windows、mac本地安装,也支持服务器端部署,web网页访问。和传统的数据库客户端软件Navicat、DBeaver相比Chat2DB集成了AIGC的能力,能够将自然语言转换为SQL,也可以将SQL转换为自然语言,可以给出研发人员SQL的优化建议,极大的提升人......
  • 【原】无脑操作:基于CentOS 7.9搭建国产数据库 南大通用GBase 8a 单机环境
    CentOS7.9 环境的安装不再赘述,不清楚可以参看之前的文章:https://www.cnblogs.com/iflytek/p/14403664.html 1、准备GBase8a的安装包:GBase8a-NoLicense-Free-8.6.2_build43-R7-redhat7.3-x86_64.tar.bz2 2、创建gbase用户、并设置密码(密码规则:长度多于8位的字母+数字)use......
  • 开源数据库Mysql_DBA运维实战 (修改root密码)
    本文以windows为例为大家详细介绍下MySQL修改root密码的4种方法,大家可以可以根据的自己的情况自由选择,希望对大家有所帮助方法1:用SETPASSWORD命令首先登录MySQL。格式:mysql>setpasswordfor用户名@localhost=password('新密码');例子:mysql>setpasswordforroot@localh......
  • nacos 使用 MySQL8.x 出现 Nacos No DataSource set异常解决
    http://www.taodudu.cc/news/show-6345954.html?action=onClick nacos使用MySQL8.x出现NacosNoDataSourceset异常解决注:当前版本nacos2.1.0 1、nacos默认室mysql5.7当链接mysql8.x,会出现异常【NacosNoDataSourceset】解决:在nacos安装目录下新建plugins/mysql文......
  • mysql添加非 root 级别用户
    进入mysql容器内部dockerexec-itCOMMAND/bash输入密码登录MySQL回车输入密码passwordroot@94c490e7da78:/#mysql-pEnterpassword:添加数据库先使用root用户添加数据库:--进入sql服务后首先查看有哪些数据库showdatabases;--若没有新建一个CREATE......
  • mysql数据库中有表,但是抛异常,Table 'test.WORRK_NODE' donesn't exist
    原因:表名是大写的,linux上的msyql默认区分大小写问题,本地的mysql不会出现这个问题解决一:修改sql语句,变成小写库名,表名方法二:把原来表删了,重新建表,建立表时指定字符集utf8_general_ci,该字符集对大小写不敏感 解决三:开启忽略大小写,需要修改/etc/my.cnf配置文件 注意:这个配......
  • MySQL 的开窗函数
    开窗函数(WindowFunction)提供了行集之间的计算能力,在现代的主流关系型数据库中,基本都提供了相似的功能,这些功能在一些业务开发的过程中很有用,本文将简要介绍这些常用的开窗函数ROW_NUMBER()ROW_NUMBER()函数的使用语法如下:ROW_NUMBER()OVER([partition_definition][order_......
  • Found a misplaced row,分区表修复MYSQL
    在MySQL中,分区表的数据被分隔到不同的表空间中,但仍被视为单个表。在处理大量数据集的某些情况下,分区可能是一种有用的方法。在分区表中删除庞大的数据集可以加快速度,但是如果处理不当,它可能会把数据放在表的不对应的位置中。测试环境:mysql8.0.30建表master[localhost:22031]{msa......