壓測遇到資料庫死鎖

2021-10-06 03:26:38 字數 859 閱讀 2572

分析步驟:

現象還原:

1.檢視redis死鎖日誌:show engine innodb status

2.分析死鎖日誌

3.看壓測吞吐是否過大

遇到的現象:壓測吞吐放的很小還是會出現死鎖現象,死鎖導致原因是行級鎖,壓測指令碼是設定計數器資料遞增到一定量開始重頭開始遞增資料,比如1-1000遞增後又開始從1遞增。這個時候如果服務乙個執行緒在處理key 2,第二輪遞增開始了,又有乙個執行緒在處理key 2.。那麼會出現兩個執行緒同時處理乙個資料庫key,其中乙個已經持有鎖了,所以另乙個只能等待

就會出現

判斷是表鎖還是行級鎖的方法:

把壓測資料設定不重複從頭遞增,讓一直遞增一定數量,不重複,如果業務那好出現死鎖那就是表鎖,如果沒出現死鎖那說明就是行鎖

表鎖和行鎖的區別:

表鎖指的是事務訪問鎖住了整張表,那麼其他請求進來都會出現死鎖訪問不了 表

行鎖指是乙個事務訪問鎖住了這一行,也就是這一行的key,那麼其他請求訪問這個key就會出現死鎖

這次壓測中最後測試是行鎖,也就是執行緒同時操作同乙個key產生的,但是生產上不會出現同時對乙個key進行操作的情況,而且對於我們現有業務壓測造成死鎖到 死鎖釋放時間很短,不會對壓測效能結果造成太大影響,所以在我們這個業務壓測場景下我們選擇了忽略這個死鎖現象

注:insert,updata,delete在壓測指令碼會出現重複資料時,並且服務多執行緒處理,那麼就會出現死鎖的現象,比如執行緒1在insert   key1,執行緒2在delete key1,那麼執行緒1占有鎖還沒釋放,執行緒2delete鎖就會出現死鎖現象,但就我們的業務來說不會在新增冰箱的同時刪除冰箱

資料庫死鎖

1.死鎖的概念 死鎖是程序死鎖的簡稱,是由dijkstra於1965年研究銀行家演算法時首先提出來的。它是計算機作業系統乃至併發程式設計中最難處理的問題之一。實際上,死鎖問題不僅在計算機系統中存在,在我們日常生活中它也廣泛存在。我們先看看這樣乙個生活中的例子 在一條河上有一座橋,橋面較窄,只能容納一...

資料庫死鎖

資料庫在進行insert,update,delete這些更新操作的時候為了保證資料一致性都會使用排他鎖。乙個事務裡進行update操作,在事務結束之前 commit or rollback 排他鎖不會被釋放。因此在乙個事務裡update多條資料的時候執行順序就尤為重要,兩個併發事務中更新操作的執行順...

資料庫死鎖

死鎖 所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序 由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的...