成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入探討MySQL鎖機制

數據庫 MySQL
MySQL中的表鎖相信大家都不會陌生,下文對MySQL鎖機制進行了深入的探討分析,如果您對此方面感興趣的話,不妨一看。

MySQL鎖機制究竟是怎樣的呢?這是很多人都提到過的問題,下面就為您詳細介紹MySQL鎖機制方面的知識,希望可以讓您MySQL鎖機制有更多的了解。

當前MySQL已經支持 ISAM, MyISAM, MEMORY (HEAP) 類型表的表級鎖了,BDB 表支持頁級鎖,InnoDB 表支持行級鎖。
很多時候,可以通過經驗來猜測什么樣的鎖對應用程序更合適,不過通常很難說一個鎖比別的更好,這全都要依據應用程序來決定,不同的地方可能需要不同的鎖。
想要決定是否需要采用一個支持行級鎖的存儲引擎,就要看看應用程序都要做什么,其中的查詢、更新語句是怎么用的。例如,很多的web應用程序大量的做查詢,很少刪除,主要是基于索引的更新,只往特定的表中插入記錄。采用基本的MySQL MyISAM 表就很合適了。
MySQL中對表級鎖的存儲引擎來說是釋放死鎖的。避免死鎖可以這樣做到:在任何查詢之前先請求鎖,并且按照請求的順序鎖表。
MySQL中用于 WRITE(寫)的表鎖的實現機制如下:
如果表沒有加鎖,那么就加一個寫鎖。
否則的話,將請求放到寫鎖隊列中。
MySQL中用于 READ(讀)的表鎖的實現機制如下:
如果表沒有加寫鎖,那么就加一個讀鎖。
否則的話,將請求放到讀鎖隊列中。
當鎖釋放后,寫鎖隊列中的線程可以用這個鎖資源,然后才輪到讀鎖隊列中的線程。
這就是說,如果表里有很多更新操作的話,那么 Select 必須等到所有的更新都完成了之后才能開始。
從 MySQL 3.23.33 開始,可以通過狀態變量 Table_locks_waited 和 Table_locks_immediate 來分析系統中的鎖表爭奪情況:
mysql> SHOW STATUS LIKE 'Table%';
+-----------------------+---------+
| Variable_name         | Value   |
+-----------------------+---------+
|Table_locks_immediate | 1151552 |
| Table_locks_waited    | 15324   |
+-----------------------+---------+

在 MySQL 3.23.7(在Windows上是3.23.25)以后,在 MyISAM 表中只要沒有沖突的 Insert 操作,就可以無需使用鎖表自由地并行執行 Insert 和 Select 語句。也就是說,可以在其它客戶端正在讀取 MyISAM 表記錄的同時時插入新記錄。如果數據文件的中間沒有空余的磁盤塊的話,就不會發生沖突了,因為這種情況下所有的新記錄都會寫在數據文件的末尾(當在表的中間做刪除或者更新操作時,就可能導致空洞)。當空洞被新數據填充后,并行插入特性就會自動重新被啟用了。
如果想要在一個表上做大量的 Insert 和 Select 操作,但是并行的插入卻不可能時,可以將記錄插入到臨時表中,然后定期將臨時表中的數據更新到實際的表里。可以用以下命令實現:
mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> Insert INTO real_table Select * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;
InnoDB 使用行級鎖,BDB 使用頁級鎖。對于 InnoDB 和 BDB 存儲引擎來說,是可能產生死鎖的。這是因為 InnoDB 會自動捕獲行鎖,BDB 會在執行 SQL 語句時捕獲頁鎖的,而不是在事務的開始就這么做。
行級鎖的優點有:
在很多線程請求不同記錄時減少沖突鎖。
事務回滾時減少改變數據。
使長時間對單獨的一行記錄加鎖成為可能。
行級鎖的缺點有:
比頁級鎖和表級鎖消耗更多的內存。
當在大量表中使用時,比頁級鎖和表級鎖更慢,因為他需要請求更多的所資源。
當需要頻繁對大部分數據做 GROUP BY 操作或者需要頻繁掃描整個表時,就明顯的比其它鎖更糟糕。
使用更高層的鎖的話,就能更方便的支持各種不同的類型應用程序,因為這種鎖的開銷比行級鎖小多了。
表級鎖在下列幾種情況下比頁級鎖和行級鎖更優越:
很多操作都是讀表。
在嚴格條件的索引上讀取和更新,當更新或者刪除可以用單獨的索引來讀取得到時:
Update tbl_name SET column=value Where unique_key_col=key_value;   
Delete FROM tbl_name Where unique_key_col=key_value;   
Select 和 Insert 語句并發的執行,但是只有很少的 Update 和 Delete 語句。
很多的掃描表和對全表的 GROUP BY 操作,但是沒有任何寫表。
表級鎖和行級鎖或頁級鎖之間的不同之處還在于:
將同時有一個寫和多個讀的地方做版本(例如在MySQL中的并發插入)。也就是說,數據庫/表支持根據開始訪問數據時間點的不同支持各種不同的試圖。其它名有:時間行程,寫復制,或者是按需復制。
原文: Versioning (such as we use in MySQL for concurrent inserts) where you can have one writer at the same time as many readers. This means that the database/table supports different views for the data depending on when you started to access it. Other names for this are time travel, copy on write, or copy on demand.
按需復制在很多情況下比頁級鎖或行級鎖好多了。盡管如此,最壞情況時還是比其它正常鎖使用了更多的內存。
可以用應用程序級鎖來代替行級鎖,例如MySQL中的 GET_LOCK() 和 RELEASE_LOCK()。但它們是勸告鎖(原文:These are advisory locks),因此只能用于安全可信的應用程序中。

 

 

 

