搜尋
首頁資料庫mysql教程什麼是latch? latch與lock的差別

什麼是latch? latch與lock的差別

Jun 20, 2017 pm 03:05 PM
latchmysql詳解

Latch

什麼是latch:

#  鎖定是資料庫系統差異與檔案系統的關鍵特性。鎖機制用於管理對共享資源的並發存取。 Innodb儲存引擎在行級別上對錶資料上鎖,這固然不錯。但是Innodb也會在多個地方使用鎖,從而允許多種不同資源提供並發存取。例如,操作緩衝池匯總的LRU列表,刪除、新增、移動LRU列表中的元素,為了保證一致性,必須有鎖的介入,這就是latch鎖。

latchlock的區別

  latch一般稱為閂鎖(輕量級的鎖),因為其要求鎖定的時間必須非常短。若持續的時間長,則應用的效能會非常差。在Innodb儲存引擎中,latch又可以分成mutex(互斥量)和RW-Lock(讀寫鎖定)。

lock物件是事務,用來鎖定的是資料庫中的對象,如表格、行、頁。且一般lock的物件僅在交易commitrollback後進行釋放(不同事務隔離等級釋放的時間可能不同)。此外,lock,如同在大多數資料庫中一樣,是有死鎖機制的。

已同過show engine innodb mutex 檢視latch

 

name欄位顯示的是latch的資訊以及原始碼所在的位置(行數)。

latch的分類

#分為:mutex:互斥量;有時候有些資源需要共享和並發,但是又不是分頻繁,所以向操作系統申請一個mutexmutex都是排他的。

     RW-LATCH : 讀取寫入鎖定

latch的理解:

############ ###一個例子:############當我們在執行###select ###時,資料是快取在######buffer pool######中的,多個執行緒並發存取或修改這個資料必然需要一個並發控制機制,這個就是######latch######

資料庫要存取的資料必須先存在快取中,而快取一般比磁碟空間小,資料緩衝使用hash表來記錄資料頁是否在記憶體中。在MySQL中對應的RW-Latcherrlog#中說的很清楚,該RW-Latch是在buf0sea.cc#658#創建的RW-Latch

 

errorlog 的壓力測試範例:

 

#根據日誌我們可以分析到執行緒140140355766016要對記錄加一個x鎖,但等待執行緒 0x4c407b8線程的RW-Latch的釋放。

 

latch爭用流程

##1

a x存取鍊錶

#2

##b 排隊等待x解鎖 佔了cpu,但cpu發現你在等待,所以cpub踢出3

)鎖鏈的時間,就是找數據的時間。

4

b知道很a快所以,b不去排隊,這是後去spin 也就是空轉#cpu,然後再去看內存數據結構,a是否已解鎖5

b轉了一圈後,在bspin的時間段的時間中,c#進來了,連續多次的spin後,產生了os waits6

)作業系統將

b##從 cpu中踢出latch

鎖定特徵:

    1.
  • 不排隊

  • 2.spin
  • 3 .os waits
  • 4.cpu
  • 忙線

    ##mutex :

      記憶體結構 很小 資料庫從作業系統申請到的,不佔用buffer pool,完全排他

# mutex鎖定的持有過程: 

#  a執行緒持有想mutex記憶體資料結構中寫一個#1

    b執行緒看到記憶體資料結構有數字, 那麼就去spin

##確認##爭用類型:

(這就是在原始碼中的173語句)由errorlog 得到的

 

#latch爭用的過程

鍊錶上有一個鏈的保護機制latch,小記憶體結構,這時候有讀的線程a上來要讀取鏈,這個時候這個管理就變成r,讀鎖,當在鏈上找到資料的時候(),一找到就釋放讀鎖,b 上來也要讀取,這時候一看是r,讀鎖是可以共享的,她也是對鏈進行存取讀取的,c上來要修改鏈中的兩個區塊的內容,一看是rrw是互斥的,不能夠同時進行,要麼

1、主動要求退出cpu

