注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

查看InnoDB表每个索引的高度?

我们知道InnoDB表是索引组织表,分为聚集索引和二级索引,但不管哪种索引,其结构都是B+树结构。由于InnoDB B+树结构高扇区特性,所以每个索引高度基本在3-4层之间,如果数据量比较大,页比较小,如4K,那么高度也是可能破4的。问题来了,以上说法都是我们根据理论知识计算得出的结果,那么在InnoDB中如何查看每个索引的高度呢?InnoDB也没有提供相应……继续阅读 »

彭东稳 2周前 (08-01) 275浏览 0评论 0个赞

堆表(HOT)和索引组织表(IOT)的区别

一、HOT和IOT的起源 堆组织表的存储速度因为不用考虑排序,所以存储速度会比较快。但是要查找符合某个条件的记录,就必须得读取全部的记录以便筛选。而这个时候为了加快查询速度,索引就出现了,索引是针对少量特定字段的值拿出来进行排序存储,并记录在表中的位置,而因为索引是有序的,所以就会很容易通过索引查询到具体的记录位置(普遍使用二分查找法),然后再根据记录位置直……继续阅读 »

彭东稳 2周前 (08-01) 167浏览 0评论 0个赞

有趣的MySQL pager命令

一、分页结果集 在Linux系统中,我们经常也会使用一些分页查看命令,例如less、more等。同样,MySQL客户端也提供了类似的命令,用来帮助我们对查询结果集进行分页。比如,SHOW ENGINE INNODB STATUS时通过分页看锁信息时是非常有用的,这样就不用一屏到底了。 mysql> pager less ……继续阅读 »

彭东稳 1个月前 (07-17) 396浏览 0评论 0个赞

MySQL联接查询算法(NLJ、BNL、BKA、HashJoin)

联接算法是MySQL数据库用于处理联接的物理策略。目前MySQL数据库仅支持Nested-Loops Join算法。而MySQL的分支版本MariaDB除了支持Nested-Loops Join算法外,还支持Classic Hash Join算法。当联接的表上有索引时,Nested-Loops Join是非常高效的算法。根据B+树的特性,其联接的时间复杂度为……继续阅读 »

彭东稳 1个月前 (07-13) 457浏览 0评论 0个赞

MySQL查询优化:Index Merge

一、为什么会有Index Merge 我们的 where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 Index Merge 技术。Index Merge 技术如果简单的说,其实就是对多个索引分别进行条件扫描,然后将它们各自的结果进行合并(Intersect/Union)。 MySQL 5.0之……继续阅读 »

彭东稳 1个月前 (07-13) 334浏览 0评论 1个赞

MySQL 5.7错误日志中常见的几种Note级别日志解释

看到一篇关于Note日志的文章,挺不错的,转载记录一下。其中在第三种错误日志中增加了一些知识点。 在使用MySQL 5.7的时候,发现了不少在MySQL 5.6上不曾见过的日志,级别为Note,作者梳理了一下,最常见的Note日志以下三种,下面我们来逐个解释。 第一种:Aborted connection [Note] Abor……继续阅读 »

彭东稳 1个月前 (07-13) 562浏览 1评论 0个赞

从顺序随机I/O原理来讨论MySQL MRR NLJ BNL BKA

一、机械磁盘原理 机械盘由动臂,盘片,读写磁头,主轴组成,磁头是固定不能动的,要读取相应的扇区只能通过盘片的旋转。每一个盘片为双面,每一个面上分布有同心圆的磁道,磁道又分为扇区一般为512 BYTES,现代的磁盘一般外边缘磁道的扇区多,内磁道的扇区少,那么一般读写外边缘磁道的速度更快,因为转速为定值。同时各个不同盘片上半径下同的磁道组成了一个柱面。 下图是一……继续阅读 »

彭东稳 1个月前 (07-10) 277浏览 0评论 0个赞

使用pt-kill为MySQL保驾护航

运行平稳的数据库,如果遇到CPU狂飙,那很大可能就是慢SQL出现了。DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记录到文件里,以便后面的排查。对于OLTP型业务,主库SELECT类SQL执行不允许超过1s才是合理的;那么对于超过1s的SQL或者对微延迟可以接受查询,理应在从库或者多源库上执行。 那么Percona Tools工……继续阅读 »

彭东稳 1个月前 (07-06) 523浏览 0评论 0个赞

MySQL查询优化:子查询物化

一、背景 MySQL引入了Materialization(物化)这一关键特性用于子查询(比如在IN/NOT IN子查询以及 FROM 子查询)优化。 具体实现方式是:在SQL执行过程中,第一次需要子查询结果时执行子查询并将子查询的结果保存为临时表 ,后续对子查询结果集的访问将直接通过临时表获得。与此同时,优化器还具有延迟物化子查询的能力,先通过其它条件判断子……继续阅读 »

彭东稳 2个月前 (07-02) 96浏览 0评论 0个赞

GH-OST:配置使用实践

一、背景 GitHub正式宣布以开源的方式发布gh-ost:GitHub的MySQL无触发器在线更改表定义工具!下面是官方给出gh-ost产生的背景。 gh-ost是GitHub在2016年5月份开源的,目的是解决一个经常碰到的问题:不断变化的产品需求会不断要求更改MySQL表结构。gh-ost通过一种影响小、可控制、可审计、操作简单的方案来改变线上表结构。……继续阅读 »

彭东稳 2个月前 (06-25) 675浏览 0评论 0个赞

GH-OST:分析输出信息

了解GH-OST输出 GH-OST会尽量让你知道自己在做什么,会输出一些关键详细信息,让你了解整个迁移过程。当然,你可以控制输出级别。 –verbose:常用,有用的输出,而不是一切。 –debug:输出所有一切。 当开始执行GH-OST时,初始输出行可能如下所示: 2016-05-19 17:57:04……继续阅读 »

彭东稳 2个月前 (06-25) 458浏览 0评论 1个赞

GH-OST:原子切换原理

用过GH-OST工具就会知道,其最后也需要有一个cut-over的动作,就是原表跟新表的切换。作者提供了一个原子可靠的切换方式,并且写了三篇文章来阐述cut-over操作过程,其中还对比了Facebook OSC切换算法。 1.Solving the Facebook-OSC non-atomic table swap problem 2.Solving ……继续阅读 »

彭东稳 2个月前 (06-11) 869浏览 0评论 0个赞