1. 程式人生 > 其它 >MySQL中一些經典場景

MySQL中一些經典場景

1.聯合索引的最左匹配原則碰到範圍查詢會失效:例如a,b,在a為單值時候,b是有序的可以走索引,但如果a是範圍查詢例如a>2,多段之間的b不是有序的,不能走索引。

2.做DDL時候,申請寫鎖,拿到後獲取表結構資訊;降級為讀鎖;後臺做修改操作;讀鎖升級為寫鎖,替換老的表結構資訊;釋放DDL鎖。

3.意向鎖(IS,IX)是表級鎖,意向鎖之間都不互斥,意向鎖和表級鎖S,X之間存在相容互斥,注意:意向鎖和行鎖不存在互斥關係!

4.merge過程並沒有刷髒頁:從磁碟讀取老的資料頁到記憶體;將change buffer中相關記錄重放到資料頁中;將資料的變更和change buffer的變更記錄到redo log中。

5.兩階段提交如何保證一致性?如果在redo log的prepare階段,還未寫入bin log就回滾;如果在寫完bin log,還未完成redo log的commit:如果redo log有commit標誌就提交,如果redo log沒有,檢查bin log是否完整:statement格式的有commit標誌,rowid格式的觀察xid(mysql有bin log的校驗和引數保證能驗證bin log是否完整)。

6.單一bin log不具有崩潰恢復的能力,bin log記錄的內容是邏輯上:例如對a=1這一行a+1,他沒有記錄具體資料頁上的操作,而行資料在資料頁(物理,地址)上隨著update是變動的。

7.間隙鎖只在rr級別有。間隙鎖在主鍵以及二級索引上都會有。一定要記住鎖是載入索引上的。

8.在rc級別下bin log使用row格式,也可以糾正幻讀的問題,row格式對操作進行規則化改寫。

9.rc級別的一個優化:語句執行過程中加上的行鎖,語句執行完後(事務未提交),把不滿足條件的行的行鎖釋放了,這是優化,不滿足兩階段鎖協議。

10.rr級別的一致性檢視在for update語句時不會產生。

11.只讀事務不會分配trx id,不存在檢視。mvcc實現中高低水位判斷事務可見性時候,不需要管只讀事務,減輕了負擔。