2、空佔著cpu資源(執行一段空程式碼,loop,隔一段時間看看ab有沒有使用完#(spin),但是在這個過程中因為c沒有排隊等待,所以可能在等待的過程中又有其他的線程上來霸占鏈,如果執行多次仍這樣,可能就sleep,退出cpu了)為什麼空佔(害怕作業系統看她閒的把他強行拖走),等等(因為他知道ab佔用了資源時間比較短,就是遍歷一條鏈的時間非常短)。

latch爭用的現象:

1latch##爭用會表現為cpu繁忙

2latch爭用沒有排隊,等一段隨機的時間再回來看看

監控指標

----------

SEMAPHORES

##----------

SEMAPHORES

----------

OS WAIT ARRAY INFO: reservation count 2

OS WAIT ARRAY INFO: signal count 2

RW-shared spins 0, rounds 4, OS waits 2

RW-excl spins 0, rounds 0, OS waits 0RW-sx spins 0, rounds 0, OS waits 0

#### Spin rounds per wait: 4.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx######rounds###的意思是每次詢問旋轉的參數#######

os waits:表示sleep,當突然成長比較快的時候,說明latch爭用比較嚴重

rw-shared spin 的次數

##rw-excl  spin

的次數

爭用發生的原因

1

、記憶體存取太頻繁(不停地找)

2

list鏈太長(鏈上掛#10000個快,被持有的幾率太大)

所以有時候會增加instance的數量,把大pool#切成小的##pool# #,讓list鏈變的短一些

#如何降低latch爭用:

如果出現latch爭用比較嚴重

1.優化sql#,降低記憶體讀取的數量效果比較明顯

#2.增加instances的數量

如何準確地發現解決

latch

1.show engine Innodb mutex

2 .查看什麼類型的latch

#3.定位

## ##

以上是什麼是latch? latch與lock的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL與PostgreSQL有何不同?MySQL與PostgreSQL有何不同?Apr 29, 2025 am 12:23 AM

MySQLisbetterforspeedandsimplicity,suitableforwebapplications;PostgreSQLexcelsincomplexdatascenarioswithrobustfeatures.MySQLisidealforquickprojectsandread-heavytasks,whilePostgreSQLispreferredforapplicationsrequiringstrictdataintegrityandadvancedSQLf

MySQL如何處理數據複製?MySQL如何處理數據複製?Apr 28, 2025 am 12:25 AM

MySQL通過異步、半同步和組複製三種模式處理數據複製。 1)異步複製性能高但可能丟失數據。 2)半同步複製提高數據安全性但增加延遲。 3)組複製支持多主複製和故障轉移,適用於高可用性需求。

您如何使用解釋性語句分析查詢性能?您如何使用解釋性語句分析查詢性能?Apr 28, 2025 am 12:24 AM

EXPLAIN語句可用於分析和提升SQL查詢性能。 1.執行EXPLAIN語句查看查詢計劃。 2.分析輸出結果,關注訪問類型、索引使用情況和JOIN順序。 3.根據分析結果,創建或調整索引,優化JOIN操作,避免全表掃描,以提升查詢效率。

您如何備份並還原MySQL數據庫?您如何備份並還原MySQL數據庫?Apr 28, 2025 am 12:23 AM

使用mysqldump進行邏輯備份和MySQLEnterpriseBackup進行熱備份是備份MySQL數據庫的有效方法。 1.使用mysqldump備份數據庫:mysqldump-uroot-pmydatabase>mydatabase_backup.sql。 2.使用MySQLEnterpriseBackup進行熱備份:mysqlbackup--user=root--password=password--backup-dir=/path/to/backupbackup。恢復時,使用相應的命

MySQL中慢速查詢的常見原因是什麼?MySQL中慢速查詢的常見原因是什麼?Apr 28, 2025 am 12:18 AM

MySQL慢查詢的主要原因包括索引缺失或不當使用、查詢複雜度、數據量過大和硬件資源不足。優化建議包括:1.創建合適的索引;2.優化查詢語句;3.使用分錶分區技術;4.適當升級硬件。

MySQL中有什麼看法?MySQL中有什麼看法?Apr 28, 2025 am 12:04 AM

MySQL視圖是基於SQL查詢結果的虛擬表,不存儲數據。 1)視圖簡化複雜查詢,2)增強數據安全性,3)維護數據一致性。視圖是數據庫中的存儲查詢,可像表一樣使用,但數據動態生成。

MySQL和其他SQL方言之間的語法有什麼區別?MySQL和其他SQL方言之間的語法有什麼區別?Apr 27, 2025 am 12:26 AM

mysqldiffersfromothersqldialectsinsyntaxforlimit,自動啟動,弦樂範圍,子征服和表面上分析。 1)MySqluessLipslimit,whilesqlserverusestopopandoraclesrontersrontsrontsrontsronnum.2)

什麼是mysql分區?什麼是mysql分區?Apr 27, 2025 am 12:23 AM

MySQL分區能提升性能和簡化維護。 1)通過按特定標準(如日期範圍)將大表分成小塊,2)物理上將數據分成獨立文件,3)查詢時MySQL可專注於相關分區,4)查詢優化器可跳過不相關分區,5)選擇合適的分區策略並定期維護是關鍵。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。