其他

InnoDB关键特性之double write

# 脏页刷盘的风险 两次写的原理机制   1、解决问题   2、使用场景   3、doublewrite的工作流程   4、崩溃恢复 # doublewrite的副作用   1、监控doublewrite负载   2、关闭doublewrite场景 一、脏页刷盘风险 关于IO的最小单位:   1、数据库IO的最小单位是16K(MySQL默认,oracle是8K)   2、文件系统IO的最小单位是4K(也有1K的)   3、磁盘IO的最小单位是512字节 因此,存在IO写入导致page损坏的风险: 二、doublewrite:两次写   提高innodb的可靠性,用来解决部分写失败(par...

InnoDB关键特性之自适应hash索引

一、索引的资源消耗分析 1、索引三大特点   1、小:只在一个到多个列建立索引   2、有序:可以快速定位终点   3、有棵树:可以定位起点,树高一般小于等于3 2、索引的资源消耗点   1、树的高度,顺序访问索引的数据页,索引就是在列上建立的,数据量非常小,在内存中;   2、数据之间跳着访问     1、索引往表上跳,可能需要访问表的数据页很多;     2、通过索引访问表,主键列和索引的有序度出现严重的不一致时,可能就会产生大量物理读;   资源消耗最厉害:通过索引访问多行,需要从表中取多行数据,如果无序的话,来回跳着找,跳着访问,物理读会很严重。 二、自适应hash索引原理 1、原理过…

InnoDB关键特性之刷新邻接页-异步IO

Flush neighbor page   1、工作原理   2、参数控制 AIO   1、开启异步IO 一、刷新邻接页功能 1、工作原理   当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,故该工作机制在传统机械磁盘下有着显著的优势。   1、在写入次数基本不增加的情况下,增加了写入的量;   2、加速了脏页的回收;   3、充分利用double write每次1M写入的特征;   4、这个功能打开以后会发现iostat里面的w…

MySQL buffer pool中的三种链

三种page、三种list、LRU控制调优 一、innodb buffer pool中的三种页 1、free page:从未用过的页 2、clean page:干净的页,数据页的数据和磁盘一致 3、dirty page:脏页 SQL执行需求:   1、找free页   2、刷新脏页     1、这个页不是热的数据页(刷冷页)     2、这个页最早修改时间(刷修改时间比较早的页,有可能是热页),方便日志文件的覆盖   3、覆盖冷的clean页 为了实现上述需求,innodb用到链表技术(每种链表一种作用,链的存在意义是为了遍历)。 二、innodb buffer pool中的三种链 1、f..…

关于MySQL latch争用深入分析与判断

1、latch锁是什么锁? 2、latch锁是如何保护list? 3、latch争用的现象和过程? 4、latch什么时候会产生严重的争用? 5、如何监控latch争用情况? 6、如何确认latch争用类型? 7、如何降低latch争用? 一、latch锁是什么锁 1、定义   latch锁是内存锁,是一个小型的在内存中保护list的内存锁结构。 2、特点   1、不排队   2、spin,一个线程想获得一个锁,但是该锁已被另一线程持有,进行spin(空转随机时间)占用cpu间接性的等待锁的释放,然后获取去进行相关操作。   3、os waits:sleep,spin多次仍然spin   4、…

MySQL checkpoint深入分析

1、日常关注点的问题 2、日志点分析 3、checkpoint:脏页刷盘的检查点 4、模糊检查点发生条件   1、master thread checkpoint   2、flush_lru_list checkpoint   3、async/sync flush checkpoint   4、dirty page too much checkpoint 一、日常关注的问题 1、我们的日志生成速度?   1、每天生成多少日志、产生多少redo log   2、如果redolog量大,需要修改如下参数,增加logfile的大小...

关于MySQL buffer pool的预读机制

预读机制 两种预读算法   1、线性预读   2、随机预读 对预读的监控 一、预读机制     InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预计很快就会需要这些页面,这些请求在一个范围内引入所有页面。InnoDB以64个page为一个extent,那么InnoDB的预读是以page为单位还是以extent? 数据库请求数据的时候,会将读请求交给文件系统,放入请求队列中;相关进程从请求队列中将读请求取出,根据需求到相关数据区(内存、磁盘)读取数据;取出的数据,放入响应队列中,最后数据库就会从响应队列中将数据取走,完...

MySQL binlog相关分析

1、redolog、binlog的简单分析   图解:redolog和binlog机制 2、开启binlog及关注点 3、关注binlog的相关参数 4、binlog模式分析 5、关于binlog的使用 补充:双一模式 一、区别redolog和binlog 1、如下表格的一个简单对比 redolog binlog 日志作用 保护脏数据 数据库备份恢复使用 引擎支持 只适合InnoDB引擎 所有引擎 日志格式 物理日志 逻辑日志,SQL语句 提交方式 快速提交 提交时一次性写入 保存形式 会被循环覆盖 长期保存 2、redolog记录的是对于每个页的修改   数据页地址、行地址、操作类型(I/D…

UNDO及MVCC、崩溃恢复

UNDO特性:避免脏读、事务回滚、非阻塞读、MVCC、崩溃恢复 事务工作流程(图2) MVCC原理机制 崩溃恢复:redo前滚、undo回滚 长事务、大事务:危害、判断、处理 UNDO优化:实现undo分离、收缩undo表空间 0、undo物理存储研究   1>ibdata第五个数据块(系统事务表)中存储着128个undo段的段头块的地址   2>每一个undo段头块有1024行,两行记录一个事务,一共可以记录512个事务   3>一个数据行中存放XID、rollpointr   4>一个数据行被修改     1.新的事务ID     2.新的rollpointr   …

数据库逻辑结构单元

0:数据库逻辑结构包括表空间,段,区,数据块   1、数据库在逻辑上是由多个表间组成的,表空间中存储的对象是段;   2、段,由区组成,比如数据段,索引段,和undo段;   3、区,是磁盘分配的最小单位,是物理上连续的块,一个extent的大小是1M,由64个页组成;   4、块(页),在MySQL中块就是页,是数据库中最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位,一个page的大小是16K(默认,一般也不会更改),innodb_page_size,其值应设置为操作系统块大小的整数倍。 1、表空间(tablespace)   表空间是数据库最大的逻辑结构,一个数据库…