当前位置:首页 >时尚 >快速读懂InnoDB存储引擎 快速二进制形式)之上

快速读懂InnoDB存储引擎 快速二进制形式)之上

2024-06-29 06:35:26 [百科] 来源:避面尹邢网

快速读懂InnoDB存储引擎

作者:启迪云Tuscloud 存储 存储软件 存储引擎位于文件系统(各种数据,快速二进制形式)之上,读懂各种管理工具(连接池、存储语义分析器、引擎优化器、快速缓存区、读懂SQL接口)之下。存储

[[267174]]

 什么是引擎存储引擎

快速读懂InnoDB存储引擎 快速二进制形式)之上

存储引擎位于文件系统(各种数据,二进制形式)之上,快速各种管理工具(连接池、读懂语义分析器、存储优化器、引擎缓存区、快速SQL接口)之下。读懂

快速读懂InnoDB存储引擎 快速二进制形式)之上

 

快速读懂InnoDB存储引擎 快速二进制形式)之上

快速读懂innodb存储引擎

 

存储引擎功能设计

功能丰富性(或者SQL语义支持):

事务(和文件系统的存储最大区别),锁的粒度(行或者表),全文索引,簇索引,外键(这是什么)

事务:

事务的隔离性由锁实现,其他ACD由redo log和undo logo实现。redo log保证事务原子性(怎么理解?由于数据库设计是先写redo,再执行真正修改数据页。所以redo一定是个完整的事务,才会修改数据页)和持久性(怎么理解?持久化到硬盘)。undo log保证事务一致性(数据冲突时的恢复)。

redo 写法是数据库一直顺序写,无需读。由于没有使用O_DIRECT裸写盘,所以每次写redo 必须fsync到硬盘。

另外这里还有提到的是binlog,区分的是binlog是数据库容灾的范筹(记录的是sql语句,在事务提交的时候才会写)。而redo是innodb产生的(修改页的物理二进制日志,随事务进行而并发写)。而且在写redo是以日志块大小和磁盘扇区一样。都是512字节。所以重写日志写入具有原子性。redo的物理二进制日志,以不记录sql语句执行过程,而记录sql执行后的页结果。由此具有幂等性(执行多次等同于执行一次,分布式网络的不可靠 由于多次重新调用接口,必须保证幂等性)。

一个问题是,基于硬盘的数据库会把数据写在内存中,同时对数据库的修改最初也是改在内存上,怎么落地呢(checkpoint检查点机制)。事务数据库为了保证ACID的D一般会使用先写redo log,在修改页。

undo帮助事务回滚和MVCC功能。

表锁、行锁:

锁机制分为latch(轻量级的锁,分为mutex和rwlock。这个是内部锁机制,保证并发线程操作临界资源的正确性,通常没有死锁检测机制, 比如查看mutex的方法是show engine innodb mutex;)和lock(粒度为事务,可以是表、页、行,有死锁检测机制)。

死锁检测机制有:顺序获取多个锁(latch只有这个机制),waits-for graph(图死锁检测),过期机制。

MVCC机制(解决锁带来争用的分布式并发访问问题)

自增长锁:给每个插入赋予一个唯一增加的id,每个插入获取到这个id,就可以释放表锁。通过减少锁的持有时间,提高并发插入效率。

查看当前事务隔离级别:

  1. mysql> SELECT @@tx_isolationG; 
  2. (责任编辑:知识)

    推荐文章
    热点阅读