| 介绍
MySQL 8.0 将数据库查询元信息都储放于InnoDB储存引擎表中,在以前版本的MySQL中,数据字典不仅储放于指定的储存引擎表中,还储放于元数据库文件、非事务性工作储存引擎表中。文中可能详细介绍MySQL 8.0对数据字典的改善,及其改善产生的益处、危害及其局限。
| 数据字典(1)新版本以前的数据字典
数据字典是数据库查询主要的构成之一,那麼什么叫数据字典?数据字典包括什么具体内容呢?数据字典是对数据库系统中的数据信息、库目标、表对象等的元信息的 ** 。在MySQL中,数据字典信息內容就包含表结构、数据库查询名或表名、字段名的基本数据类型、主视图、数据库索引、表字段信息、存储过程、触发器原理等內容。MySQL INFORMATION_SCHEMA库给予了对数据局数据库、统计分析信息、及其相关MySQL server的浏览信息(例如:数据库查询名或表名,字段名的基本数据类型和访问限制等)。该库中存放的信息还可以称之为MySQL的数据字典。
在MySQL8.0以前,MySQL的数据字典信息,并没所有储放在操作系统数据库查询表中,一部分数据库查询数据字典信息储放于文档中,其他的数据字典信息储放于数据字典库文件(INFORMATION_SCHEMA,mysql,sys)。例如表结构信息储放在.frm文件中,数据库查询表字段信息储放于INFORMATION_SCHEMA下的COLUMNS表中。初期,5.6版本以前,MyISAM是MySQL的默认设置储存引擎,而做为MyISAM储存引擎,它是沒有数据字典的。仅有表结构信息纪录在.frm文件中。MySQL5.6版本以后,将InnoDB储存引擎做为默认设置的储存引擎。在InnoDB存储引擎中,加上了一些数据字典文档用以储放数据字典元信息,例如:.opt文档,纪录了每一个库的一些基本上信息,包含库的字段名等信息,.TRN,.TRG文档用以储放触发器原理的信息內容。
(2)新版本数据字典的改善
全新的MySQL 8.0 公布以后,对数据库查询数据字典层面干了比较大的改善。
最先是,将全部原来储放于数据字典文档中的信息,所有储放到数据库管理表中,将要以前版本的.frm,.opt,.par,.TRN,.TRG,.isl文档都移除开,不会再根据文档的形式储存数据字典信息。次之是对INFORMATION_SCHEM,mysql,sys系统库中的储存引擎干了改善,原来应用MyISAM储存引擎的数据字典表都改成应用InnoDB储存引擎储放。从来不适用事务管理的MyISAM储存引擎变化到适用事务管理的InnoDB储存引擎,为原子DDL的完成,给予了概率。| 新数据字典产生的危害(1)INFORMATION_SCHEMA性能增加
8.0中对数据字典开展优化以后,非常大水平上增强了对INFORMATIONS_SCHEMA的查看特性,根据可以借助查询表迅速的得到要想查找的数据信息,缘故是:
数据库查询在查看INFORMATION_SCHEMA的表时,不会再一定必须建立一张临时表,可以同时查看数据字典表。在以前版本中,数据字典信息不一定是储存于表中,因此在获得数据字典信息情况下,不仅是查询表实际操作。例如载入数据库表构造信息,最底层实际上是载入.frm文件来得到,是一个文档开启载入的实际操作。而在新版本中,数据字典信息都能够根据立即查询表的形式获得,取代这些获得信息慢的方法。对储存引擎的改善以后,在查看INFORMATIONS_SCHEMA表时,假如表上面有数据库索引,优化器会有效的运用数据库索引。针对INFORMATION_SCHEMA下的STATISTICS表和TABLES表中的信息,8.0中根据缓存文件的方法,以提升查找的特性。可以根据设定infor ** tion_sche ** _stats_expiry基本参数缓存文件的到期時间,默认设置是8 ** 00秒。查看这二张表的数据资料的情况下,最先是到缓存文件中实现查看,缓存文件中沒有缓存文件,或是缓存文件到期了,查看会从储存引擎中获得全新的数据信息。假如必须获得全新的数据信息,可以根据设定
infor ** tion_sche ** _stats_expiry主要参数为0或是ANALYZE TABLE实际操作。
(2)原子DDL
MySQL8.0逐渐适用原子DDL实际操作,一个原子DDL操作,实际的使用內容包含:数据字典升级,储存引擎层的实际操作,在binlog中纪录DDL实际操作。而且这种操作方法全是原子性的,表明正中间全过程发生不正确的情况下,是可以详细退回的。这在以前版本的DDL实际操作中是不可以的。以前数据库查询版本中一直沒有适用原子DDL的特点,是有缘由的,由于在初期的数据库查询版本中,数据库元信息储放于元信息文档中、非事务性工作表中及其特殊储存引擎的数据字典中。这种都不能确保DDL实际操作內容在一个事务管理之中,没法确保原子性。
实际的原子DDL,后面会出现专业的文章内容。
(3)innodb_read_only对全部储存引擎起效
在8.0以前版本中,innodb_read_only主要参数可以阻拦对InnoDB储存引擎表的create和drop等升级实际操作。可是在MySQL8.0中,打开innodb_read_only主要参数阻拦了全部储存引擎的这种实际操作。create或是drop表的使用都必须升级数据字典表,8.0中这一数据字典表都改成了InnoDB储存引擎,因此针对数据字典表的升级会不成功,进而造成各储存引擎create和drop表不成功。一样的像ANALYZE TABLE和ALTER TABLE tbl_name ENGINE=engine_name这类实际操作也会不成功,由于这种实际操作都需要去升级数据字典表。
(4)mysqldump mysqlpump导出来的內容危害
MySQL8.0以后,在应用mysqldump和mysqlpump导出数据情况下,与以前拥有一些不一样,主要是以下几个方面:
以前版本的mysqldump和mysqlpump可以导出来mysql系统库中的全部表的內容,8.0以后,只有导出来mysql系统库中沒有数据信息的数据字典表。以前版本当应用 --all-databases 主要参数导出数据的情况下,不用 --routines和 --events选择项还可以导出来触发器原理、存储过程等信息,由于这种信息都储放于proc和event表中,导出来全部表就可以导出来这种信息。可是在8.0中,proc表和event表都不会应用,而且界定触发器原理、存储过程的数据字典表不容易被导出来,因此在8.0中应用mysqldump、mysqlpump导出数据的情况下,假如必须导出来触发器原理、存储过程等內容,一定必须再加上 --routines和 --events选择项。以前版本中 --routines选择项导出来的情况下,备份数据帐户必须有proc表的SELECT管理权限,在8.0中要对全部表的SELECT管理权限以前版本中,导出来触发器原理、存储过程可以与此同时导出来触发器原理、存储过程的建立和更改的时间格式,8.0中不会再适用。(5)新数据字典的局限
MySQL8.0数据字典的改善有很多便捷的特点,例如产生了原子DDL,提高了INFORMATION_SCHEMA的查看特性等,可是它并非极致的,新版本数据字典或是出现一些局限:
根据手动式mkdir的形式在数据信息文件目录下建立库文件目录,这类形式是不可能被数据库查询所鉴别到。DDL实际操作会费用更长的時间,由于先前的DDL实际操作是同时对.frm文件开展变更实际操作,只需写一个文档,现在是必须升级数据字典表,意味着着必须将信息写到储存引擎、read log、undo log中。| 汇总现阶段早已宣布GA的MySQL 8.0是让人很期盼的一个版本,从数据字典层面的改善,到原子DDL,到数据库查询self tuning这些新特点,都让人为因素8.0觉得兴奋。8.0中有很多新特点等候去试着,去发觉。
| 作者介绍沈 刚·沃趣高新科技数据库系统权威专家
了解MySQL数据库运行机制,丰富多彩的数据库查询及 ** 构架故障检测、特性调优、数据备份修复及转移工作经验。
扫码咨询与免费使用
申请免费使用