【編輯推薦】

單表多字段MySQL模糊查詢的實現

帶您深入了解MySQL索引類型

MySQL外鍵和參照完整性的關系

MySQL定義外鍵的方法

詳解MySQL數據表類型

 

責任編輯:段燃 來源: 互聯網
相關推薦

2009-12-10 15:02:07

OSPF動態路由協議

2010-03-01 17:57:11

WCF緩存機制

2009-12-23 16:13:00

WPF Attache

2010-03-15 16:31:34

Java多線程

2009-11-20 17:17:08

Oracle函數索引

2021-05-17 05:36:02

CSS 文字動畫技巧

2010-07-21 09:38:15

PHP緩存技術

2021-08-12 15:45:23

Pythonimport模塊

2009-12-07 19:06:20

PHP mysql_f

2009-11-12 13:56:54

2009-12-07 16:07:03

PHP類的繼承

2009-12-14 14:40:10

Ruby全局域變量

2012-02-28 14:43:43

2024-01-26 06:42:05

Redis數據結構

2017-01-03 17:57:46

Android異步精髓Handler

2009-10-16 09:17:39

屏蔽布線系統

2009-12-07 13:55:58

PHP array_m

2013-07-11 09:45:48

扁平化扁平化設計

2009-12-11 11:08:31

靜態路由策略

2010-03-05 13:44:00

Python序列
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看中文字幕视频 | 日韩精品一区二区三区中文在线 | 精品亚洲一区二区三区 | 在线视频 欧美日韩 | 日韩在线视频免费观看 | 美女啪啪国产 | 精品国产欧美一区二区三区成人 | 成人久久久久久久久 | 成人久久久 | 精品久久久久久久久久久院品网 | 国产韩国精品一区二区三区 | 成人在线观看网址 | 午夜精品久久久久久不卡欧美一级 | 日日摸天天添天天添破 | 亚洲欧美在线视频 | 亚洲精品一区中文字幕乱码 | 国产精品波多野结衣 | 日韩欧美国产精品 | 日本黄色激情视频 | 国产999精品久久久久久绿帽 | 欧产日产国产精品99 | 中文字幕日韩欧美一区二区三区 | 夜夜摸夜夜操 | 欧美人人| 五月天婷婷久久 | 天天综合国产 | 久久这里有精品 | 中文字幕在线一区二区三区 | 中文字幕第十一页 | 99视频在线| 在线观看视频一区 | 97人澡人人添人人爽欧美 | 欧美一区二区三区视频 | 国产中文在线 | 成人在线免费电影 | 午夜电影网址 | 精品国产一区二区三区性色av | 日本在线观看视频 | 一区二区三区网站 | 欧美黄色片 | 日韩图区 |