Latch
什麼是latch:
# 鎖定是資料庫系統差異與檔案系統的關鍵特性。鎖機制用於管理對共享資源的並發存取。 Innodb儲存引擎在行級別上對錶資料上鎖,這固然不錯。但是Innodb也會在多個地方使用鎖,從而允許多種不同資源提供並發存取。例如,操作緩衝池匯總的LRU列表,刪除、新增、移動LRU列表中的元素,為了保證一致性,必須有鎖的介入,這就是latch鎖。
latch與lock的區別
latch一般稱為閂鎖(輕量級的鎖),因為其要求鎖定的時間必須非常短。若持續的時間長,則應用的效能會非常差。在Innodb儲存引擎中,latch又可以分成mutex(互斥量)和RW-Lock(讀寫鎖定)。
而lock物件是事務,用來鎖定的是資料庫中的對象,如表格、行、頁。且一般lock的物件僅在交易commit或rollback後進行釋放(不同事務隔離等級釋放的時間可能不同)。此外,lock,如同在大多數資料庫中一樣,是有死鎖機制的。
已同過show engine innodb mutex 檢視latch
name欄位顯示的是latch的資訊以及原始碼所在的位置(行數)。
latch的分類
#分為:mutex:互斥量;有時候有些資源需要共享和並發,但是又不是分頻繁,所以向操作系統申請一個mutex,mutex都是排他的。
RW-LATCH : 讀取寫入鎖定
latch的理解:
############ ###一個例子:############當我們在執行###select ###時,資料是快取在######buffer pool######中的,多個執行緒並發存取或修改這個資料必然需要一個並發控制機制,這個就是######latch######
資料庫要存取的資料必須先存在快取中,而快取一般比磁碟空間小,資料緩衝使用hash表來記錄資料頁是否在記憶體中。在MySQL中對應的RW-Latch在errlog#中說的很清楚,該RW-Latch是在buf0sea.cc的#658#創建的RW-Latch。
看errorlog 的壓力測試範例:
#根據日誌我們可以分析到執行緒140140355766016要對記錄加一個x鎖,但等待執行緒 0x4c407b8線程的RW-Latch的釋放。
latch爭用流程
##1)a 以x存取鍊錶
#2)##b 排隊等待x解鎖 佔了cpu,但cpu發現你在等待,所以cpu將b踢出3
)鎖鏈的時間,就是找數據的時間。4
)b知道很a快所以,b不去排隊,這是後去spin 也就是空轉#cpu,然後再去看內存數據結構,a是否已解鎖5
)b轉了一圈後,在bspin的時間段的時間中,c#進來了,連續多次的spin後,產生了os waits6
)作業系統將b##從 cpu中踢出latch
鎖定特徵:
- 1.
- 不排隊
- 忙線
##mutex :
記憶體結構 很小 資料庫從作業系統申請到的,不佔用buffer pool,完全排他
# mutex鎖定的持有過程:
# a執行緒持有想mutex記憶體資料結構中寫一個#1
b執行緒看到記憶體資料結構有數字, 那麼就去spin
##確認##爭用類型:
(這就是在原始碼中的173語句)由errorlog 得到的
#latch爭用的過程
鍊錶上有一個鏈的保護機制latch,小記憶體結構,這時候有讀的線程a上來要讀取鏈,這個時候這個管理就變成r,讀鎖,當在鏈上找到資料的時候(讀),一找到就釋放讀鎖,b 上來也要讀取,這時候一看是r,讀鎖是可以共享的,她也是對鏈進行存取讀取的,c上來要修改鏈中的兩個區塊的內容,一看是r,r和w是互斥的,不能夠同時進行,要麼
1、主動要求退出cpu
2、空佔著cpu資源(執行一段空程式碼,loop,隔一段時間看看a和b有沒有使用完#(spin),但是在這個過程中因為c沒有排隊等待,所以可能在等待的過程中又有其他的線程上來霸占鏈,如果執行多次仍這樣,可能就sleep,退出cpu了)為什麼空佔(害怕作業系統看她閒的把他強行拖走),等等(因為他知道a和b佔用了資源時間比較短,就是遍歷一條鏈的時間非常短)。
latch爭用的現象:
1、latch##爭用會表現為cpu繁忙
2、latch爭用沒有排隊,等一段隨機的時間再回來看看
監控指標
----------
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的數量
如何準確地發現解決
latch1.show engine Innodb mutex
2 .查看什麼類型的latch
#3.定位
## ##以上是什麼是latch? latch與lock的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQLisbetterforspeedandsimplicity,suitableforwebapplications;PostgreSQLexcelsincomplexdatascenarioswithrobustfeatures.MySQLisidealforquickprojectsandread-heavytasks,whilePostgreSQLispreferredforapplicationsrequiringstrictdataintegrityandadvancedSQLf

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

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

Dreamweaver Mac版
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

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