innodb是mysql5.5及以后版本默认存储引擎
innodb支持事务
innodb适用表空间进行数据存储
配置:innodb_file_per_table
on:独立表空间:tableName.ibd
off:系统表空间:ibdataX
系统表空间和独立表空间的选择
比较:
1. 系统表空间无法简单的收缩文件大小
2. 独立表空间可以通过optimize table命令收缩系统文件
3. 系统表空间会产生IO瓶颈
4. 独立表空间可以同时向多个文件刷新数据
5. 建议使用独立表空间
mysql5.6以后独立表空间是默认配置
innodb存储引擎特性
1. innodb是一种事务性存储引擎
完全支持事务的ACID特性
Redo Log和Undo Log(实现事务的这几个特性)
Redo Log 主要实现事务的持久性【存储已提交的数据】
Undo Log 存储未提交的数据【需要随机读写】
2. innodb支持行级锁
1. 行级锁可以最大程度的支持并发
2. 行级锁是由存储引擎层实现的
锁:
数据库系统区分文件系统的
重要特性
1. 锁主要作用是管理共享资源的并发访问
2. 锁用于实现事务的隔离性
锁类型:
共享锁(读锁)
独占锁(写锁)
- | 写锁 | 读锁 |
---|---|---|
写锁 | 不兼容 | 不兼容 |
读锁 | 不兼容 | 兼容 |
锁的粒度
行
列
表
锁定的越少,效率越高
表级锁:开销小,并发低(mysql服务器上实现的)
行级锁:开销大,并发高
阻塞:
一个事务中的锁等待另一个锁释放
数据库连接大量堆积,性能降低
死锁:
1.多个事务之间相互占用对方的资源
2. 系统会自动发现死锁