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