MySQL(InnoDB剖析)
文章平均质量分 92
本专栏是对MySQL的InnoDB存储引擎的剖析,内容包含但不限于InnoDB。专栏的内容大部分来自于读书笔记,感谢姜承尧先生的著作《MySQL技术内幕.InnoDB存储引擎》
董哥的黑板报
90后程序员!
展开
-
MySQL(InnoDB剖析):55---性能调优之(操作系统的选择、不同文件系统对数据库性能的影响)
待续原创 2020-02-19 11:07:38 · 829 阅读 · 0 评论 -
MySQL(InnoDB剖析):54---性能调优之(合理地设置RAID)
待续原创 2020-02-19 11:03:27 · 947 阅读 · 0 评论 -
MySQL(InnoDB剖析):53---性能调优之(CPU的选择、内存的重要性、磁盘对数据库性能的影响)
一、CPU的选择用户首先需要清楚当前数据库的应用类型。一般而言,可分为两大类:OLTP(Online Transaction Processing,在线事务处理)和OLAP(Online analytical Processing,在线分析处理)。这是两种截然不同的数据库应用 OLAP多用在数据仓库或数据集市中,一般需要执行复杂的SQL语句来进行查询 OLTP多用在日常的事物处理应用中,......原创 2020-02-19 10:11:43 · 2118 阅读 · 0 评论 -
MySQL(InnoDB剖析):52---备份与恢复之(复制)
待续原创 2020-02-19 10:11:19 · 1747 阅读 · 0 评论 -
MySQL(InnoDB剖析):51---备份与恢复之(快照备份(lvcreate、lvdisplay))
待续原创 2020-02-19 09:56:47 · 1103 阅读 · 0 评论 -
MySQL(InnoDB剖析):50---备份与恢复之(热备份:ibbackup、XtraBackup)
一、ibbackup二、XtraBackup三、XtraBackup实现增量备份待续原创 2020-02-18 19:59:48 · 840 阅读 · 0 评论 -
MySQL(InnoDB剖析):49---备份与恢复之(二进制日志备份(mysqlbinlog)、冷备份)
一、二进制日志文件备份与恢复二进制日志非常关键,用户可以通过它完成point-in-time的恢复工作。MySQL数据库的replication同样需要二进制日志开启二进制日志默认情况下并不启用二进制日志 要使用二进制日志必须首先启用它,在配置文件中进行如下的配置:在前面介绍过,对于InnoDB只简单启用二进制日志是不够的,还需要启用一些其他参数来保证最为安全和正确地记录二进......原创 2020-02-18 17:14:33 · 739 阅读 · 0 评论 -
MySQL(InnoDB剖析):48---备份与恢复之(逻辑备份:mysqldump、select...into outfile、load data infile、mysqlimport)
一、mysqldumpmysqldump工具最初由Ifor Romanenko编写完成,通常用来完成转存数据库的备份及不同数据库之间的移植,如从MySQL低版本数据库升级到MySQL高版本数据库,又或者从MySQL数据库移植到Oracle、SQL Server等该工具使用的注意事项①mysqldump工具是MySQL外命令行使用的,不是在MySQL数据库启动使用的 ②该工具使用时需要......原创 2020-02-18 16:58:24 · 857 阅读 · 0 评论 -
MySQL(InnoDB剖析):47---备份与恢复总体概述
一、根据不同的类型来划分备份根据不同的类型来划分备份的方法,可以分为以下几种: Hot Backup(热备) Cold Backup(冷备) Warm Backup(温备) Hot Backup(热备)是指在数据库运行时进行直接备份,对正在运行的数据库没有任何影响 这种方法在MySQL官方手册中被称为Online Backup(在线备份)Cold Backup(冷备)......原创 2020-02-18 12:49:52 · 594 阅读 · 0 评论 -
MySQL(InnoDB剖析):46---事务之(长事务)
长事务概述长事务,就是执行时间较长的事务 比如,对于银行系统的数据库,每过一个阶段可能需要更新对应账户的利息。如果对应账号的数量非常大,例如对有1亿用户的表account,需要执行下列语句:这时这个事务可能需要非常长的时间来完成。可能需要1个小时,也可能需要4、5个小时,这取决于数据库的硬件配置 DBA和开发人员本身能做的事情非常少。然而,由于事务的ACID的特性,这个操作被封装在一......原创 2020-02-18 12:05:12 · 1047 阅读 · 0 评论 -
MySQL(InnoDB剖析):45---事务之(不好的事务习惯:在循环中提交、使用自动提交、使用自动回滚)
一、在循环中提交开发人员喜欢在循环中进行事务提交,这种方法有两个缺点:出现错误难处理以及效率低演示案例创建一个表create table t1( a int not null, b varchar(80))engine=innodb;下面一个存储过程delimiter //create procedure load1(count int unsig......原创 2020-02-18 11:55:03 · 1383 阅读 · 0 评论 -
MySQL(InnoDB剖析):44---事务之(XA事务(分布式事务))
一、MySQL数据库分布式事务InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现 分布式事务指的是:允许多个独立的事务资源参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源 全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的ACID要求又有了提高。另外,在使用分布式事务时,InnoDB的事务隔离级别必须设置......原创 2020-02-18 10:58:58 · 1822 阅读 · 0 评论 -
MySQL(InnoDB剖析):43---事务之(事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)
ISO和ANIS SQL标准指定了4种事务隔离级别的标准,但是很少有数据库厂商循环这些标准。例如Oracle数据库就不支持READ UNCOMMITTED和REPEATABLE READ SQL标准定义的四个隔离级别为: READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 一、总体概述READ UNCOM......原创 2020-02-17 17:46:50 · 1070 阅读 · 0 评论 -
MySQL(InnoDB剖析):42---事务之(事务控制语句:begin、commit、rollback、savepoint、transaction)
一、事务的自动提交默认情况下,没有使用begin显式开启事务,事务都是自动提交的autocommit变量该变量用于控制SQL语句是否自动提交(auto commit) 默认值为1,表示自动提交 设置为0后,需要自己手动使用commit或rollback来结束事务-- SQL语句自动提交(默认值)set autocommit=1;-- SQL语句不自动提交set auto......原创 2020-02-17 16:48:46 · 2733 阅读 · 0 评论 -
MySQL(InnoDB剖析):41---事务之(事务的实现:purge、group commit)
一、purgedelete和update操作可能并不直接删除原有的数据例如前一篇文章演示案例中:https://blog.csdn.net/qq_41453285/article/details/104346372 对表t执行下面的SQL语句。其中a字段为聚集索引,b字段为辅助索引delete from t where a=1;对于上述的delete操作,通过前面关于undo......原创 2020-02-17 12:49:15 · 739 阅读 · 0 评论 -
MySQL(InnoDB剖析):40---事务之(事务的实现:undo log(回滚日志))
事务隔离性可以使用前面介绍的锁来实现。原子性、一致性、持久性通过数据库的redo log和undo log来完成: redo log:称为重做日志。用来保证事务的原子性和持久性 undo log:用来保证事务的一致性 redo和undo的作用都可以视为一种恢复操作: redo恢复提交事务修改的页操作 undo回滚行记录到某个特定版本 因此两者记录的内容也不同: redo通......原创 2020-02-17 11:12:11 · 2356 阅读 · 0 评论 -
MySQL(InnoDB剖析):39---事务之(事务的实现:redo log(重做日志))
事务隔离性可以使用前面介绍的锁来实现。原子性、一致性、持久性通过数据库的redo log和undo log来完成: redo log:称为重做日志。用来保证事务的原子性和持久性 undo log:用来保证事务的一致性 redo和undo的作用都可以视为一种恢复操作: redo恢复提交事务修改的页操作 undo回滚行记录到某个特定版本 因此两者记录的内容也不同: redo通......原创 2020-02-16 13:31:29 · 1147 阅读 · 0 评论 -
MySQL(InnoDB剖析):38---事务之(事务的分类:扁平事务、带有保存点的扁平事务、链事务、嵌套事务、分布式事务)
从事务理论的角度来说,可以把事务分为以下几种类型: 扁平事务(Flat Transactions) 带有保存点的扁平事务(Flat Transactions with Savepoints) 链事务(Chained Transactions) 嵌套事务(Nested Transactions) 分布式事务(Distributed transactions) 对于InnoDB......原创 2020-02-16 10:36:17 · 1281 阅读 · 0 评论 -
MySQL(InnoDB剖析):37---事务之(事务概述、事务的ACID特性)
一、事务概述事务可由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成 事务是访问并更新数据库中各种数据项的一个程序执行单元 在事务中的操作,要么都做修改,要么都不做,这就是事务的目的,也是事务模型区别与文件系统的重要特征之一二、事务的ACID特性理论上说,事务有着极其严格的定义,它必须同时满足四个特性,通常所说的事务的ACID特性 值得注意的是,虽然理论上定义了严格的......原创 2020-02-16 09:12:43 · 439 阅读 · 0 评论 -
MySQL(InnoDB剖析):36---锁之(阻塞、死锁、锁升级)
待续原创 2020-02-15 16:09:33 · 2828 阅读 · 0 评论 -
MySQL(InnoDB剖析):35---锁之(锁问题:脏读(未提交读)、不可重复读(提交读)、可重复读、丢失更新(可串行化))
待续原创 2020-02-15 12:35:02 · 690 阅读 · 0 评论 -
MySQL(InnoDB剖析):34---锁之(行锁的3种算法(Record Lock、Gap Lock、Next-Key Lock)、解决Phantom Problem)
InnoDB支持3种行锁的算法,分别是: Record Lock:单个行记录上的锁 Gap Lock:间隙锁,锁定一个范围,但不包含记录本身 Next-Key Lock:Gap Lock与Record Lock的结合,锁定一个范围,并且锁定记录本身 一、Record LockRecord Lock总是会去锁住索引记录 如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,......原创 2020-02-14 19:19:40 · 1390 阅读 · 0 评论 -
MySQL(InnoDB剖析):33---锁之(自增长与锁、外键和锁)
待续原创 2020-02-14 16:42:25 · 695 阅读 · 0 评论 -
MySQL(InnoDB剖析):32---锁之(一致性非锁定读、一致性锁定读)
一、一致性非锁定读一致性的非锁定读是指InnoDB存储引擎通过行多版本控制(multi versioning)的方式来读取当前执行时间数据库中行的数据原理图解如果读取的行正在执行delete或update操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB存储引擎会去读取行的一个快照数据(Snapshot Data) 如下图所示图中直观地展现了InnoDB一致性的......原创 2020-02-14 14:11:32 · 503 阅读 · 0 评论 -
MySQL(InnoDB剖析):31---锁之(锁的类型(共享锁、排它锁、意向锁)、查看锁的信息)
一、共享锁、排它锁InnoDB实现了如下两种标准的行级锁: 共享锁(S Lock):允许事务读一行数据 排它锁(X Lock):允许事务删除或更新一行数据 锁之间的兼容性 如果一个事务占用行r的共享锁:那么其他事务都可以立即获取这个共享锁,但是如果有的事务像获取排它锁就需要等待,等待对行r的共享锁全部被释放才可以 如果你一个事务占用行r的排它锁:那么其他事务不论是......原创 2020-02-14 13:37:43 · 645 阅读 · 0 评论 -
MySQL(InnoDB剖析):30---锁之(MySQL锁简介、lock与latch的区分)
一、MySQL锁简介锁时数据库系统区别于文件系统的一个关键特性。锁机制用于管理堆共享资源的并发访问 InnoDB存储引擎会在行级别上对表数据上锁。不过InnoDB也会在数据库内部其他多个地方使用锁,从而允许多多种不同资源提供并发访问 例如,操作缓冲池中的LRU列表,删除、添加、移动LRU列表中的元素,为了保证移植性,必须有锁的介入 对于MyISM,其锁时表锁设计。并发情况下的读没有问题,......原创 2020-02-13 21:28:41 · 793 阅读 · 0 评论 -
MySQL(InnoDB剖析):29---全文检索(倒排索引、全文索引/全文检索)
一、引言演示说明前面介绍过了,B+树索引的特点是可以通过索引字段的前缀进行查找。例如对于下面的查询B+树是支持的select * from blog where content like 'xxx%';但是有时候我们要查询的是博客的内容中含有“xxx”,而不是以“xxx”开头,所以应该是下面的SQL语句select * from blog where content like......原创 2020-02-13 21:27:45 · 5241 阅读 · 1 评论 -
MySQL(InnoDB剖析):28---哈希算法与自适应哈希索引
哈希也可以参阅本文数据结构文章:https://blog.csdn.net/qq_41453285/article/details/103517420一、哈希算法哈希算法是一种常见算法,时间复杂度为O(1),且不只存在于索引中,每个数据库应用中都存在该数据库结构二、哈希表哈希表也称散列表,由直接寻址表改进而来.先看直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。加......原创 2020-02-10 11:02:50 · 879 阅读 · 0 评论 -
MySQL(InnoDB剖析):27---B+树索引的使用(联合索引、覆盖索引、优化器不使用索引的情况、索引提示、MRR优化、ICP优化)
前言在了解了B+树索引的本质和实现后,下一个需要考虑的问题是怎样正确地使用B+树索引,这不是一个简单的问题。这里所总结的可能并不适用于所有的应用场合。我所能做的只是概括一个大概的方向。在实际的生产环境使用中,每个DBA和开发人员,还是需要根据自己的具体生产环境来使用索引,并观察索引使用的情况,判断是否需要添加索引。不要盲从任何人给你的经验意见 根据前面的介绍,用户已经知道数据库中存在两种类型......原创 2020-02-10 10:40:36 · 693 阅读 · 0 评论 -
MySQL(InnoDB剖析):26---B+树索引之Cardinality值
关于Cardinality,还可参阅前面介绍过的SHOW INDEX命令:https://blog.csdn.net/qq_41453285/article/details/104221161一、什么是Cardinality什么时候使用索引比较合适并不是在所有的查询条件中出现的列都需要添加索引。对于什么时候添加B+树索引,一般的经验是:在访问表中很少一部分时使用B+树索引才有意义 例......原创 2020-02-09 09:34:41 · 661 阅读 · 0 评论 -
MySQL(InnoDB剖析):25---B+树索引的管理(索引管理、Fast Index Creation、Online Schema Change、Online DDL)
一、索引管理索引的创建和删除可以通过两种方法: 一种是ALTER TABLE 另一种是CREATE/ DROP INDEX 使用语法例如下面有一个表,创建表时指定了一个主键索引create table t( a int not null, b varchar(8000), primary key(a))engine=innodb;......原创 2020-02-08 18:21:11 · 1046 阅读 · 0 评论 -
MySQL(InnoDB剖析):24---B+树索引(聚集索引与非聚集索引(辅助索引))、B+树索引的分裂
一、B+树索引概述B+树索引的本质就是B+树在数据库中的实现。但是B+索引在数据库中有一个特点就是高扇出性,因此在数据库中,B+树的高度一般都在2~4层,也就是说查找某一键值的行记录最多只需要2~4次IO。因为当前一般的机械磁盘每秒至少可以做100次IO,2~4次IO意味着查询时间只需0.02~0.04秒 B+树索引分类: 聚集索引(clustered index) 辅助索引(seco......原创 2020-02-08 11:58:02 · 711 阅读 · 0 评论 -
MySQL(InnoDB剖析):23---InnoDB索引概述、数据结构与算法概述(二分查找、二叉搜索树、平衡二叉树、B+树)
索引的使用:https://blog.csdn.net/qq_41453285/article/details/90046913一、索引概述索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响。要找到一个平衡点二、InnoDB存储引擎索引概述InnoDB支持以下几种常见的索引: B+树索引 全文索引 哈希索引......原创 2020-02-07 11:43:59 · 745 阅读 · 1 评论 -
MySQL(InnoDB剖析):22---table之(子分区、分区中的NULL值、分区和性能、在表和分区间交换数据)
本篇文章紧接着上一篇文章讲述,前一篇文章参阅:https://blog.csdn.net/qq_41453285/article/details/104155197一、子分区子分区是在分区的基础上再进行分区,有时也称这种分区为复合分区 MySQL数据库允许在RANGE和LIST的分区上再进行HASH或KEY的子分区演示案例创建下面一个表,对b字段的年份进行RANGE分区,然后再根据......原创 2020-02-05 11:44:31 · 612 阅读 · 0 评论 -
MySQL(InnoDB剖析):21---table之(分区表、分区类型(RANGE、LIST、HASH、KEY)、关键字LINEAR/COLUMNS)
分区表并不是在存储引擎层完成的,因此不是只有InnoDB存储引擎支持分区,常见的存储引擎MyISAM、NDB等都支持。但也并不是所有的存储引擎都支持,如CSV、FEDORATED、MERGE等就不支持 MySQL在5.1版本时添加了对分区的支持。分区的过程是将一个表或索引分解为多个更小、更可管理的部分。就访问数据库的应用而言,从逻辑上讲,只有一个表或一个索引,但是在物理上这个表或索引可能由数十个......原创 2020-02-04 20:56:38 · 857 阅读 · 0 评论 -
MySQL(InnoDB剖析):20---table之(视图、物化视图)
一、视图概述在MySQL数据库中,视图(view)是一个命名的虚表,它由一个SQL查询来定义,可以当做表使用。与持久表不同的是,视图中的数据没有实际的物理存储二、视图的作用视图在数据库中发挥着重要的作用。视图的主要用途之一是被用做一个抽象装置,特别是对于一些应用程序,程序本身不需要关心基表的结构,只需要按照视图定义来取数据或更新数据,因此,视图同时在一定程度上起到一个安全层的作用 My......原创 2020-02-03 10:57:45 · 1731 阅读 · 0 评论 -
MySQL(InnoDB剖析):19---table之(约束与数据完整性(唯一/主键/外键/enum/set/触发器约束、约束和索引区别、sql_mode))
约束与完整性可参阅另一篇文章:https://blog.csdn.net/qq_41453285/article/details/87971552一、数据完整性关系型数据库系统和文件的一个不同点:关系数据库本身能保证存储数据的完整性,不需要应用程序的控制,而文件系统一般需要在程序端进行控制。当前几乎所有的关系型数据库都提供了约束(constraint)机制,该机制提供了一条强大而简易的途径来......原创 2020-02-02 18:27:37 · 2127 阅读 · 0 评论 -
MySQL(InnoDB剖析):18---table之(Named File Formats机制)
一、Named File Formats机制概述随着InnoDB存储引擎的发展,新的页数据结构有时用来支持新的功能特性。比如前面提到的InnoDB 1.0.x版本开始提供了新的页数据结构来支持表压缩功能,完全的溢出(Off page)大变长字符类型字段的存储 这些新的页数据结构和之前版本的页并不兼容,因此从InnoDB 1.0.x版本开始,InnoDB通过Named File Formats......原创 2020-02-02 10:59:50 · 753 阅读 · 0 评论 -
MySQL(InnoDB剖析):17---table之(数据页(B-tree Node)结构)
从前面介绍我们已经知道页是InnoDB存储引擎管理数据库的最小磁盘单位 页类型为B-tree Node的页(数据页)存放的即是表中行的实际数据了InnoDB数据页由以下7个部分组成: File Header(文件头) Page Header(页头) Infimun和Supermum Records User Records(用户记录,即行记录) Free Space(空......原创 2020-02-02 10:39:29 · 841 阅读 · 0 评论 -
MySQL(InnoDB剖析):16---table之(行记录格式(Compact、Redundant、Compressed、Dynamic)、行溢出数据、CHAR的行结构存储)
一、InnoDB行记录格式InnoDB存储引擎和大多数数据库一样,记录是以行的形式存储的,意味着页中保存着表中一行行的数据 在InnoDB 1.0.X版本之前,InnoDB提供了Compact和Redundant两种格式来存放行记录数据。Redundant是为了兼容之前版本而保留的 如果阅读了InnoDB的源代码会发现,代码中分别用PHYSICAL RECORD(NEW STYLE)和PH......原创 2020-02-01 15:11:01 · 3844 阅读 · 2 评论