加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL数据库mysql innodb数据库引擎解析

发布时间:2020-12-24 08:18:48 所属栏目:MySql教程 来源:网络整理
导读:副标题#e# 《MYSQL数据库mysql innodb数据库引擎解析》要点: 本文介绍了MYSQL数据库mysql innodb数据库引擎解析,希望对您有用。如果有疑问,可以联系我们。 导读:本节内容:mysql innodb数据库引擎一.mysql体系结构和存储引擎1.1、数据库和实例的区别数

MYSQL实例对于非聚集索引的插入和更新操作,不是每一次都直接插入索引页,而是先判断插入的非聚集索引页是否在缓存中,如果在就直接插入,如果不在就放入到一个插入缓冲区中,好似欺骗数据库这个非聚集索引已经插入到叶子节点了.然后再以一定的频率插入缓存和非聚集索引页字节点的合并操作.

MYSQL实例插入缓存的使用需要满足以下两个条件(也就是非唯一的辅助索引):索引是辅助索引;索引不是唯一的.

MYSQL实例2.4.2、两次写

MYSQL实例两次写给innodb带来的是可靠性,主要用来解决部分写失败(partial page write).在应用重做日之前,我们需要一个页的副本,当写入失效发生时,先通过页的副本来还原该页,再进行重做,这就是doublewrite.

MYSQL实例doublewrite有两部分组成,一部分是内存中的doublewrite buffer,大小为2M,另外一部分就是物理磁盘上的共享表空间中联系的128个页,即两个区,大小同样为2M.当缓冲池的张也刷新时,并不直接写硬盘,而是回通过memcpy函数将脏页先拷贝到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次写,每次写入1M到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘.

MYSQL实例2.4.3、自适应哈西索引

MYSQL实例由于innodb不支持hash索引,但是在某些情况下hash索引的效率很高,于是出现了 adaptive hash index功能,innodb存储引擎会监控对表上索引的查找,如果观察到建立hash索引可以提高性能的时候,则自动建立hash索引.

MYSQL实例2.5、启动、关闭、恢复
innodb_fast_shutdown影响InnoDB表关闭.该参数有0、1、2三个参数.

MYSQL实例0 MySQL关闭时 完成所有的full purge和merge insertbuffer操作

MYSQL实例1默认值 只将缓冲池内的一些脏页刷新至磁盘

MYSQL实例2将日志都写入日志文件不会有任何事务丢失但下次启动时会进行recovery
innodb_force_recovery影响整个innodb存储引擎的恢复状况,该值默认为0,表示当需要恢复时,需要执行所有的恢复操作,当不能进行有效恢复时,如数据页发生了corruption,mysql数据库可能宕机,并把错误写入错误日志中.

MYSQL实例三.文件

MYSQL实例3.1参数文件
Mysql实例可以不需要参数文件,这是所有的参数值取决于编译Mysql时指定的默认值和源代码中指定参数的默认值.其参数文件是Mysql.cnf.

MYSQL实例3.1.1、什么是参数
参数是一个键/值对.可以使用show variables like命令查看,也可以通过information_schema的GLOBAL_VARIABLES视图来查找.

MYSQL实例3.1.2、参数类型
参数文件分为两类:动态参数和静态参数.动态参数意味着你可以在Mysql实例运行中进行更改;静态参数说明在整个实例生命周期内都不得进行更改,好像是只读的.对于动态参数,又可以分为global和session关键字,表明该参数的修改是基于当前会话还是真格实例的生命周期.有些动态参数只能在会话中进行修改,如autocommit;有些参数修改完后,在整个实例生命周期中都会生效,如binlog_cache_size;而有些参数既可以在会话又可以在整个实例的生命周期内生效,如read_buffer_size.

MYSQL实例3.2、日志文件

MYSQL实例3.2.1、错误日志
错误日志对Mysql的启动、运行、关闭过程进行了记录.出现Mysql不能正常启动时,第一个必须查找的文件应该就是错误日志文件.使用show variables like ‘log_error’来定位文件.

MYSQL实例3.2.2、慢查询日志
慢查询能为SQL语句的优化带来很好的帮助.设定一个阀值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中.用参数long_query_time来设置.另一个参数log_queries_not_using_indexes,若运行的SQL语句没有使用索引,则这条SQL语句会被记录下来.

MYSQL实例3.2.3、查询日志
查询日志记录了所有对Mysql请求的信息,不论这些请求是否得到正确的执行.默认文件名为:主机名.log.

MYSQL实例3.2.4、二进制日志
二进制记录了对数据库执行更改的所有操作,但是不包括SELECT和SHOW操作,还包括了执行时间和更改操作时间.可用来恢复某些数据,同时也可以用来复制同步远程数据库.将binlog_format设置成row,可以支持事务隔离级别为READ COMMITTED,以获得更好的并发性.在使用MIXED格式下,mysql采用STATEMENT格式进行二进制日志文件的记录,但是有一些情况下会使用ROW格式,可能的情况:
1、表的存储引擎为NDB,这个时候DML操作都会以ROW格式记录.
2、使用了uuid()、user(),current_user(),found_rows(),row_count(),等不确定函数.
3、使用了insert delay语句
4、使用了用户定于的函数(UDF)
5、使用了临时表(temporary table)

MYSQL实例注意:针对系统库mysql里面的表发生变化的处理规则如下:
1、 如果采用insert,update,delete直接操作表,则日志根据binlog_format设定的格式记录.
2、 如果使用grant,revoke,set password等DCL语句,那么无论如何都会使用SBR模式记录.
3、 blockhole引擎不支持row格式,ndb引擎不支持statement格式.

MYSQL实例3.3、套件字文件
Unix系统下本地连接Mysql可以采用Unix套接字方法,需要一个套接字文件,可以使用show variableslike ‘socket’查询.

MYSQL实例3.4、pid文件和表结构定义文件

MYSQL实例pid文件是实例启动是记录自己进程ID号的文件,表结构定义文件是以frm为后缀名的文件,还可以用来存放视图的定义.

MYSQL实例3.5、innodb引擎文件

MYSQL实例3.5.1、表空间文件
默认表空间文件为ibdata1文件innodb_data_file_path存储数据,innodb_file_per_table可以按表分别产生一个表空间.db文件,但仅存该表的数据索引和插入缓冲等信息,其他信息如undo信息,系统事务信息,double write buffer等还是存放在默认表空间(ibdata1或表空间组)里.

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读