http://mysql.taobao.org/monthly/2016/05/01/ 在开始之前,你需要对InnoDB的事务系统有个基本的认识.如果您不了解,可以参考我之前的几篇关于InnoDB的文章,包括InnoDB的事务子系统,事务锁,redo log,undo log,以及崩溃恢复逻辑.在这里我们简单的概述一下几个基本的概念: 事务ID:一个自增的序列号,每次开启一个读写事务(或者事务从只读转换成读写模式)时分配并递增,每更新256次后持久化到Ibdata的事务系统页中.每个读写事务都必…
http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoDB 的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块.如何实现MVCC及ACID.如何进行事务的并发控制.事务系统如何进行管理等相关知识.本文的目的是让读者对事务系统有一个较全面的理解. 由于不同版本对事务系统都有改变,本文的所有分析基于当前GA的最新版本MySQL5.7.9,但…
MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC 版本,函数入口为 innobase_start_or_create_for_mysql,这是一个非常冗长的函数,本文只涉及和崩溃恢复相关的代码. 在阅读本文前,强烈建议翻阅我们之前的两期月报:1. MySQL · 引擎特性 · InnoDB…
http://mysql.taobao.org/monthly/2015/07/05/ MySQL · 引擎特性 · InnoDB index lock前世今生 前言 InnoDB并发过程中使用两类锁进行同步. 1. 事务锁 维护在不同的Isolation level下数据库的Atomicity和Consistency两大基本特性. InnoDB定义了如下的lock mode: /* Basic lock modes */ enum lock_mode { LOCK_IS = 0, /* int…
环境准备 IP HOSTNAME SERVICE SYSTEM 192.168.131.129 mysql-master1 mysql CentOS7.6 192.168.131.130 mysql-slave1 mysql CentOS7.6 192.168.131.131 mysql-slave2 mysql CentOS7.6 [root@localhost ~]# sestatus SELinux status: disabled [root@localhost ~]# systemct…
https://yq.aliyun.com/articles/4270# zhaiwx_yinfeng 2016-02-02 19:00:43 浏览2194 评论0 mysql innodb lock 摘要: InnoDB 事务锁系统简介 前言 本文的目的是对InnoDB的事务锁模块做个简单的介绍,使读者对这块有初步的认识.本文先介绍行级锁和表级锁的相关概念,再介绍其内部的一些实现:最后以两个有趣的案例结束本文. 本文所有的代码和示例都是基于当前最新的MySQL5.7.10版本. 行级锁 Inn…
前言 数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的奔溃恢复机制来保证.本文仔细剖析了InnoDB的奔溃恢复流程,代码基于5.6分支. 基础知识 lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻.此外,每个数据页上也有一个lsn,表示最后被修改时的lsn,值越大表示越晚被修改.比如,数据页A的lsn为100…
前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍InnoDB事务子系统,主要包括,事务的启动,事务的提交,事务的回滚,多版本控制,垃圾清理,回滚段以及相应的参数和监控方法.代码主要基于RDS 5.6,部分特性已经开源到AliSQL.事务系统是InnoDB最核心的中控系统,涉及的代码比较多,主要集中在trx目录,read目录以及row目录中的一部分,包括头文件和IC文件,一共有两万两千多行代码. 基础知识…
前言 数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证.本文仔细剖析了InnoDB的崩溃恢复流程,代码基于5.6分支. 基础知识 lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻.此外,每个数据页上也有一个lsn,表示最后被修改时的lsn,值越大表示越晚被修改.比如,数据页A的lsn为100…
前言 InnoDB做为一款成熟的跨平台数据库引擎,其实现了一套高效易用的IO接口,包括同步异步IO,IO合并等.本文简单介绍一下其内部实现,主要的代码集中在os0file.cc这个文件中.本文的分析默认基于MySQL 5.6,CentOS 6,gcc 4.8,其他版本的信息会另行指出. 基础知识 WAL技术 : 日志先行技术,基本所有的数据库,都使用了这个技术.简单的说,就是需要写数据块的时候,数据库前台线程把对应的日志先写(批量顺序写)到磁盘上,然后就告诉客户端操作成功,至于真正写数据块的操作…
前言 用户对数据库的最基本要求就是能高效的读取和存储数据,但是读写数据都涉及到与低速的设备交互,为了弥补两者之间的速度差异,所有数据库都有缓存池,用来管理相应的数据页,提高数据库的效率,当然也因为引入了这一中间层,数据库对内存的管理变得相对比较复杂.本文主要分析MySQL Buffer Pool的相关技术以及实现原理,源码基于阿里云RDS MySQL 5.6分支,其中部分特性已经开源到AliSQL.Buffer Pool相关的源代码在buf目录下,主要包括LRU List,Flu List,Do…
前言 InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性. 和大多数关系型数据库一样,InnoDB记录了对数据文件的物理更改,并保证总是日志先行,也就是所谓的WAL,即在持久化数据文件前,保证之前的redo日志已经写到磁盘. LSN(log sequence number) 用于记录日志序号,它是一个不断递增的 unsigned long long 类型整数.在 InnoDB 的日志…
前言 之前介绍的月报中,详细介绍了InnoDB Buffer Pool的实现细节,Buffer Pool主要就是用来存储数据页的,是数据页在内存中的动态存储方式,而本文介绍一下数据页在磁盘上的静态存储方式以及相关的操作.由于数据页的结构涉及InnoDB非常底层的代码,因此各个版本的MySQL都可以参考.相关代码主要集中在page目录下. 基础知识 数据库采用数据页的形式组织数据.MySQL默认的非压缩数据页为16KB.在ibd中间中,0-16KB偏移量即为0号数据页,16KB-32KB的为1号数…
前言 现代操作系统以及硬件基本都支持并发程序,而在并发程序设计中,各个进程或者线程需要对公共变量的访问加以制约,此外,不同的进程或者线程需要协同工作以完成特征的任务,这就需要一套完善的同步机制,在Linux内核中有相应的技术实现,包括原子操作,信号量,互斥锁,自旋锁,读写锁等.InnoDB考虑到效率和监控两方面的原因,实现了一套独有的同步机制,提供给其他模块调用.本文的分析默认基于MySQL 5.6,CentOS 6,gcc 4.8,其他版本的信息会另行指出. 基础知识 同步机制对于其他数据库模…
http://mysql.taobao.org/monthly/2016/06/10/ 在5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直接调用该函数进行计算. 使用 实际上records接口函数是在优化阶段调用的,在满足一定条件时,直接去计算行级计数.其explain出来的结果相比老版本也有所不同,这里我们使用sysbench的sbtest表来进行测试,共200万行数据. mysql> show create table sbtes…
前言 相比于普通的用户数据表,MySQL/InnoDB中的临时表,大家应该会陌生很多.再加上不同的临时表创建的时机和创建的位置都不固定,这也进一步加大神秘感.最让人捉摸不透的是,临时表很多时候会先创建文件,然后什么都不做,就把文件删除,留一个句柄读写,给人的感觉是神龙见首不见尾.本文分析了详细MySQL各个版本临时表的处理方式,希望对大家有所帮助. 综述 准确的说,我们常说的临时表分为两种,一种真的是表,用来存储用户发送的数,读写走的是表读写接口,读写的时候表一定在文件系统上存在,另外一种,应该…
InnoDB的数据存储在表空间中,表空间是由InnoDB管理的一个黑盒子,由一系列的数据文件组成.InnoDB可以将每个表的数据和索引存放在单独的文件中. InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别.默认级别是REPEATABLE READ(可重复读),并且通过间隙锁策略防止幻读的出现.间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入 InnoDB表示基于聚簇索引建立的,聚簇索引对主键查询有很高的性能.不过它的二级索引(非主键索…
14 InnoDB存储引擎 14 InnoDB存储引擎 14.1 InnoDB说明 14.1.1 InnoDB作为默认存储引擎 14.1.1.1 存储引擎的趋势 14.1.1.2 InnoDB变成默认存储引擎之后 14.1.1.3 InnoDB表好处 14.1.1.4 InnoDB表最佳实践 14.1.1.5 InnoDB表提升 14.1.1.6 InnoDB作为默认存储引擎测试 14.1.1.7 验证InnoDB是默认存储引擎 14.1.2 检查InnoDB可用 14.1.3 关闭InnoDB…
参考链接: http://mysql.taobao.org/monthly/2016/08/01/ https://www.kancloud.cn/thinkphp/mysql-parallel-applier/45909 5.7新版本复制方面的主要优化内容: 运维 在线启停GTID 在线配置Replication Filter,无需重启 Change Master到另外一个主库无需停止apply线程 Change Master修改一些日志apply属性(例如master_delay)无需停止I…
一.MTS:多线程复制 MTS简介 在MySQL 5.6版本之前,Slave服务器上有两个线程I/O线程和SQL Thread线程.I/O线程负责接收二进制日志(Binary Log,更准确的说是二进制日志的event),SQL线程进行回放二进制日志. 如果在MySQL 5.6版本开启并行复制功能,那么SQL线程就变为了coordinator(协调者)线程: coordinator线程主要负责以前两部分的内容: 若判断可以并行执行,那么选择worker线程执行事务的二进制日志. 若判断不可以并行…
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GTID复制的理解和实际业务场景中部署应用. 一.实验环境 [root@mysql-master ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 为了方便实验,关闭所有节点的防火墙 [root@mysql-master ~…
事物:MYISAM不支持事物,MyISAM类型的表强调的是性能,其执行数度比InnoDB 类型更快.如果不考虑事物,大量的select和insert适合MYISAM表 锁:MYISAM支持表锁    INNODB提供行级锁,提供与 Oracle 类型一致的不加锁读取(non-locking read in),   INNODB行锁也不是绝对的,在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name…
MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子中使用了mysqld_safe命令来启动数据库,当然启动MySQL实例的方法还有很多,在各种平台下的方式可能又会有所不同. >> 当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例.这与Oracle的参数文件(spfile)相似,不同的是,Oracle中如果没有参数文件,在启动实例时会提示找不到该参数文件,数据库启动失败.而在MySQL数…
MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL. 在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用. 如果技术高超,还可以使用MySQL++ API自己做一个引擎.下面介绍几种数据库引擎: ISAM: ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取操作的速…
之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication) 操作. 一.组复制 (MGR)介绍 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.组复制是MySQL5.7版本出现的新特性,它提供了高可用.高扩展.高可靠的MySQL集群服务.MySQL组复制分单主模式和多…
一.Mysql体系结构和存储引擎 1. 概念:              数据库:物理操作系统文件或其他形式文件类型的集合.(是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合.) 数据库实例:由数据库后台进程/线程以及一个共享内存区域组成.(是应用程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库的任何操作都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道.) 数据库是由一个一个文件组成的,如果要对这些文件执行诸如SELECT.INSERT.…
MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIndex). InnoDB是事务型引擎,支持回滚.崩溃恢复能力.多版本并发控制.ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,…
MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIndex). InnoDB是事务型引擎,支持回滚.崩溃恢复能力.多版本并发控制.ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,…
MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIndex). InnoDB是事务型引擎,支持回滚.崩溃恢复能力.多版本并发控制.ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,…
转自 http://www.cnblogs.com/panfeng412/archive/2011/08/16/2140364.html MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键.每张MyISAM表存放在三个文件中:frm 文件存放表格定义:数据文件是MYD (MYData):索引文件是MYI (MYIn…