自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何實(shí)現(xiàn)MySQL鎖的優(yōu)化

數(shù)據(jù)庫 MySQL
今天主要向大家描述的是MySQL鎖的實(shí)際優(yōu)化過程,假如你對MySQL鎖的實(shí)際優(yōu)化的實(shí)際操作感興趣的話,你就可以瀏覽以下的文章了。

以下的文章主要介紹的是MySQL鎖的實(shí)際優(yōu)化過程,以下就是MySQL鎖的優(yōu)化的具體方案的描述,希望在你今后的學(xué)習(xí)中會有所幫助。我們大家都知道當(dāng)前MySQL已經(jīng)支持 ISAM, MyISAM, MEMORY (HEAP) 類型表的表級鎖了。

BDB 表支持頁級鎖,InnoDB 表支持行級鎖

很多時(shí)候,可以通過經(jīng)驗(yàn)來猜測什么樣的鎖對應(yīng)用程序更合適,不過通常很難說一個(gè)MySQL鎖比別的更好,這全都要依據(jù)應(yīng)用程序來決定,不同的地方可能需要不同的鎖。

鎖機(jī)制

當(dāng)前MySQL已經(jīng)支持 ISAM, MyISAM, MEMORY (HEAP) 類型表的表級鎖了,BDB 表支持頁級鎖,InnoDB 表支持行級鎖。很多時(shí)候,可以通過經(jīng)驗(yàn)來猜測什么樣的鎖對應(yīng)用程序更合適,不過通常很難說一個(gè)鎖比別的更好,這全都要依據(jù)應(yīng)用程序來決定,不同的地方可能需要不同的鎖。

想要決定是否需要采用一個(gè)支持行級鎖的存儲引擎,就要看看應(yīng)用程序都要做什么,其中的查詢、更新語句是怎么用的。例如,很多的web應(yīng)用程序大量的做查詢,很少刪除,主要是基于索引的更新,只往特定的表中插入記錄。采用基本的MySQL MyISAM 表就很合適了。

MySQL中對表級鎖的存儲引擎來說是釋放死鎖的。避免死鎖可以這樣做到:在任何查詢之前先請求鎖,并且按照請求的順序鎖表。

MySQL中用于 WRITE(寫) 的表鎖的實(shí)現(xiàn)機(jī)制如下:

如果表沒有加鎖,那么就加一個(gè)寫鎖。

否則的話,將請求放到寫鎖隊(duì)列中。

MySQL中用于 READ(讀) 的表鎖的實(shí)現(xiàn)機(jī)制如下:

如果表沒有加寫鎖,那么就加一個(gè)讀MySQL鎖。

否則的話,將請求放到讀鎖隊(duì)列中。

當(dāng)鎖釋放后,寫鎖隊(duì)列中的線程可以用這個(gè)鎖資源,然后才輪到讀鎖隊(duì)列中的線程。

這就是說,如果表里有很多更新操作的話,那么 SELECT 必須等到所有的更新都完成了之后才能開始。

從 MySQL 3.23.33 開始,可以通過狀態(tài)變量 Table_locks_waited 和 Table_locks_immediate 來分析系統(tǒng)中的鎖表爭奪情況:

  1. mysql> SHOW STATUS LIKE 'Table%';   
  2. +-----------------------+---------+   
  3. | Variable_name | Value |   
  4. +-----------------------+---------+   
  5. | Table_locks_immediate | 1151552 |   
  6. | Table_locks_waited | 15324 |   
  7. +-----------------------+---------+  

在 MySQL 3.23.7(在Windows上是3.23.25)以后,在 MyISAM 表中只要沒有沖突的 INSERT 操作,就可以無需使用MySQL鎖表自由地并行執(zhí)行 INSERT 和 SELECT 語句。

也就是說,可以在其它客戶端正在讀取 MyISAM 表記錄的同時(shí)時(shí)插入新記錄。如果數(shù)據(jù)文件的中間沒有空余的磁盤塊的話,就不會發(fā)生沖突了,因?yàn)檫@種情況下所有的新記錄都會寫在數(shù)據(jù)文件的末尾(當(dāng)在表的中間做刪除或者更新操作時(shí),就可能導(dǎo)致空洞)。當(dāng)空洞被新數(shù)據(jù)填充后,并行插入特性就會自動重新被啟用了。

如果想要在一個(gè)表上做大量的 INSERT 和 SELECT 操作,但是并行的插入?yún)s不可能時(shí),可以將記錄插入到臨時(shí)表中,然后定期將臨時(shí)表中的數(shù)據(jù)更新到實(shí)際的表里??梢杂靡韵旅顚?shí)現(xiàn):

 【編輯推薦】

  1. MySQL字符串值的實(shí)際應(yīng)用
  2. 用MySQL 數(shù)字類型如何正確的轉(zhuǎn)換函數(shù)
  3. MySQL EXPLAIN語句中的extended 選項(xiàng)介紹
  4. MySQL SHOW INDEX語法的實(shí)際應(yīng)用
  5. MySQL 備份和其恢復(fù)機(jī)制原理簡述
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-05-26 16:09:09

MySQL Repli

2021-02-22 17:18:35

MySQLSQL行鎖

2019-10-17 09:26:05

MySQL數(shù)據(jù)庫InnoDB

2024-11-29 07:38:12

MySQL數(shù)據(jù)庫

2019-11-11 15:33:34

高并發(fā)緩存數(shù)據(jù)

2019-08-14 15:08:51

緩存存儲數(shù)據(jù)

2020-01-16 14:59:32

Java鎖優(yōu)化CAS

2010-06-13 14:39:47

MySQL SQL

2017-05-16 08:59:16

MVCCMYSQL樂觀鎖

2010-10-08 16:20:35

MySQL語句

2021-03-29 09:00:00

Kubernetes容器工具

2023-08-21 19:10:34

Redis分布式

2022-07-04 08:01:01

鎖優(yōu)化Java虛擬機(jī)

2022-03-11 09:12:06

MySQLMDL

2024-12-16 00:52:26

MySQL數(shù)據(jù)庫并發(fā)

2022-10-21 09:01:33

小組件iOS

2010-05-26 14:06:44

MySQL查詢

2010-05-20 13:22:32

2025-03-27 04:00:00

2024-07-29 09:57:47

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號