• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

标签:MySQL InnoDB存储引擎

使用O_DIRECT/O_DIRECT_NO_FSYNC来提升MySQL性能

fsync()、fdatasync()、sync() 是什么? 首先它们是系统调用。 fsync(int fd) 系统调用把打开的文件描述符 fd 相关的所有缓冲元数据和数据都刷新到磁盘上(non-volatile storage,非易失性存储),等待写磁盘操作结束,然后返回。 fdatasync(int fd) 类似 fsync,但不 flush 元数据……

使用innodb_ruby分析InnoDB内部结构

一、innodb_ruby 介绍 如果你想了解 MySQL InnoDB 内部结构,不好意思,官方在 5.7 版本之前并没有什么好的工具。所以你只能自己写一个工具去分析表空间文件或使用别人开源的工具,比如innodb_ruby。在 MySQL 5.7 版本,官方加强了innochecksum工具,使之也可以简单分析表空间,比如查看页类型统计信息等。但跟 Je……

MySQL InnoDB离线校验工具innochecksum使用

innochecksum工具可以打印InnoDB文件的校验值,该工具读取InnoDB表空间文件,计算每个页面的校验值,将计算的校验值与存储的校验值进行比较,并报告指示损坏页面的不匹配。它最初是为了加速验证断电后表空间文件的完整性而开发的,也可以在文件复制后使用。由于校验值不匹配导致InnoDB故意关闭正在运行的服务器,因此最好使用此工具而不是等待生产服务器遇……

MySQL InnoDB崩溃恢复流程

InnoDB如果发生意外宕机了,数据会丢么?对于这个问题,稍微了解一点MySQL知识的人,都会斩钉截铁的回答:不会!为什么?他们也会毫不犹豫的说:因为有重做日志(redo log),数据可以通过redo log进行恢复。回答得很好,那么InnoDB怎样通过redo log进行数据的恢复的,具体的流程是怎样的?估计能说清楚这个问题的人剩的不多了,更深入一点:除……

MySQL InnoDB MVCC实现原理

数据多版本(MVCC)是MySQL实现高性能的一个主要的方式,InnoDB为了实现多版本的一致读,采用的是基于回滚段的协议。通过对普通的SELECT不加锁,直接利用MVCC读取指版本的值,避免了对数据重复加锁的过程,今天我们就用最简单的方式,来分析下MVCC具体的原理,先解释几个概念: 一、行结构 InnoDB表数据的组织方式为主键聚簇索引。由于采用索引组织……

MySQL InnoDB缓冲池监控指标介绍

InnoDB可以使用SHOW ENGINE INNODB STATUS的标准监视器输出提供与InnoDB缓冲池操作相关的指标,InnoDB缓冲池指标位于标准监视器输出的BUFFER POOL AND MEMORY部分,显示内容类似如下: ---------------------- BUFFER POOL AND MEMORY……

MySQL InnoDB Buffer Pool

一、InnoDB缓冲池 1. 表空间编号 InnoDB存储引擎是使用表空间来存储页的,表空间又可以被分为系统表空间和独立表空间。为了方便管理,每个表空间都会有一个4字节的编号,值得注意的一点是,系统表空间的编号始终为0,InnoDB也会根据一定规则给其他独立表空间也编上号。 所以,当我们查看或修改某个页的数据的时候,实际上需要同时知道表空间的编号和该页的编号……

MySQL InnoDB缓冲池预读

InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预计很快就会需要这些页面,这些请求在一个范围内引入所有页面。InnoDB以64个page为一个extent,那么InnoDB的预读是以page为单位还是以extent? 这样就进入了下面的话题,InnoDB使用两种预读算法来提高I/O性能:线……

MySQL InnoDB Monitor

 一、InnoDB Monitor 在MySQL处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数、锁类型等。于是,需要能查看到更详细的事务锁占用情况。 MySQL提供一套InnoDB监控机制,用于周期性(每15钞)输出InnoDB运行相关状态(In……

MySQL InnoDB表压缩

一、InnoDB表压缩概述 InnoDB表压缩可以在创建表时开启,也可以使用ALTER关键字更改。压缩表能够使表中的数据以压缩格式存储,压缩能够显著提高原生性能和可伸缩性。压缩意味着在硬盘和内存之间传输的数据更小且占用相对少的内存及硬盘,对于辅助索引,这种压缩带来更加明显的好处,因为索引数据也被压缩了。这主要得益于InnoDB表压缩是针对页面压缩(不是行压缩……

MySQL InnoDB表空间传输的用途

在 MySQL 中如果要迁移一个表导另外一个服务器/环境中,常规的做法就是使用备份工具备份,比如 mysqldump/mysqlpump/mydumper,然后拷贝备份到目标服务器或者环境导入。如果某一个表数据量很大,导出 dump 文件很大的情况下,使用导出导入工具其实会花费不少的时间。 怎么样提高效率呢,可以有一种想法就是直接拷贝数据文件到目标环境,当然……

MySQL InnoDB checkpoint

一、Checkpoint简介 我们知道缓冲池的设计目的为了协调CPU速度与磁盘速度的鸿沟。因此页的操作首先都是在缓冲池中完成的,如果一条DML语句,如Update或Delete改变了页中记录,那么此时页是脏的,即缓冲池中的页的版本要比磁盘的新。数据库需要将新版本的页从缓冲池刷新到磁盘。 若每次一个页发生变化,就将新页的版本刷新到磁盘,那么这个开销是非常大的。……