您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL鎖機制原理是什么”,在日常操作中,相信很多人在MySQL鎖機制原理是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL鎖機制原理是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
很多時候,可以通過經驗來猜測什么樣的鎖對應用程序更合適,不過通常很難說一個鎖比別的更好,這全都要依據應用程序來決定,不同的地方可能需要不同的鎖。
想要決定是否需要采用一個支持行級鎖的存儲引擎,就要看看應用程序都要做什么,其中的查詢、更新語句是怎么用的。例如,很多的web應用程序大量的做查詢,很少刪除,主要是基于索引的更新,只往特定的表中插入記錄。采用基本的MySQLMyISAM表就很合適了。
MySQL中對表級鎖的存儲引擎來說是釋放死鎖的。避免死鎖可以這樣做到:在任何查詢之前先請求鎖,并且按照請求的順序鎖表。
MySQL中用于WRITE(寫)的表鎖的實現機制如下:
如果表沒有加鎖,那么就加一個寫鎖。
否則的話,將請求放到寫鎖隊列中。
MySQL中用于READ(讀)的表鎖的實現機制如下:
如果表沒有加寫鎖,那么就加一個讀鎖。
否則的話,將請求放到讀鎖隊列中。
當鎖釋放后,寫鎖隊列中的線程可以用這個鎖資源,然后才輪到讀鎖隊列中的線程。
這就是說,如果表里有很多更新操作的話,那么Select必須等到所有的更新都完成了之后才能開始。
從MySQL3.23.33開始,可以通過狀態變量Table_locks_waited和Table_locks_immediate來分析系統中的鎖表爭奪情況:
mysql>SHOWSTATUSLIKE'Table%';
+-----------------------+---------+
|Variable_name|Value|
+-----------------------+---------+
|Table_locks_immediate|1151552|
|Table_locks_waited|15324|
+-----------------------+---------+
MySQL鎖機制究竟是怎樣的
在MySQL3.23.7(在Windows上是3.23.25)以后,在MyISAM表中只要沒有沖突的Insert操作,就可以無需使用鎖表自由地并行執行Insert和Select語句。也就是說,可以在其它客戶端正在讀取MyISAM表記錄的同時時插入新記錄。如果數據文件的中間沒有空余的磁盤塊的話,就不會發生沖突了,因為這種情況下所有的新記錄都會寫在數據文件的末尾(當在表的中間做刪除或者更新操作時,就可能導致空洞)。當空洞被新數據填充后,并行插入特性就會自動重新被啟用了。
如果想要在一個表上做大量的Insert和Select操作,但是并行的插入卻不可能時,可以將記錄插入到臨時表中,然后定期將臨時表中的數據更新到實際的表里。可以用以下命令實現:
mysql>LOCKTABLESreal_tableWRITE,insert_tableWRITE;
mysql>InsertINTOreal_tableSelect*FROMinsert_table;
mysql>TRUNCATETABLEinsert_table;
mysql>UNLOCKTABLES;
InnoDB使用行級鎖,BDB使用頁級鎖。對于InnoDB和BDB存儲引擎來說,是可能產生死鎖的。這是因為InnoDB會自動捕獲行鎖,BDB會在執行SQL語句時捕獲頁鎖的,而不是在事務的開始就這么做。
很多的掃描表和對全表的GROUPBY操作,但是沒有任何寫表。
表級鎖和行級鎖或頁級鎖之間的不同之處還在于:
將同時有一個寫和多個讀的地方做版本(例如在MySQL中的并發插入)。也就是說,數據庫/表支持根據開始訪問數據時間點的不同支持各種不同的試圖。其它名有:時間行程,寫復制,或者是按需復制。
原文:Versioning(suchasweuseinMySQLforconcurrentinserts)whereyoucanhaveonewriteratthesametimeasmanyreaders.Thismeansthatthedatabase/tablesupportsdifferentviewsforthedatadependingonwhenyoustartedtoaccessit.Othernamesforthisaretimetravel,copyonwrite,orcopyondemand.
按需復制在很多情況下比頁級鎖或行級鎖好多了。盡管如此,最壞情況時還是比其它正常鎖使用了更多的內存。
可以用應用程序級鎖來代替行級鎖,例如MySQL中的GET_LOCK()和RELEASE_LOCK()。但它們是勸告鎖(原文:Theseareadvisorylocks),因此只能用于安全可信的應用程序中。
到此,關于“MySQL鎖機制原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。