MySQL學習筆記(三) 資料庫意向鎖和元資料鎖

2021-09-24 18:46:46 字數 829 閱讀 8198

儲存引擎:innodb

一、意向鎖

意向鎖的分類:

意向鎖是表鎖 !!!

意向鎖不會與行級的共享 / 排他鎖互斥

為什麼需要意向鎖?

主要為了實現多粒度鎖。

假設沒有意向鎖,事務a使用行鎖鎖住其中一行,事務b申請表的互斥鎖,然後修改整個表,行鎖和表鎖就會發生衝突,要解決衝突,事務b需要等待事務a鎖住的行鎖釋放,但是事務b並不知道事務a鎖住的是哪一行,所以事務b會遍歷資料庫每一行判斷是否有行鎖,這是乙個非常耗時的過程。

為了解決上述問題引入意向鎖,事務a在加行鎖前,先需要給表加上對應的意向鎖,這樣如果事務b來獲取表鎖,需要先判斷表上是否有意向鎖,如果有意向鎖,則阻塞,等待事務a的鎖釋放

意向鎖之間不互斥,包括意向互斥鎖,也就是兩個意向互斥鎖可以共存

意向鎖和表鎖之間相容關係

意向共享鎖(is)

意向互斥鎖(ix)

共享鎖(is)

相容互斥

互斥鎖(ix)

互斥互斥

二、元資料鎖

元資料鎖屬於表鎖範疇,元資料即資料字典資訊

為什麼需要元資料鎖

執行緒a查詢資料庫,執行緒b對錶結構進行變更,比如說刪除某一列,修改列名,那麼查詢結果和資料庫表結構對應不上,這就衝突了

mdl鎖可能帶來的問題:

讀寫鎖不相容,事務b必須等待事務a提交結束才能繼續執行,事務c雖然是讀鎖,讀鎖之間相互相容,但是由於事務b的存在,也會阻塞,如果這時查詢請求很頻繁,會造成大量請求失敗。

MySQL資料庫學習筆記

一 資料庫介紹 1 為什麼需要資料庫 記憶體掉電後資料丟失,計算機的資源有限,因此需要把程式中用的資料儲存下來以便於關機後還能繼續使用 資料持久化 而儲存資料最簡單的方法就是把資料以檔案形式寫入到磁碟中。隨著程式的功能越來越複雜,需要操作的數量也就是越來越來大,管理資料就成了很大的問題,因為讀寫檔案...

MySQL調優學習筆記(三 資料庫優化)

關於資料型別的優化主要分為三個點 1 選擇更小的資料型別效能更好 小的資料型別占用磁碟 cpu和記憶體更少,處理時需要的cpu週期也更少。2 簡單的資料型別效能更好 比如整形 datetime相對於字元型別就更好,因為字符集的校對規則更為複雜。3 盡量避免null 對於mysql來說,可包含null...

python學習筆記(三)資料庫

一 資料庫配置 檔案mysite settings.py.通常這個檔案使用sqlite作為預設資料庫,如果要使用其他資料庫,需要安裝合適的database binings,然後改變檔案databases default 專案中的一些鍵值,engine 可選值有 django.db.backends....