设为首页 加入收藏

TOP

MySQL 5.7基础之innodb存储引擎总结(一)
2018-11-25 16:13:36 】 浏览:331
Tags:MySQL 5.7 基础 innodb 存储 引擎 总结

一、innodb初探:


1、MySQL日志文件:


①:slow.log 文件会记录慢查询日志,当一条语句执行时间超过在配置参数long_query_time中指定的值时,这条语句就会被记录在这个文件中;


②:error.log 文件会记录一些系统启动或运行时的错误或警告信息,通过配置参数log_error来设置;


③:general.log 文件会记录所有在数据库上执行的语句,经常用来追踪问题,但会影响一点性能,所以一般不会打开,只有在调试的时候会偶尔开启。(如果在QPS很高的情况下,这个文件可能会非常大不太好处理一般不建议打开)


2、MySQL系统的datadir目录下,有一个目录叫MySQL:


 这个目录实际上是MySQL数据库的一些系统表,比如权限、用户等,但这些表都是MyISAM存储引擎的表;


3、默认的3个数据库实例:information_schema  performance_schema  sys


①:information_schema :


  information_schema数据库是MySQL自带的,它是一个信息数据库,其中保存着关于MySQL服务器维护的所有其他数据库的信息,如数据库名、数据库表、表列的数据类型及访问权限等;在该数据库中有数个只读表,它们实际上是视图,而不是基本表;


②:performance_schema:


  performance_schema数据库是在MySQL5.5新增的,命名为performance_schema,该数据库它是针对性能的,主要用于收集数据库服务器性能参数。该数据库有如下功能:


  提供进程等待的详细信息,包括锁、互斥变量、文件信息;


  保存历史事件汇总信息,为判断MySQL服务器性能做出详细的依据


  添加或删除监控事件点都非常不容易,并可以随意改变MySQL服务器的监控周期;


③:sys:


注意:这个库是通过视图的形式把information_schema和performance_schema结合起来的,查询出让人更加容易理解的结果;但是前提是,sys库本身的信息来源要依赖information_schema;


4、innoDB存储引擎包括两个默认的日志文件,


  日志文件大小通过参数innodb_log_file_size来设置,个数通过参数innodb_log_files_in_group来设置。这几个日志文件的大小被设置后在运行过程中是不能被改变的,如果要修改需要关闭数据库然后修改;


--注意:innodb存储引擎还有一个小文件,db.opt 这个文件存储的是MySQL数据库的一些配置信息,例如编码,排序的信息,如果在创建数据库时指定一些非默认的参数的话就会在这个文件中存储这些信息;


二、innodb数据字典:


1、在MySQL中是看不到数据字典的,原因就是MySQL是一个插件式的数据库管理系统,它的结构分两层,分别是server层和存储引擎层,这两层需要相互配合才能一起友好的工作,但是作为一个插件式的数据库管理系统,存储引擎层可以有多个存储引擎的插件,但server层只有一个;最早的默认存储引擎为MyISAM,它是没有数据字典的,关于表结构,它所拥有的只有.frm文件,所以这导致了innodb也必须要有这个文件才能使得server层识别并管理它;


2、innodb有4个最基本的系统表,


 用来存储用户定义的表、列、索引及索引列等信息,这些表分别为:sys_tables  sys_columns  sys_indexes  sys_fields


①:sys_tables表:用来存储所有以innodb为存储引擎的表,每条记录对应已经定义的一个表;


  name:表示一个表名


  ID:表的ID号


  N_COLSL :表示这个表的列的个数,建表指定的列数(4个字节)


  type:表示这个表的存储类型,包括记录的格式、压缩等信息(4个字节)


  space:表示这个表所在的表空间ID号;


  (其中,mix_id  mix_len  cluster_name这三个位置暂时使用不到)


②:sys_columns:用来存储innodb中定义的所有表中所有列的信息,每一列对应这个表中的一条记录;


  table_id :表示这个列所属的表的ID号;


  pos :表示这个列在表中是第几列;


  name :表示这个列的列名


  mtype :表示这个列的主数据类型;


  prtype :表示这个列的一些精确数据类型,它是一个组合值,包括null标志,是否有符号数的标志,是否是二进制字符串的标志及表示这个列是真的varchar;


  len :表示这个列的数据长度,但不包括varchar类型,因为这个类型在记录里面存储了数据长度


  prec :表示这个列数据的精度,但目前好像没有使用;


③:sys_indexes:用来存储innodb中所有表的索引信息,每条记录对应一个索引;


  table_id :表示这个索引所属的表的ID号


  ID :表示这个索引的索引ID号


  name :表示这个索引的索引名;


  n_fields :表示这个索引包含的列个数;


  type :表示这个索引的类型,包括聚簇索引、唯一索引、等


  space :表示这个索引数据所在表空间ID号;


  page_no :表示这个索引对应的B+树的根页面;


④:sys_fields :用来存储所有索引中定义的索引列,每一条记录对应一个索引列


  index_id :这个列所在的索引


  pos :这个列在某个索引中是第几个索引列;


  col_name :这个索引列的列名;


3、字典表加载:


  在innodb启动的时候,如果是新建数据库,则需要初始化库,所以首先需要做的就是创建字典管理的B+树等信息,在这些初始化操作之后,就通过函数dict_boot加载常驻内存的四个系统表并读取一些其他信息;


4、rowid管理:


  在innodb中,用户表中的记录不一定都会有一个rowid列,rowid只有在一个表没有定义主键时,也就是需要rowid作为聚簇索引列的时候才会被分配给这个表。而rowid的管理分配,并不是一个表独享一个ID空间,而是全局的,所有表都共享这个ID号;


三、innodb数据存储结构 


1、表空间文件组成结构


  innodb存储引擎在存储设计上模仿了Oracle的存储结构,其数据是按照表空间进行管理的。新建一个数据库时,innodb存储引擎会初始化一个名为ibdata1 的表空间文件,默认情况下,这个文件会存储所有表的数据,以及我们所熟知但看不到的系统表sys_tables、sys_columns、sys_indexes 、sys_fields等。此外,还会存储用来保证数据完整性的回滚段数据,当然这部分数据在新版本的MySQL中,已经可以通过参数来设置回滚段的存储位置了;


  innodb存储引擎的设计很灵活,可以通过参数innodb_file_pe

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入理解MySQL innodb日志管理 下一篇Oracle move和shrink释放高水位空..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目