innodb 订阅
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。 展开全文
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。
信息
开发公司
Innobase Oy公司
授    权
GPL授权,专有软件授权
类    型
mysql数据库引擎
中文名
innodb
特    色
支持了ACID兼容的事务
外文名
innodb
innodb简介
事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。InnoDB 给 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行级锁(locking on row level),提供与 Oracle 类似的不加锁读取(non-locking read in SELECTs)。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的行级锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。在技术上,InnoDB 是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项 innodb_file_per_table。在 MySQL 的源代码中,从 3.23.34a 开始包含 InnoDB 表引擎,并在 MySQL -Max 的二进制版本中激活。
收起全文
精华内容
下载资源
问答
  • InnoDB

    千次阅读 2019-07-15 09:33:09
    innodb InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。 ​ 1.Innodb是事务性数据库的首选引擎,支持ACID事物...

    innodb

    InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。

    ​ 1.Innodb是事务性数据库的首选引擎,支持ACID事物,支持行级锁定,高性能处理大量数据。

    ​ 2.Innodb给mysql提供了具有 ’事务、回滚和崩溃修复能力、多版本并发控制的事务安全型表。

    在这里插入图片描述

    我们可以吧Innodb的食物写入过程看成写作一篇文章的过程。Innodb的写入过程其实和我们写作的过程是非常类似的。

    试想,领导让我们写一篇文章,发表在论坛上。然后我们想到了一个绝佳的电子,并决定要放到文章里,可是手上还有其他事情,一时半会儿写不完,又担心过后忘了,领导还等着我们回复,此时我们会怎么做吶?我们一定会先大概狗四个提纲,并把提纲和一些关键细节记录到本子上,作为草稿,然后立即告诉领导自己要写什么东西,让其确认。最后等晚上有时间了,再根据草稿去斟词酌句,编写正稿。

    在这个过程中,我们用到的几个关键的东西:

    ​ 我们的大脑,用来临时暂时记住我们的电子

    ​ 草稿,我们需要草稿来保证不会把电子和关键的细节给忘了

    ​ 正稿,这是我们最终要输出的东西

    ​ 有了这几个东西,我们不仅能确保我们不会错过一片漂亮的文章,环能快速告诉领导自己一定可以搞定这件事情。

    ​ Innodb实际上也用到了这个关键的东西:

    Buffer Pool:就是我们的大脑

    事物日志:就是我们的草稿

    Datafile:就是我们的正稿

    ​ 只要按照之前写文章的过程,来进行整个事务的写入操作,不仅能保证不丢失数据,而且能够快速响应。

    ​ 一次写入操作试一次事务,Innodb首先八十五数据写入到Buffer Pool和事务日志中,也就是在大脑中记忆下来,并写下草稿。然后就可以提交事务,响应客户端了。之后innodb在“有时间的时候”,异步地 把这个写入的数据从Buffer Pool,或者事务日志中正式地写入到Datafile中,形成“正稿”。

    其中,innodb为了保证事务日志这个“草稿”一定能无损地还原成正稿,还不能占用太多空间,事务日志还需要有一下特点:

    ​ 事务日志中一定保存了要写入的所有数据内容

    ​ 事务日志只会把新事物追加在日志最后,而不会在修改之前的内容

    ​ 一旦事物数据被写到datafile,事务日志中的“草稿”就可以删除了

    ​ 通过上面3个特点我们可以看出,在形成“正稿”之前,“草稿”是不会被删除的;同时,“草稿”的空间是可以被循环利用的,最后,只要“草稿”在,我们一定能写出“正稿”。

    ​ 这里我还需要证明的,是Recovery流程,也就是如果在形成“正稿”之前,数据库Crash了,我们需要重启整个过程,服务器,甚至只能把数据复制到另外一台服务器来进行恢复。这个时候,事物日志这个“草稿”就发挥了它最大的作用——数据恢复。这也和我们在工作生活中常出现的问题——把事情晚了——非常类似。

    ​ Budder Pool本质就是存储于内存中的一个数据结构,内存和人的大脑一样,是“健忘”的。数据库Crash时,Buffer Pool中的数据极大可能“灰飞烟灭”了。因此,事务日志就如我们贴心的“记事本”,它把我们的记忆,保存为“草稿”,当我们忘了的时候,就可以翻开,把记忆重新回想起来。

    Innodb支持事务和行级锁,是innodb的最大特色。

    事务的ACID属性:atomicity,consistent,isolation,durable。

    并发事务带来的几个问题:更新丢失,脏读,不可重复读,幻读。

    事务隔离级别:未提交读(Read uncommitted),已提交读(Read committed),可重复读(Repeatable read),可序列化(Serializable)

    四种隔离级别的比较

    读数据一致性及并发副作用 隔离级别 读数据一致性 脏读 不可重复读 幻读
    为提交读(read uncommitted) 最低级别,不读物理上顺坏的数据
    已提交读(read committed) 语句级
    可重复读(Repeatable red) 事务级
    可序列化(Serializable) 最高级别,事务级

    lizable) | 最高级别,事务级 | 否 | 否 | 否 |

    展开全文
  • MyISAM与InnoDB 的区别(9个不同点)

    万次阅读 多人点赞 2018-09-23 09:49:21
    1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 2. InnoDB支持外键,而MyISAM不支持。对一...

    区别:

    1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 

    2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败; 

    3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

           MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

           也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

     

    4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);

    那么为什么InnoDB没有了这个变量呢?

        因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是将总行数储存起来方便快速查询。InnoDB会尝试遍历一个尽可能小的索引除非优化器提示使用别的索引。如果二级索引不存在,InnoDB还会尝试去遍历其他聚簇索引。
        如果索引并没有完全处于InnoDB维护的缓冲区(Buffer Pool)中,count操作会比较费时。可以建立一个记录总行数的表并让你的程序在INSERT/DELETE时更新对应的数据。和上面提到的问题一样,如果此时存在多个事务的话这种方案也不太好用。如果得到大致的行数值已经足够满足需求可以尝试SHOW TABLE STATUS
     

    5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

    6. MyISAM表格可以被压缩后进行查询操作

    7. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁

           InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。

    例如:
    
        t_user(uid, uname, age, sex) innodb;
    
        uid PK
        无其他索引
        update t_user set age=10 where uid=1;             命中索引,行锁。
    
        update t_user set age=10 where uid != 1;           未命中索引,表锁。
    
        update t_user set age=10 where name='chackca';    无索引,表锁。

     

    8、InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有

    9、Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI

            Innodb:frm是表定义文件,ibd是数据文件

            Myisam:frm是表定义文件,myd是数据文件,myi是索引文件

     

    如何选择:

        1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;

        2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。

        3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;

        4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。

     

    InnoDB为什么推荐使用自增ID作为主键?

        答:自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。

     

    innodb引擎的4大特性

           插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)

     

    展开全文
  • innoDB

    2008-10-28 21:50:00
    InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recoverycapabilities)、多版本并发控制(multi-versioned concurrencycontrol)的事务安全(transaction-safe (ACID compliant))型表。...
    InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery
    capabilities)、多版本并发控制(multi-versioned concurrency
    control)的事务安全(transaction-safe (ACID compliant))型表。InnoDB
    提供了行级锁(locking on row level),提供与 Oracle 类似的不加锁读取(non-locking read in
    SELECTs)。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在
    InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN
    KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。这些特性均提高了
    多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的行级锁定(row
    level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY
    constraints)的表引擎。
      InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
      InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数 据和索引而维持它自己的缓冲池。 InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在 分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
      InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。
      InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点 Slashdot.org运行在 InnoDB上。Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的负荷。
      在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
    570f8c585449b8c59c8204f8.jpg

    MySQL

    InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项 innodb_file_per_table。
      在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手册的最新版本总是被放置在那里,并且在那里可以得到 InnoDB 的商业许可(order commercial licenses)以及支持。
      InnoDB 现在(2001年十月)在一些大的需高性能的数据库站点上被使用。著名的 Internet 新闻站点 Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存储了超过 1 TB 的数据,而且另外的一个站点在 InnoDB 表上处理着平均每秒 800 次的插入/更新的负载。事实上,也有很多中小电子商务网站采用InnoDB作为他们的事务安全数据库引擎,InnoDB已经成为MySQL最重要的存储引 擎之一。然而,随着InnoBase被MySQL的竞争对手ORACLE收购后,MySQL就已开始着手开发自己的类InnoDB引擎了,就是 Falcon。不幸的消息再次传来,Falcon项目的创始人已经离开MySQL,自立门户了。
      在 MySQL 的源代码中,从 3.23.34a 开始包含 InnoDB 表引擎,并在 MySQL -Max 的二进制版本中激活。
    展开全文
  • InnoDB事务

    万次阅读 2019-08-05 21:10:40
    事务是数据库区别于文件系统的重要特性之一,InnoDB存储引擎中的事务符合ACID的特性,即 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 本文参考了姜承尧先生的《MySQL...

    1.前言

    事务是数据库区别于文件系统的重要特性之一,InnoDB存储引擎中的事务符合ACID的特性,即

    • 原子性(atomicity)
    • 一致性(consistency)
    • 隔离性(isolation)
    • 持久性(durability)

    本文参考了姜承尧先生的《MySQL技术内幕InnoDB存储引擎》一书

    2.事务四大特性

    A(Atomicity)原子性:指整个数据库事务是不可分割的工作单位。只有使事务中的所有操作都执行成功了才能算整个事务执行成功,过程中只要有一个操作失败,就要回滚事务。

    C(Consistency)一致性:指事务将数据库从一种状态转变为下一种一致的状态。在事务开始前和事务结束后,数据库的完整性约束没有被破坏。例如,一个列为id的字段,要求不能有重复id,但是事务结束后,出现了相同id,这就破坏了一致性

    I(Isolation)隔离性:隔离性还有其他称呼,如并发控制、可串行化、锁等等。当事务A操作对象A时,其他事务不能操作A(隐身)。

    D(Durability)持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作。

     

    其中隔离性会产生的几种问题:

    1、脏读 

    2、不可重复读

    3、幻读

    4、丢失更新
    (这几个的概念在上一篇InnoDB锁中已经解释过了)

    3.事务的分类

    • 扁平事务
    • 带有保存点的扁平事务
    • 链事务
    • 嵌套事务
    • 分布式事务

    3.1 扁平事务

    扁平事务是事务类型最简单的一种,在扁平事务中,所有操作都处于同一层次,由BEGIN WORK 开始,由COMMIT WORK 或者ROLLBACK WORK 结束,期间操作是原子性的,要么都完成要么都回滚。

    3.2 带有保存点的扁平事务

    有时候全部操作回滚的代价比较高,例如买三张转机飞机票去北极,前两张都买好了,等买第三张的时候,机场告诉你票都抢没了,你需要买第二天的票,这时候回滚全部飞机票代价比较大,所以就需要一个带节点的扁平事务,只需回滚到第二张飞机票即可。

    概念:允许事务执行过程中回滚到同一事务中较早的一个状态。保存点(Savepoint)用来通知系统保存当前事务状态,以便之后发生错误回滚到当前节点。

    3.3 链事务

    带有保存点的扁平事务是易失的,当发送系统崩溃的时候所以保存点消失。

    链事务思想:在提交事务时,释放不需要的数据对象,将必要的处理上下文隐式地传给下一个要开始的事务。提交事务操作和开始下一事务操作将合并为一个原子操作,意味着下一个事务将看到上个事务的执行结果。链事务与带有保存点的事务不同的是, 带有保存点的扁平事务能回滚到任意正确的保存点, 而链事务中的回滚仅限于当前事务. 另外, 链事务在执行了COMMIT后即释放了当前事务所持有的锁, 而带有保存点的扁平事务不影响迄今为止所持有的锁

    3.4 嵌套事务

    嵌套事务是一个层次结构框架,由一个顶层事务控制着各个层次的事务,子事务既可以提交也可以回滚,但是它的提交不会立马生效,需要顶层事务也提交,任意事务的回滚都会引起子事务的回滚。

    3.5 分布式事务

    通常是一个在分布式环境下运行的扁平事务。

    4.事务的实现

    事务隔离性由锁实现,原子性、一致性、持久性通过数据库的redo log 和 undo log 来完成。redo log称为重做日志,用来保证事务的原子性和持久性。undo log 用来保证事务的一致性。redo 和 undo 都视为一种恢复操作,redo 恢复提交事务修改的页操作,而undo回滚行记录到某个特定版本。redo 是时物理日志,记录的时页的物理修改操作,undo 是逻辑日志,记录每行。

    4.1 redo

    • 4.1.2 概述

    重做日志用来实现事务的持久性。

    组成:

    • 内存中的重做日志缓冲(redo log buffer),是易失的。
    • 重做日志文件(redo log file),是持久的。

    InnoDB 是事务的存储引擎,其通过Force Log at Commit 机制实现事务的持久性,当事务提交时,必须先将该事务的所有日志写到重做日志文件进行持久化,待事务的提交操作完成才算完成。

    redo log 用来保证事务的持久性,undo log 用来帮助事务回滚及MVCC的实现。

    为了保证每次日志都写入重做日志文件, 在每次将重做日志缓冲写入日志文件后, InnoDB都需要调用一次fsync操作. 重做日志缓冲先写入文件系统缓冲, 为了 确保重做日志写入磁盘, 必须进行一次fsync操作. 由于fsync的效率取决于磁盘的性能, 因此磁盘的性能决定了事务提交的性能.

    • 4.1.2 log block

    在InnoDB中, 重做日志都是以512字节进行存储的。这意味着重做日志缓冲, 重做日志都是以块的方式进行保存的. 称之为重做日志块(redo log block)每块大小512字节

    • 4.1.3 log group

    log group 为重做日志组,其中有多个重做日志文件。log group 是逻辑上的概念,并没有实际的物理存储,每个log group的日志文件大小是相同的,重做日志文件中存储的是之前在log buffer 中保存的log block,因此也是以块的方式进行物理存储管理,每个块大小也是512字节。

    log buffer把log block刷新到磁盘根据一下规则:

    1. 事务提交时
    2. 当 log buffer 中有一半的内存空间已经被使用
    3. log checkpoint 时

    对于log block的写入追加在redo log file 的最后部分,当redo log file 被写满时,会接着写入下一个redo log file

    • 4.1.4 恢复

    InnoDB存储引擎在启动时不管上一次数据库运行是否正常关闭, 都会尝试进行恢复操作. 因为重做日志记录的是物理日志, 因此恢复的速度比逻辑日志, 如二进制日志, 要快很多. 我理解的物理日志就是说 : 直接记录事务对于B+树结构和节点值的修改. 而逻辑日志是记录事务的每一句SQL语句, 事后再执行一遍还是需要改变B+树的结构. 所以物理日志比二进制日志要恢复得快

    4.2 undo

    • 4.2.1 概述

    数据库修改时不仅会产生 redo ,也会产生一定的undo,这样如果用户执行的事务失败了需要回滚,或者用户想要执行ROLLBACK语句,这就可以用到 undo 将数据回滚到修改之前的样子。

    redo 存放在重做日志中,undo 存放在数据库内部的一个特殊段中,称为 undo 段。undo段位于共享表空间内

    undo是逻辑日志,所以回滚的时候并不是物理地恢复到原来的样子,而是InnoDB执行相反的语句来实现回滚,例如:当你插入10条语句INSERT ,此时回滚就会执行10条相反的DELETE语句来删除之前执行的插入,不使用物理方法的原因是数据库是并发的,在事务回滚过程中还会有其他事务进行数据处理,所以不能单纯地以物理的手段去回滚。

    undo 的另一个作用是实现MVCC当用户读取一行记录的时候,若该记录已被其他事务占用,当前事务可以通过 undo读取到之前的行版本信息,实现非锁定读取。

    • 4.2.2 group commit 

    若事务非只读事务, 每次提交事务时需要进行一个fsync操作, 以此保证重做日志文件都已经写入了磁盘. 当数据库发生宕机时, 可以通过重做日志文件恢复. 磁盘的fsync性能是有限的, 当前数据库提供了group commit的功能, 即以此fsync操作确保多个事务日志被写入文件. 对于InnoDB来说, 事务提交是会进行两个阶段的动作 :

    • 修改内存中事务对应的信息, 并且将日志写入重做日志缓冲
    • 调用fsync将确保日志都从重做日志缓冲写入磁盘

    有了group commit, 可以将多个事务的重做日志通过一次fsync操作就刷新到磁盘, 这样就大大减小了磁盘的压力

    • 4.2.3 Binary Log Group Commit(BLGC) 

    在MySQL数据库上层进行提交时首先按照顺序将其放入一个队列中, 队列中的第一个 事务叫做leader, 其他事物称为follower, leader控制着flowwer的行为

    BLGC实现方式是将事务提交的过程分为几个步骤来完成

    • Flush阶段 , 将每个事务的二进制日志写入内存中
    • Sync阶段, 将内存中的二进制日志刷新到磁盘, 若队列中有多个事务, 那么一次fsync操作就完成了二进制日志的写入
    • Commit阶段, keader根据顺序调用存储引擎事务的提交

    当有一组事务在进行 Commit阶段时, 其他事务 可以进行Flush阶段
     

    5.数据库提供的四种隔离级别:

    1. Read uncommitted(读未提交):最低级别,任何情况都会发生。
    2. Read Committed(读已提交):可避免脏读的发生。
    3. Repeatable read(可重复读):可避免脏读、不可重复读的发生。
    4. Serializable(串行化):避免脏读、不可重复读,幻读的发生。
       

    InnoDB的默认隔离级别为REPEATABLE READ, 但是与标准SQL不同的是, InnoDB存储引擎在REPEATABLE READ事务隔离级别下, 使用Next-Key Lock锁的算法, 因此避免幻读的产生. 但是其会出现丢失 更新的现象, 若要避免丢失更新, 还是需要SERIALIZABLE的隔离级别

    展开全文
  • InnoDB索引

    万次阅读 2019-08-05 16:30:09
    InnoDB存储引擎支持一下几种索引 B+ 树索引 全文索引 哈希索引 2.B+ 树索引 B+ 树索引并不能找到给定字符的具体位置,而是将字符所在的页读取到内存中,然后再内存中查找数据。B+树中的B不是代表二叉(binary), ...
  • InnoDB整理

    2021-04-07 21:39:12
    InnoDB存储引擎 1.InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID) 2.InnoDB是mySQL默认的存储引擎,默认的隔离级别是RR,并且在RR的隔离级别下更近一步,通过多版本并发控制(MVCC)解决不可重复读问题,...
  • InnoDB Cluster详解

    千次阅读 2019-09-12 18:03:08
    一、InnoDB Cluster简介 1. 整体架构 2. MySQL Shell 3. MySQL Router 4. MySQL服务器集群 二、创建InnoDB Cluster 1. 检查实例配置 2. 配置实例 3. 创建集群 4. 向集群添加实例 5. 查看集群状态 6. 基于...
  • InnoDB 预读

    2019-06-29 17:06:05
    预读(read-ahead)操作是一种IO操作,用于异步将磁盘的页读取到buffer pool中,预料这些页会马上被读取到。预读请求的所有页集中在一...能够通过调整被连续访问的页的数量来控制InnoDB的预读操作,使用参数innodb_r...
  • innodb 优化

    2018-08-02 15:55:42
    innodb_use_native_aio 异步减少进程阻塞时间 sync_binlog/innodb_flush_lig_at_trx_commit 减少事物中i/o 操作 innodb_sync_spin_loops/innodb_spin_wait_delays 较少cpu 空等待 mysql架构好处是将存储和处理分离...
  • 在数据存储模型中,通常有“空间”这个概念,在 MySQL 中被称为“表空间”,有时候在 InnoDB 中也被称为“文件空间”。一个空间可能由一个操作系统中的多个实际文件组成(例如 ibdata1, ibdata2 等等),实际上只是...
  • 14.1.3 Turning Off InnoDB 关掉InnoDB: Oracle 推荐InnoDB 作为首选的存储引擎用于典型的数据库应用,从单用户的wikis到博客, 到高端应用把性能推到极限。在MySQL 5.6中,InnoDB是新表的默认存储引擎。 如果你...
  • InnoDB Monitor

    2016-12-18 22:41:30
    InnoDB monitor一共有四种模式,show innodb status只是其一种模式的直接展现,并且只能交互式开启,无法自动循环捕获信息。另外还有一种适合四种模式的开启方式,则是通过创建一张特殊的innodb表来开启,开启后会...
  • 使用InnoDB表的好处 你可能会因为以下原因而发现InnoDB表的好处: 如果服务器由于硬件或软件问题而瘫痪,无论当时数据库中发生了什么,你无需执行任何特殊操作,只要重新启动数据库即可。InnoDB故障恢复会自动完成...
  • 14.8.1 Creating InnoDB Tables 创建InnoDB 表 创建一个InnoDB表,使用CREATE TABLE 语句,你不需要指定ENGINE=InnoDB 子句 如果InnoDB 是定义为默认的存储引擎,在MySQL 5.5是默认为InnoDB. 你仍旧可以使用 ...
  • InnoDB

    2017-06-20 11:03:20
    锁是InnoDB保障事务隔离性的重要手段,各个存储引擎以及DB的锁的实现是不同的。 MySql中,MyISAM采用表锁,InnoDB基于行锁。 Sql Server 2005支持乐观锁和悲观锁并发; InnoDB提供一致性的非锁定读和行级锁,类似...
  • InnoDB Error Table mysql innodb table stats not found
  • 当前MySQL Innodb拥有两种文件格式: 1.旧版本的antelope,对应到两种行格式:redundant和compact 2.新版本的barracuda,对应到两种行格式:dynamic和compressed 文件格式和行格式可以通过参数设置: SET GLOBAL ...
  • 原文地址:https://blog.jcole.us/2013/01/02/on-learning-innodb-a-journey-to-the-core/,本系列翻译会在其基础上扩展一些...不幸的是,InnoDB 文档对 InnoDB 的内部数据结构缺乏清晰明确的解释,阅读它的源码是深入.
  • 1. InnoDB Monitor 类型 有四类InnoDB monitor:Standard Monitor、Lock Monitor、Tablespace Monitor、Table Monitor。其中Tablespace Monitor和Table Monitor将在后续版本(MySQL5.7中移除,对应的信息可从...
  • 修改MySQL配置文件my.cnf(通常位于/etc/对于MySQL 5.5而言:default-storage-engine=MyISAMloose-skip-loose-innodb-trx=0loose-innodb-locks=0loose-innodb-lock-waits=0loose-innodb-cmp=0loose-innodb-cmp-per-...
  • innoDB 内存优化

    2019-10-11 15:37:59
    innodb 缓存机制 innodb 用一块内存区做io缓存池.该缓存池不仅用来缓存innodb的索引块,而且缓存innodb的数据块. innodb 缓存池逻辑有free list,flush list,lru list 组成. free list 空闲的缓存块列表 flush list ...
  • SELECT * FROM information_schema.INNODB_TRX; -- 命令是用来查看当前运行的所有事务: SELECT * FROM information_schema.INNODB_LOCKs; -- 命令是用来查看当前出现的锁; SELECT * FROM information_schema....
  • innodb存储引擎

    2020-03-18 23:22:36
    文章目录1.innodb存储引擎概述2.innodb体系架构2.1后台线程2.2内存1.缓冲池2.LRU list 和 Flush list 和Free list3.重做日志缓冲4.额外的内存池2.4Checkpoint技术2.5Master Thread工作方式2.5.1innodb 的master ...
  • Mysql InnoDB开启

    2019-09-03 16:16:15
    查看是否开启 show engines; 如果是No的话 在mysql服务器上 打开 my.ini 修改 ...default-storage-engine=InnoDB #skip-innodb 然后重启mysql服务 ALTER TABLE tablename ENGINE=InnoDB; ...
  • 14.6.1 Creating InnoDB Tables 创建InnoDB 表: 创建一个InnoDB 表,使用CREATE TABLE 语句,你不需要指定 ENGINE=InnoDB子句 如果InnoDB 定义为默认的存储引擎, 在MySQL 5.5是默认的版本。 你仍旧可以使用...
  • InnoDB相关

    千次阅读 2016-03-17 12:58:55
    最近要用到表事务中的一些回滚处理,所以看了一下InnoDB相关的资料。 有兴趣的自已去啃,传送门:http://dev.mysql.com/doc/refman/5.0/en/innodb-configuration.html SHOW TABLE STATUS 上面这条SQL可以查看当前...
  • 14.9.3 InnoDB Checkpoints InnoDB 检查点 让你的日志文件非常大可能会降低disk I/O 在发生检查点期间, 它通常是有意义的设置log files的总的大小和buffer pool一样大甚至更大。 尽管在过去 large log files...
  • innodb和myisam的区别

    千次阅读 2020-08-25 22:35:01
    innodb和myisam的区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理); (2)锁机制不同: MyISAM是表级锁,而InnoDB是行级锁; (3)select ,update ,insert ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,531
精华内容 31,412
关键字:

innodb