mysql 事务 锁 并发
連接管理器:
? ?接受請求
? ?創建線程
? ?認證用戶
? ?建立安全連接
并發控制:
? ?mbox:MDA
? ?C/S: 100
? ? ? ?10分鐘:
? ? ? ? ? ?多版本并發控制: MVCC ? ?用戶操作數據時,操作是的數據的快照,切數據快照存在時間值。操作完成后,對快照進行合并。
鎖:
? ?讀鎖:共享鎖
? ?寫鎖:獨占鎖
? ? ? ?LOCK TABLES tb_name {READ|WRITE};
? ? ? ?UNLOCK TABLES
鎖粒度:從大到小,MySQL服務器僅支持表級鎖,行鎖需要由存儲引擎完成;
? ?表鎖:
? ?頁鎖:
? ?行鎖:
事務:
? ?RDBMS: ACID (原子性,一致性,隔離性,持久性)
? ?MyISAM:
? ?InnoDB:
? ?事務日志 ? ? ? ?事務引擎: 先將事務步驟在內存中執行一遍,寫入事務日志。當事務執行完成了,即事務提交,即在內存中執行完成還沒有寫入內存。然后寫入磁盤中。
? ? ? ?重做日志
? ? ? ? ? ?redo log
? ? ? ? 撤消日志
? ? ? ? ? ?undo log
服務器變量:
動態:
? ?全局變量
? ? ? ?修改后不影響當前會話,只對新建的會話有效;
? ?會話變量
? ? ? ?僅對當前會話有效,而且是立即生效;
? ?永久有效:修改配置文件
修改:SET {SESSION|GLOBAL} VAR_NAME=‘’;
多事務同時執行:彼此之間互不影響的方式進行并行;
? ?事務之間交互:
? ? ? ?通過數據集
事務:CPU, I/O
? ?RDBMS,
? ? ? ?ACID:
? ? ? ? ? ?Automicity:原子性,事務所引起的數據庫操作,要么都完成,要么都不執行;
? ? ? ? ? ?Consistency:一致性,A(3000)-->B(2000)
? ? ? ? ? ? ? ?1:A:3000-->2500,
? ? ? ? ? ? ? ?2: A+B: 4500,
? ? ? ? ? ?Isolation: 隔離性
? ? ? ? ? ? ? ?事務調度:事務之間影響最小
? ? ? ? ? ? ? ?MVCC:多版本并發控制
? ? ? ? ? ?Durability:一旦事務成功完成,系統必須保證任何故障都不會引起事務表示出不一致性;
? ? ? ? ? ? ? ?1、事務提交之前就已經寫出數據至持久性存儲;
? ? ? ? ? ? ? ?2、結合事務日志完成;
? ? ? ? ? ? ? ? ? ?事務日志:順序IO
? ? ? ? ? ? ? ? ? ?數據文件:隨機IO
? ?事務的狀態:
? ? ? ?活動的:active
? ? ? ?部分提交的:最后一條語句執行后
? ? ? ?失敗的:
? ? ? ?中止的:
? ? ? ?提交的:
事務:并發執行
? ?1、提高吞吐量和資源利用率
? ?2、減少等待時間
事務調度:
? ?可恢復調度;
? ?無級聯高度:
隔離性:
? ?隔離級別:
? ? ? ?READ UNCOMMITTED:讀未提交
? ? ? ?READ COMMITTED:讀提交
? ? ? ?REPATABLE READ:可重讀
? ? ? ?SERIABLIZABLE:可串行
并發控制依賴的技術手段:
? ?鎖
? ?時間戳
? ?多版本和快照隔離
餓死:
死鎖:
SQL,ODBC
START TANSACTION:啟動
? ?SQL
? ?SQL
COMMIT: 提交
ROLLBACK: 回滾
如果沒有明確啟動事務:
? ?autocommit:能實現自動提交,每一個操作都直接提交;
? ?建議:明確使用事務,并且關閉自動提交;
保存點:SAVEPOINT sid
回滾至保存點:ROLLBACK TO sid
轉載于:https://blog.51cto.com/pencild/1409605
總結
以上是生活随笔為你收集整理的mysql 事务 锁 并发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#统计字数
- 下一篇: java环境变量详解---找不到或无法加