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

MySQL InnoDB checkpoint

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

MySQL InnoDB特性:两次写(DoubleWrite)

MySQL InnoDB特性:两次写(DoubleWrite)

一、经典Partial page write问题? 介绍doublewrite之前我们有必要了解partial page write(部分页失效)问题。 InnoDB中有记录(Row)被更新时,先将其在Buffer Pool中的page更新,并将这次更新记录到Redo Log file中,这时候Buffer Pool中的该page就是被标记为Dirty。在适……

MySQL InnoDB Online DDL

MySQL InnoDB Online DDL

一、概述 MySQL DBA 应该都知道,数据库操作里面,DDL 操作(比如 ALTER 等)代价是非常高的,特别是在单表上千万的情况下,加个索引或改个列类型,就有可能堵塞整个表的读写。一个是有些 DDL 操作本身有锁,一个是 MDL 锁。但 DDL 又是一个不可避免的需求,无论是业务迭代,还是整理表碎片都需要。 我们知道如果要收缩一个表,只是 delete……

MySQL索引最左前缀原理与优化

MySQL索引最左前缀原理与优化

一、示例数据库 为了讨论索引策略,需要一个数据量不算小的数据库作为示例。本文选用MySQL官方文档中提供的示例数据库之一:employees。这个数据库关系复杂度适中,且数据量较大。下图是这个数据库的E-R关系图(引用自MySQL官方手册): MySQL官方文档中关于此数据库的页面为https://dev.mysql.com/doc/employee/en……

MySQL InnoDB索引创建语句

MySQL InnoDB索引创建语句

一、索引算法 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引。 多列索引:即一个索引包含多个列,但是此时列的顺序也十分重要,因……

MySQL InnoDB索引设计策略

MySQL InnoDB索引设计策略

一、索引设计原则 在MySQL中常用的B+树索引分为聚簇索引和辅助索引,关于辅助索引,虽然个数没有限制(聚簇索引一个表只能由一个),但可以想想一下,任何事物都是有两面性的:建立索引,是为了提高查询性能,但这是以降低写入性能为代价的。因为所有索引,在表需要写入数据时,都需要去维护索引数据以保证所有索引都是最新的、最准确的,所以可想而知,索引越多,写入性能越差,……

MySQL InnoDB索引与算法介绍

MySQL InnoDB索引与算法介绍

一、索引介绍 数据库是用来存储数据的工具,存进去,是为了更方便地取出来,而且越快越好,这样对性能的要求就非常高了。在计算机上运行一个任务,一般有三部分涉及性能,分别是内存大小,CPU及磁盘的速度,而索引是一种存储方式,与它相关的最重要部分就是磁盘,所以磁盘性能的高低,直接影响了在数据库中查找数据的效率。另外,磁盘的性能与读写顺序有关,对于普通的机械硬盘,顺序……

MySQL执行计划详解(EXPLAIN)

MySQL执行计划详解(EXPLAIN)

一、准备数据 为了更好地看看剖析执行计划,需要一个数据量不算小的数据库作为示例。 CREATE TABLE s1 ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100), k……

MySQL InnoDB历史与架构

MySQL InnoDB历史与架构

一、InnoDB存储引擎 InnoDB是事务安全的MySQL存储引擎,设计上采用了类似于Oracle数据库的架构。通常来说,InnoDB存储引擎时OLTP应用中核心表的首选存储引擎。同样,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力。目前InnoDB属于MySQL默认存储引擎,并且在MySQL 8.0开始,包括元数据表也都是使用InnoDB……

MySQL InnoDB加锁处理分析(何登成)

MySQL InnoDB加锁处理分析(何登成)

一、背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?……