偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

BDB 表支持頁(yè)級(jí)鎖,InnoDB 表支持行級(jí)鎖

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

鎖機(jī)制

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

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

MySQL中對(duì)表級(jí)鎖的存儲(chǔ)引擎來(lái)說(shuō)是釋放死鎖的。避免死鎖可以這樣做到:在任何查詢之前先請(qǐng)求鎖,并且按照請(qǐng)求的順序鎖表。

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

如果表沒(méi)有加鎖,那么就加一個(gè)寫(xiě)鎖。

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

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

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

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

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

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

從 MySQL 3.23.33 開(kāi)始,可以通過(guò)狀態(tài)變量 Table_locks_waited 和 Table_locks_immediate 來(lái)分析系統(tǒng)中的鎖表爭(zhē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 表中只要沒(méi)有沖突的 INSERT 操作,就可以無(wú)需使用MySQL鎖表自由地并行執(zhí)行 INSERT 和 SELECT 語(yǔ)句。

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

如果想要在一個(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語(yǔ)句中的extended 選項(xiàng)介紹
  4. MySQL SHOW INDEX語(yǔ)法的實(shí)際應(yīng)用
  5. MySQL 備份和其恢復(fù)機(jī)制原理簡(jiǎn)述
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(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ù)庫(kù)InnoDB

2024-11-29 07:38:12

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

2020-01-16 14:59:32

Java鎖優(yōu)化CAS

2010-06-13 14:39:47

MySQL SQL

2019-08-14 15:08:51

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

2019-11-11 15:33:34

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

2017-05-16 08:59:16

MVCCMYSQL樂(lè)觀鎖

2010-10-08 16:20:35

MySQL語(yǔ)句

2022-07-04 08:01:01

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

2024-12-16 00:52:26

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

2022-03-11 09:12:06

MySQLMDL

2021-03-29 09:00:00

Kubernetes容器工具

2023-08-21 19:10:34

Redis分布式

2023-12-06 07:33:20

MySQL鎖事間隙鎖

2010-05-26 14:06:44

MySQL查詢

2010-05-20 13:22:32

2024-07-29 09:57:47

2022-10-21 09:01:33

小組件iOS
點(diǎn)贊
收藏

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