事務單元 U鎖 MVCC補充

2021-08-31 03:39:07 字數 1194 閱讀 1846

/**

* * 事務單元:

* 商品建立個gmt_modified的索引

* 讀取一行記錄

* 寫一行記錄,同時更新這行記錄的所有索引

* 刪除整個表

* * 只要傳送了乙個請求過去就是個事務單元

* * 以begin ... commit 之間是個大的事務單元

* * two phase lock(2pl)

* 先讀再寫

* begin trx;

* read from a(locka)

* read from b(lockb)

* a-100

* b+100

* commit(unlocka,unlockb)

* * 現在主要是mvcc加上一些鎖的實現....

* ** * 死鎖擴充套件 u鎖

* * 讀寫鎖與死鎖:

* 1:事務1 read from a

* 2.事務2 read from a

* 3.事務1 -100 讀鎖公升級為寫鎖,但是不成功,因為讀還沒完成,等待事務2讀完成

* 4.事務2 -100 讀鎖公升級為寫鎖,但是不成功,因為兩個讀還沒完成,等待事務1讀完成

* * trx1 申請a讀鎖成功

* trx2 申請a讀鎖成功

* trx1 申請a讀鎖公升級- 等待trx2讀鎖釋放

* trx2 申請a讀鎖公升級為寫鎖 - 等待trx1讀鎖釋放

* 就發生了死鎖了

* ** update set a=a-1 where id=100

* 併發多次發生,很可能發生死鎖

* 1.先找到id=100的資料.此時會加讀鎖

* 2.取出資料,減去1,再放回去.此時是寫鎖

* 對應兩個原子的事務操作....

* ** 更新鎖(u鎖)

* 會把上面的update的 讀鎖公升級為寫鎖,就只剩下乙個寫鎖了,其他的也是寫鎖,就會發生等待...不會發生死鎖了

* ** * mvcc:寫寫能並行嗎?

* 針對讀多寫少的場景優化

* 並行度能達到或超過讀未提交,而隔離級別很高

* * 寫寫並行?

* 樂觀鎖併發方案:

* 讓版本低的併發更新回滾

* 優勢:併發低時效能好

* 代價:併發高時失敗率高,需要不斷重試

* ** */

Redis事務 事務鎖

一旦成功所有的成功,乙個失敗,所有一些列連續動作都失敗 事務的基本操作 注意 加入事務的命令暫時到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行事務定義過程中發現問題,怎麼辦?discard 事務的工作流程 事務的注意事項 手動進行事務回滾 業務場景1 業務分析 基於特定條件的事務執行 ...

索引 事務 鎖

索引 一 索引的簡介 1.什麼是索引?概念 索引是用於快速找到記錄的一種資料結構,索引優化應該是對查詢效能優化最有效的手段了 索引的本質 索引是資料結構 可以簡單理解為 排好序的快速查詢資料結構 加速查詢 2.為什麼使用索引?簡單理解 優化查詢速度 索引優化應該是對查詢效能優化最有效的手段了,善用索...

mysql事務與鎖機制 mysql事務與鎖機制

在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...