MySQL一次数据插入故障记录
某天突然收到报警,数据库大量事务等待,进到数据库后发线大量的插入操作被阻塞,且都是同一个表的。 通过 show engine innodb status 发现插入操作都是在等待索引 idx_create_time(create_time) 的 insert intention lock(跟 gap 锁互斥),由于某些原因数据库是 RR 隔离级别。 ……
使用O_DIRECT/O_DIRECT_NO_FSYNC来提升MySQL性能
fsync()、fdatasync()、sync() 是什么? 首先它们是系统调用。 fsync(int fd) 系统调用把打开的文件描述符 fd 相关的所有缓冲元数据和数据都刷新到磁盘上(non-volatile storage,非易失性存储),等待写磁盘操作结束,然后返回。 fdatasync(int fd) 类似 fsync,但不 flush 元数据……
MySQL诡异的更新操作
这几天线上出现一个诡异的更新问题,看下面这个测试案例,主看看表结构及更新结果。 mysql> select * from t1; +------+----------------------+ | id | c | +------+----------------------……
MySQL复制对于临时表的处理
在跟网友讨论 inception 这个工具的回滚功能设计时,知道了它会根据 binlog 中的 query event 带的 thread id 来定位此次会话所执行的 SQL 语句有哪些,这是一个事务,当然定位回滚数据还需要 binlog position。而在 MySQL 中对于,如果你的 binlog 模式为 statement 格式,那么所有的 ev……
如果你将innodb_open_files设置为高于open_files_limit会发生什么?
MySQL配置变量的设置对数据库系统的性能有重要影响,有时候预测一个变量如何影响其他变量的这个问题可能有点棘手,特别是在处理我将在本文中描述的案例时,结果不是很直观。所以在这里,我们将看看当你将innodb_open_files设置为高于open_files_limit时会发生什么? 我们可以使用以下命令设置MySQL中的最大打开文件数: ……
MySQL InnoDB插入意向锁
INSERT INTENTION LOCK,翻译为插入意向锁,锁类型为 LOCK_INSERT_INTENTION,其实准确来说应该是 INSERT INTENTION GAP LOCK,属于 GAP LOCK 子类。这个锁类型在老版本的 InnoDB 中并不存在,后来是为了优化插入性能而设计的。 INSERT INTENTION LOCK 在官方文档中的说……
MySQL RR隔离级别死锁问题剖析
本案例在RR隔离级别下,模拟数据如下: CREATE TABLE `ty` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), ……
查看InnoDB表每个索引的高度?
我们知道InnoDB表是索引组织表,分为聚集索引和二级索引,但不管哪种索引,其结构都是B+树结构。由于InnoDB B+树结构高扇区特性,所以每个索引高度基本在3-4层之间,如果数据量比较大,页比较小,如4K,那么高度也是可能破4的。问题来了,以上说法都是我们根据理论知识计算得出的结果,那么在InnoDB中如何查看每个索引的高度呢?InnoDB也没有提供相应……
堆表(HOT)和索引组织表(IOT)优缺点
一、堆表和索引组织表 NOTE 堆表也可以称之为 HOT,索引组织表也可以称之为 IOT,下面没有特别说明,两者都是一个意思。 堆(heap)组织表数据行在堆中存储,没有任何特定顺序,向一个全新的没有做过更新和删除的堆中插入一行时候,总是 append 到堆表文件的最后一页当中。因为不用考虑排序,所以插入速度会比较快。 但是要查找符合某个条件的记录,就必须得……
有趣的mysql pager命令
一、分页结果集 在Linux系统中,我们经常也会使用一些分页查看命令,例如less、more等。同样,MySQL客户端也提供了类似的命令,用来帮助我们对查询结果集进行分页。比如,SHOW ENGINE INNODB STATUS时通过分页看锁信息时是非常有用的,这样就不用一屏到底了。 mysql> pager less ……
MySQL查询优化:Index Merge
一、为什么会有Index Merge? Index Merge 访问方法检索具有多个 range 扫描的行并将它们的结果合并为一个。这里的 range 就是 explain 中的 type: range。此访问方法简单来说就是对单个表的多个索引分别进行条件扫描,然后将它们各自的结果进行集合运算(Intersect/Union)。 MySQL 5.0之前,一个……
MySQL 5.7错误日志中常见的几种Note级别日志解释
看到一篇关于Note日志的文章,挺不错的,转载记录一下。其中在第三种错误日志中增加了一些知识点。 在使用MySQL 5.7的时候,发现了不少在MySQL 5.6上不曾见过的日志,级别为Note,作者梳理了一下,最常见的Note日志以下三种,下面我们来逐个解释。 第一种:Aborted connection [Note] Abor……