mysql的鎖機制基本原理

本篇內容介紹了“MySQL的鎖機制基本原理”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

創(chuàng)新互聯,專注為中小企業(yè)提供官網建設、營銷型網站制作、成都響應式網站建設、展示型網站制作、網站設計等服務,幫助中小企業(yè)通過網站體現價值、有效益。幫助企業(yè)快速建站、解決網站建設與網站營銷推廣問題。

今天沒事就學習一下mysql的三種鎖機制的優(yōu)缺點:
MySQL各存儲引擎使用了三種類型(級別)的鎖定機制:行級鎖定,頁級鎖定和表級鎖定。下面我們先分析一下MySQL這三種鎖定的特點和各自的優(yōu)劣所在。
● 行級鎖定(row-level)
行級鎖定最大的特點就是鎖定對象的顆粒度很小,也是目前各大管理軟件所實現的鎖定顆粒度最小的。由于鎖定顆粒度很小,所以發(fā)生鎖定資源爭用的概率也最小,能夠給予應用程序盡可能大的并發(fā)處理能力而提高一些需要高并發(fā)應用系統(tǒng)的整體性能。雖然能夠在并發(fā)處理能力上面有較大的優(yōu)勢,但是行級鎖定也因此帶來了不少弊端。由于鎖定資源的顆粒度很小,所以每次獲取鎖和釋放鎖需要做的事情也更多,帶來的消耗自然也就更大了。此外,行級鎖定也最容易發(fā)生死鎖。
● 表級鎖定(table-level)
和行級鎖定相反,表級別的鎖定是MySQL各存儲引擎中最大顆粒度的鎖定機制。該鎖定機制最大的特點是實現邏輯非常簡單,帶來的系統(tǒng)負面影響最小。所以獲取鎖和釋放鎖的速度很快。由于表級鎖一次會將整個表鎖定,所以可以很好的避免困擾我們的死鎖問題。當然,鎖定顆粒度大所帶來最大的負面影響就是出現鎖定資源爭用的概率也會最高,致使并大度大打折扣。
● 頁級鎖定(page-level)
頁級鎖定是MySQL 中比較獨特的一種鎖定級別,在其他數據庫管理軟件中也并不是太常見。頁級鎖定的特點是鎖定顆粒度介于行級鎖定與表級鎖之間,所以獲取鎖定所需要的資源開銷,以及所能提供的并發(fā)處理能力也同樣是介于上面二者之間。另外,頁級鎖定和行級鎖定一樣,會發(fā)生死鎖。
在數據庫實現資源鎖定的過程中,隨著鎖定資源顆粒度的減小,鎖定相同數據量的數據所需要消耗的內存數量是越來越多的,實現算法也會越來越復雜。不過,隨著鎖定資源顆粒度的減小,應用程序的訪問請求遇到鎖等待的可能性也會隨之降低,系統(tǒng)整體并發(fā)度也隨之提升。
MySQL 的表級鎖定主要分為兩種類型,一種是讀鎖定,另一種是寫鎖定。在MySQL 中,主要通過四個隊列來維護這兩種鎖定:兩個存放當前正在鎖定中的讀和寫鎖定信息,另外兩個存放等待中的讀寫鎖定信息,如下:
•Current read-lock queue (lock->read)
•Pending read-lock queue (lock->read_wait)
•Current write-lock queue (lock->write)
•Pending write-lock queue (lock->write_wait)
讀鎖定
一個新的客戶端請求在申請獲取讀鎖定資源的時候,需要滿足兩個條件:
1、請求鎖定的資源當前沒有被寫鎖定;
2、寫鎖定等待隊列(Pending write-lock queue)中沒有更高優(yōu)先級的寫鎖定等待;
如果滿足了上面兩個條件之后,該請求會被立即通過,并將相關的信息存入Current read-lock queue 中,而如果上面兩個條件中任何一個沒有滿足,都會被迫進入等待隊列Pending read-lock queue中等待資源的釋放。
寫鎖定
當客戶端請求寫鎖定的時候,MySQL 首先檢查在Current write-lock queue 是否已經有鎖定相同資源的信息存在。如果Current write-lock queue 沒有,則再檢查Pending write-lock queue,如果在Pending write-lock queue 中找到了,自己也需要進入等待隊列并暫停自身線程等待鎖定資源。反之,如果Pending write-lock queue 為空,則再檢測Current read-lock queue,如果有鎖定存在,則同樣需要進入Pending write-lock queue 等待。當然,也可能遇到以下這兩種特殊情況:
1. 請求鎖定的類型為WRITE_DELAYED;
2. 請求鎖定的類型為WRITE_CONCURRENT_INSERT 或者是TL_WRITE_ALLOW_WRITE, 同時Current read lock 是READ_NO_INSERT 的鎖定類型。
當遇到這兩種特殊情況的時候,寫鎖定會立即獲得而進入Current write-lock queue 中如果剛開始第一次檢測就Current write-lock queue 中已經存在了鎖定相同資源的寫鎖定存在,那么就只能進入等待隊列等待相應資源鎖定的釋放了。讀請求和寫等待隊列中的寫鎖請求的優(yōu)先級規(guī)則主要為以下規(guī)則決定:
1. 除了READ_HIGH_PRIORITY 的讀鎖定之外,Pending write-lock queue 中的WRITE 寫鎖定能夠阻塞所有其他的讀鎖定;
2. READ_HIGH_PRIORITY 讀鎖定的請求能夠阻塞所有Pending write-lock queue 中的寫鎖定;
3. 除了WRITE 寫鎖定之外,Pending write-lock queue 中的其他任何寫鎖定都比讀鎖定的優(yōu)先級低。
寫鎖定出現在Current write-lock queue 之后,會阻塞除了以下情況下的所有其他鎖定的請求:
1. 在某些存儲引擎的允許下,可以允許一個WRITE_CONCURRENT_INSERT 寫鎖定請求
2. 寫鎖定為WRITE_ALLOW_WRITE 的時候,允許除了WRITE_ONLY 之外的所有讀和寫鎖定請求
3. 寫鎖定為WRITE_ALLOW_READ 的時候,允許除了READ_NO_INSERT 之外的所有讀鎖定請求
4. 寫鎖定為WRITE_DELAYED 的時候,允許除了READ_NO_INSERT 之外的所有讀鎖定請求
5. 寫鎖定為WRITE_CONCURRENT_INSERT 的時候,允許除了READ_NO_INSERT 之外的所有讀鎖定請求

“mysql的鎖機制基本原理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯網站,小編將為大家輸出更多高質量的實用文章!

網頁名稱:mysql的鎖機制基本原理
文章路徑:http://muchs.cn/article2/jopjoc.html

成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、虛擬主機、做網站、電子商務建站公司、動態(tài)網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

網站優(yōu)化排名