7 mysql事務與隔離級別

連接管理器:

接受請求

創建線程

認證用戶

建立安全連接


解析器生成解析樹


緩存:有些情況並不適合緩存

1)不確定的結果,select current_time();

2)數據較小,緩存後佔據緩存槽

3)數據較大,不宜緩存


併發控制:兩個以上的用戶同時讀寫同一個文件,都會涉及併發控制問題。

    10分鐘:

    多版本併發控制: MVCC,不同用戶創建不同的數據快照,根據操作的時間進行合併。


鎖,最簡單的控制機制

    讀鎖:共享鎖

    寫鎖:獨佔鎖

    LOCK TABLES tb_name {READ|WRITE};

    UNLOCK TABLES


鎖粒度:從大到小,MySQL服務器僅支持表級鎖,行鎖需要由存儲引擎完成;

    表鎖:鎖定整張表

    頁鎖:鎖定datablock

    行鎖:鎖定某行


事務

    多項操作作爲一個操作單元對待,都完成或者都不完成

    RDBMS: 支持事物的RDBMS要滿足ACID 

1)原子性,Automicity,事務所引起的數據庫操作,要麼都完成,要麼都不執行;

2)一致性,Consistency,

3)隔離性,Isolation,事務調度:事務之間影響最小;MVCC:multi version  control多版本併發控制

4)持久性,Durability,一旦事務成功完成,系統必須保證任何故障都不會引起事務表示出不一致性;

    a)事務提交之前就已經寫出數據至持久性存儲;

    b)結合事務日誌完成;

        事務日誌:順序IO,存儲到連續的磁盤塊,IO操作少,速度快

        數據文件:隨機IO,存儲到不連續磁盤塊,IO操作多,速度慢


事物的完成,先寫入事物日誌,然後才操作數據文件。事物提交了即完成。


事物日誌:

1)重做日誌,redo log,可執行n次

2)撤銷日誌,undo log,

日誌組:含兩個日誌文件,兩個日誌文件輪流寫入,但文件不適宜很大,合適的大小能保證及時將數據寫入磁盤;

數據和日誌不能放在同一塊物理磁盤上,防止一損俱損


隔離性,隔離級別(級別從低到高,級別越高,併發性能越差)

    READ UNCOMMITTED:讀未提交,讀尚未提交的數據,干擾最大

    READ COMMITTED:讀提交,讀已經提交的數據

    REPATABLE READ:可重讀,一直到事物commit前保持自己的首次狀態,mysql默認

    SERIALIZABLE:可串行

查看默認隔離級別

mysql> show global variables like '%isolation';

+---------------+-----------------+

| Variable_name | Value           |

+---------------+-----------------+

| tx_isolation  | REPEATABLE-READ |

+---------------+-----------------+


服務器變量

1)重啓mysql後失效,reload不失效

全局變量,修改後不影響當前會話,只對新建的會話有效;

會話變量,僅對當前會話有效,而且是立即生效;


2)永久有效:修改配置文件


修改:SET {SESSION|GLOBAL} VAR_NAME=‘’;

mysql> set global tx_isolation='read-uncommitted';


事物的執行

start transaction,啓動

rollback,提交前可回滾

commit,提交後不可回滾


自動提交autocommit

mysql> select @@autocommit;

+--------------+

| @@autocommit |

+--------------+

|            1 |

+--------------+


如果沒有明確啓動事務:

autocommit:能實現自動提交,每一個操作都直接提交;

建議:明確使用事務,並且關閉自動提交;在my.cnf [mysqld]中加入autocommit = 0重啓mysqld

作爲調優的一部分,較少IO操作


事物的狀態

    活動的:active

    部分提交:最後一條語句處於將數據寫入磁盤的過程中

    失敗的:正常提交後,未能完成

    中止的:部分執行完成

    提交的:

提交後無法撤消。


事務:併發執行

1)提高吞吐量和資源利用率

2)減少等待時間


事務調度:

1)可恢復調度,任何兩個事物的交叉執行,不會導致另外的事物狀態改變;但並不代表回滾時沒有任何影響

2)無級聯高度


併發控制依賴的技術手段:

    鎖,讀鎖,寫鎖

    時間戳,記錄事物的啓動時間和執行時間

    多版本和快照隔離


鎖飢餓,一直獲取不到鎖

死鎖,一直持有鎖


保存點:SAVEPOINT savepoint_id

回滾至保存點之前:ROLLBACK TO savepoint_id 



來自爲知筆記(Wiz)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章