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. 系統會自動發現死鎖