加入收藏 | 设为首页 | 会员中心 | 我要投稿 新余站长网 (https://www.0790zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

教会你使用Java内部类、成员内部类、静态内部类和方法内部类

发布时间:2021-02-02 15:25:30 所属栏目:传媒 来源:互联网
导读:. 两次写 当数据库写物理页时,如果宕机了,那么可能会导致物理页的一致性被破坏。 可能有人会说,重做日志不是可以恢复物理页吗?实际上是的,但是要求是在物理页一致的情况下。也就是说,如果物理页完全是未写之前的状态,则可以用重做日志恢复。如果物理页

. 两次写

当数据库写物理页时,如果宕机了,那么可能会导致物理页的一致性被破坏。

可能有人会说,重做日志不是可以恢复物理页吗?实际上是的,但是要求是在物理页一致的情况下。也就是说,如果物理页完全是未写之前的状态,则可以用重做日志恢复。如果物理页已经完全写完了, 那么也可以用重做日志恢复。但是如果物理页前面2K写了新的数据,但是后面2K还是旧的数据,则种 情况下就无法使用重做日志恢复了。

这里的两次写就是保证了物理页的一致性,使得即使宕机,也可以用重做日志恢复。在写物理页时,并不是直接写到真正的物理页上去,而是先写到一个临时页上去,临时页写完后,再写 物理页。这样一来:

  • A. 如果写临时页时宕机了,物理页还是完全未写之前的状态,可以用重做日志恢复
  • B. 如果写物理页时宕机了,则可以使用临时页来恢复物理页

每次写物理页时,先写到double write buffer中,然后从double write buffer写到double write上去。最后再从double write buffer写到物理页上去。
 

write pos表示日志当前记录的位置,当ib_logfile_1写满后,会从ib_logfile_0从头开始记 录;check point表示将日志记录的修改写进磁盘,完成数据落盘,数据落盘后checkpoint会将日 志上的相关记录擦除掉,即write position ->checkpoint 之间的部分是redo log空着的部 分,用于记录新的记录,checkpoint->write position 之间是redo log待落盘的数据修改记 录。当write postion追上checkpoint时,得先停下记录,先推动checkpoint向前移动,空出位 置记录新的日志。

3. 分类

A. Sharp Checkpoint

Sharp Checkpoint 发生在数据库关闭时,将所有的脏页都刷新回磁盘,这是默认的工作方式,参 数:innodb_fast_shutdown=1。

B. Fuzzy Checkpoint

在InnoDB存储引擎运行时,使用Fuzzy Checkpoint进行页刷新,只刷新一部分脏页。

2.4 InnoDB关键特性

1. 插入缓存

主键是行唯一的标识符,在应用程序中行记录的插入顺序一般是按照主键递增的顺序进行插入的。因 此,插入聚集索引一般是顺序的,不需要磁盘的随机读取。因此,在这样的情况下,插入操作一般很快 就能完成。

但是,不可能每张表上只有一个聚集索引,在更多的情况下,一张表上有多个非聚集的辅助索引 (secondary index)。比如,我们还需要按照name这个字段进行查找,并且name这个字段不是唯 一的, 这样的情况下产生了一个非聚集的并且不是唯一的索引。在进行插入操作时,数据页的存放还是 按主键id的执行顺序存放,但是对于非聚集索引,叶子节点的插入不再是顺序的了。这时就需要离散地 访问非聚集索引页,插入性能在这里变低了。然而这并不是这个name字段上索引的错误,因为B+树的 特性决定了非聚集索引插入的离散性。

InnoDB存储引擎开创性地设计了插入缓冲,对于非聚集索引的插入或更新操作,不是每一次直接插入 索引页中,而是先判断插入的非聚集索引页是否在缓冲池中。如果在,则直接插入;如果不在,则先放 入一个插入缓冲区中,好似欺骗数据库这个非聚集的索引已经插到叶子节点了,然后再以一定的频率执 行插入缓冲和非聚集索引叶子节点的合并操作,这时通常能将多个插入合并到一个操作中(因为在一个 索引页中),这就大大提高了对非聚集索引执行插入和修改操作的性能。

(编辑:新余站长网)

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

    热点阅读