欢迎投稿

今日深度:

MySQL内核InnoDB存储引擎(卷1)笔记,mysqlinnodb

MySQL内核InnoDB存储引擎(卷1)笔记,mysqlinnodb


MySQL内核InnoDB存储引擎(卷1)

目录

  • 1 概览
  • 2 基本数据结构和算法
  • 3 同步机制
  • 4 重做日志
  • 5 mini-transaction(mtr)
  • 6 存储管理
  • 7 记录
  • 8 索引页
  • 9
  • 10 B+树索引
  • 11 Insert Buffer
  • 12 缓冲池
  • 13 事务处理
  • 14 数据字典
  • 15 服务管理

概览

基本数据结构和算法

同步机制

  • p38 若sync_primary_wait_array中1000个cell都已分配,则ut_error触发crash
  • 重做日志

  • LSN(表示事务写入redo log的字节量?)
  • 检查点:将缓冲池中的页刷新到磁盘
  • redo日志的大小是固定的(3GB)->归档日志
  • ib_logfile<N>
  • redo日志块(512B-12-8)
  • 重做日志组*
  • 组提交:fsync -> log_flush_up_to 会对最后一个日志块进行复制
  • 恢复:recovery_from_checkpoint_start
  • mini-transaction(mtr)

  • Force-Log-at-Commit
  • mtr_t mtr; mtr_start(&mtr); ... mtr_commit(&mtr);
  • 更新多行记录时,MLOG_MULTI_REC_END
  • 存储管理

  • 段(segment)
  • 表空间
  • 数据结构:fil_system/space/node_struct
  • 4个异步I/O线程:异步读、异步写、插入缓存、重做日志
  • 记录

  • p103 VARCHAR类型的NULL不占用磁盘空间,而CHAR NULL用0x00填充
  • 大记录:BLOB/TEXT(溢出页,extern属性)
  • 逻辑记录
  • 行记录版本(MVCC只是列?):通过隐藏的事务ID列
  • p114 函数read_view_sees_trx_id用来判断当前事务是否可以读记录的当前版本,不是,则row_sel_build_prev_vers_for_mysql
  • 索引页

  • Page Directory(定位记录在页内的位置)
  • Page Cursor*
  • lock_rec_struct = { space, page_no, n_bits }
  • p144 LOCK_GAP(代表范围锁不包含端点)
  • 显式锁和隐式锁**(略)
  • 行锁的维护*(重点,略)
  • 自增锁(atomic?)
  • 死锁*
  • B+树索引

  • DML操作
  • 主键更新
  • 持久游标 btr_pcur_struct
  • 自适应哈希索引*
  • Insert Buffer

    缓冲池

  • 线性预读*
  • 逻辑预读
  • 页的刷新
  • 事务处理

  • undo日志实现:回滚段 + undo段
  • undo记录
  • purge*
  • rollback
  • commit
  • 数据字典

    服务管理


    MySQL存储引擎没有InnoDB

    使用
    mysql> show engines;
    指令 看看有没InnoDB
    如果没有 介意重装
     

    Mysql数据库3种存储引擎有什不同?

    这个是考虑性能的问题,还有事务的支持,吧 百度一下你就知道

    MyISAM、InnoDB、Heap(Memory)、NDB

    貌似一般都是使用 InnoDB的,

    mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
    最常使用的2种存储引擎:
    1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
    2.InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

    不知道是不是对你有帮助
     

    www.htsjk.Com true http://www.htsjk.com/shujukunews/4386.html NewsArticle MySQL内核InnoDB存储引擎(卷1)笔记,mysqlinnodb MySQL内核InnoDB存储引擎(卷1) 目录 1 概览 2 基本数据结构和算法 3 同步机制 4 重做日志 5 mini-transaction(mtr) 6 存储管理 7 记录 8 索引页...
    评论暂时关闭