91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL鎖機制原理是什么

發布時間:2021-08-09 14:25:34 來源:億速云 閱讀:140 作者:chen 欄目:數據庫

這篇文章主要介紹“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鎖機制原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝城县| 丹巴县| 玉山县| 大连市| 南涧| 嘉义市| 庆安县| 兰西县| 萨嘎县| 武隆县| 怀远县| 新疆| 凉山| 泰和县| 博客| 平潭县| 海晏县| 通河县| 平武县| 昌黎县| 南投县| 文化| 潞城市| 修水县| 稻城县| 勐海县| 榕江县| 济南市| 青铜峡市| 哈巴河县| 海淀区| 牟定县| 青岛市| 清河县| 房产| 平塘县| 龙井市| 永修县| 静宁县| 安远县| 米脂县|