mysql Innodb存储特性

Innodb是mysql常用存储引擎,5.5版本以后更是成为mysql数据库的默认存储引擎,

Innodb具有哪些特性呢?

1、Innodb是一种事物型存储引擎
完全支持事物的ACIS特性

关于事物之前我们已经讲过,那这里我们着重讲解如何实现事物的 ACID特性:
为了实现事物的原子性、一致性和持久性,Innodb实现了两个特殊的日志类型,即Redo Log(重做日志)和Undo Log(回滚日志)。
其中Redo Log主要是为了实现事物的持久性,由两部分组成:
(1)、内存中的重做日志缓冲区,由innodb_log_buffer_size决定大小
(2)、重做日志文件,即文件系统中id_log_file开头的文件。
Undo Log专注未提交事物进行回滚和实现MVCC(多版本并发控制)
Redo Log存储已提交事物,Undo Log存储未提交事物。
因此当我们对Innodb表进行修改,不仅会产生Redo Log,也会产生一定Undo Log,这样用户提交对语句由于某种原因失败,或者用户使用ROLLBACK语句回滚,这样就可以用利用Undo Log中信息。
Redo Log基本是顺序写入,数据库运行时不需要对Redo Log进行读取操作。
Undo Log需要随机读写,mysql5.6版本中的Undo Log可以独立于系统表空间存在,如果条件允许,我们就可以把Undo Log存储在固态存储设备上,这样可以由更好的性能。

2、Innodb支持行级锁

这点与myisam支持的表级锁不同。行级锁的特点是进行写操作时需要锁定资源更多,支持的并发更多。但是需要注意的是Innodb行级锁是在存储引擎层实现的,mysql服务器完全不了解锁的实现方式。

那锁的作用是什么呢?什么是锁呢?

锁是数据库系统区别于文件系统的一个重要特性,锁的主要作用是管理共享资源的并发访问,锁用于实现事物的隔离性。

锁的类型?

共享锁(读锁)
独占锁(写锁)

锁的粒度

锁的粒度也就是锁的策略,也就是被加锁资源的最小单位。
表级锁
这是mysql基本的表策略,也是开销最小的策略,但也意味着并发性低,一个用户对表进行写入前需要先获得写锁,但会阻塞其他用户对该表对所有对读写操作。只有没有写锁对情况下,其他用户才会会的读锁,读锁相互间不会堵塞。
表级锁通常是在mysql服务器层实现,所以虽然Innodb实现了行级锁,但是在一些时候,在mysql服务层还是会对Innodb表加入表级锁。
行级锁
行级锁可最大程度支持并发处理,当然锁对开销也比表级锁大,行级锁只在存储引擎中进行实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值