-
加鎖
查看全部 -
a
查看全部 -
多版本并發控制原理分析 之 隱式字段
? ? ? ? (1) DB_TRX_ID
? ? ? ? ? ? a. 占用6byte
? ? ? ? ? ? b. 記錄了創建這條記錄時, 最近一次創建或修改該記錄的事務id
? ? ? ? (2) DB_ROLL_PTR
? ? ? ? ? ? a. 占用7byte, 回滾指針
? ? ? ? ? ? b. 指向這條記錄的上一個版本(存儲于rollback segment回滾段里)
? ? ? ? (3) DB_ROW_ID
? ? ? ? ? ? a. 6byte, 隱含的自增ID(隱藏主鍵)
? ? ? ? ? ? b. 如果數據表沒有主鍵, Innodb會自動以DB_ROW_ID產生一個聚簇索引.
? ? ? ? (4) 創建版本號
? ? ? ? ? ? 記錄了創建事務時的版本號
? ? ? ? (5) 刪除版本號
? ? ? ? ? ? 記錄了刪除事務時的版本號
? ? ? ? 隱式字段填充過程:
? ? ? ? ? ? (1) 初始化數據:?
? ? ? ? ? ? ? ? DB_TRX_ID : NULL, DB_ROLL_PTR : NULL, DB_ROW_ID : 1
? ? ? ? ? ? ? ? 此時沒有事務, 所以前兩個為null, row_id會自增填充.
? ? ? ? ? ? ? ? 屬于歷史記錄, 存儲在undo log里
? ? ? ? ? ? (2) 事務1 (假如修改了某字段值):
? ? ? ? ? ? ? ? DB_TRX_ID : 1, DB_ROLL_PTR : 指針, DB_ROW_ID : 1
? ? ? ? ? ? ? ? 開啟了事務, 所以回滾指針指向了上一個版本的記錄.
? ? ? ? ? ? (3) 事務2:
? ? ? ? ? ? ? ? 第二個事務, DB_TRX_ID會變為最近一次的事務id, 即從1變為2. 指針指向了事務1的版本.
查看全部 -
? ? 1. 事務隔離級別
? ? ? ? (1) read uncommitted (讀未提交)? 導致: 臟讀, 不可重復讀, 幻讀
? ? ? ? (2) read committed (讀已提交)? 導致: 不可重復讀, 幻讀
? ? ? ? (3) repeatable read (重復讀)? 導致: 幻讀(MVCC, next-key-lock解決幻讀)
? ? ? ? (4) serialiable (串行化)?
? ? ? ? 1.1 臟讀:?
? ? ? ? ? ? ? ? (1) 當前事務讀取到了并行的其他事務修改的數據, 這些數據還沒有提交.?
? ? ? ? ? ? ? ? (2) 也就是在并行事務的場景下, 不同事務之間對于數據的修改相互可見.?
? ? ? ? ? ? ? ? (3) 這樣讀取到的數據可能就是個臟數據, 因為那個數據可能還沒提交或者在回滾, 所以讀到的數據不是最終確認的數據.
? ? ? ? 1.2 不可重復讀:?
? ? ? ? ? ? ? ? (1) 在不同事務之間, 并行的事務進行讀取數據, 這一行的數據讀取到的值有可能在其他并行事務中被修改.?
? ? ? ? ? ? ? ? (2) 修改之后的值有可能已經把這個值改變了. 改變之后, 事務進行的提交或者回滾, 再在當前事務里對該數據進行讀取, 可能讀取到的值會發生變化.?
? ? ? ? ? ? ? ? (3) 這樣前后兩次讀取到的值就是不相同了, 這就是不可重復讀.
? ? ? ? 1.3 幻讀:
? ? ? ? ? ? ? ? (1) 在同一個事務中前后兩次讀取到的數據條數不相同. 其他事務可能進行了一個插入操作.?
? ? ? ? ? ? ? ? (2) 進行插入的數據, 有可能會影響到當前事務的業務邏輯. 讀取到的數據行數不一樣.?
? ? ? ? ? ? ? ? (3) 讀取到的數據像是幻影, 即幻讀.
查看全部 -
哈哈哈哈哈哈哈哈哈哈
查看全部 -
select @@global.tx_isolation;? // 系統隔離級別
select @@tx_isolation; //會話隔離級別
查看全部 -
mysql hide field
查看全部 -
mysql log
查看全部 -
如何查看SQL語句是否走了索引(explain)?上圖所示
聯合索引最左原則
區分度低的字段不適合建索引
聯合索引字段個數不宜太多,充分權衡插入刪除操作及DBA操作表成本
索引組合索引、少用單列索引
where, on, group by, order by 后面跟著字段創建索引
創建了索引,不代表就走了索引
查看全部 -
mysql多版本并發控制原理
教學目標
1、擺脫增刪改查
2、mvcc原理是什么
3、介紹數據庫的一些坑
學習路線及重點
1、事務隔離級別-種類、查看、設置、選擇、關聯
2、通過現象引發思考-并發事務不同隔離級別的效果
3、多版本并發控制原理
4、mysql總結
查看全部 -
MySQL數據庫 多版本并發控制 增刪改查程序員
MVCC原理的一些問題
數據庫的坑
學習路線與學習重點
通過現象引發思考 并發事務不同隔離級別的效果
多版本并發控制原理
mysql經驗總結
查看全部 -
可重復讀級別,在首次快照讀時生成讀視圖
讀已提交級別,在每次快照讀時生成讀視圖
查看全部 -
索引
查看全部 -
事務
查看全部 -
MySQL
查看全部 -
多版本并發控制
查看全部 -
數據可見性算法
查看全部 -
讀視圖
查看全部 -
讀視圖
查看全部 -
SELECT FOR UPDATE
查看全部 -
隱式字段
查看全部 -
聚簇索引
查看全部 -
串行化
查看全部 -
選擇隔離級別
查看全部 -
查看 MySQL 事務隔離級別
設置 MySQL 事務隔離級別
查看全部 -
MySQL事務隔離級別
讀未提交
讀已提交
可重復讀
串行化
查看全部 -
章節學習目錄
查看全部 -
MySQL
查看全部
舉報