中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

技本功丨一個鎖等待現象的診斷案例-創(chuàng)新互聯(lián)

技本功丨一個鎖等待現象的診斷案例

創(chuàng)新互聯(lián)建站是一家專注于成都網站建設、做網站與策劃設計,南昌網站建設哪家好?創(chuàng)新互聯(lián)建站做網站,專注于網站建設十余年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:南昌等地區(qū)。南昌做網站價格咨詢:18982081108

作者:蘇坡

袋鼠云云服務部-DBA團隊

數據庫工程師

前兩日與一個客戶交流,

客戶提出了一些

對mysql隔離級別以及鎖的疑問,

然后問到了出現鎖等待現象的排查思路。

這不禁讓我回想起

long long ago,

做過的一個診斷案例。

當年我還不是一枚老司機,

折騰了兩三天才完全搞定,

現在回想還頗有些借鑒價值,

故,分享之~

技本功丨一個鎖等待現象的診斷案例

1問題描述

數據庫實例:主庫XXXX:3306 

問題詳情:客戶反映,涉及到user_site表相關的程序回調操作很慢,部分操作會超時報錯;

下單操作很慢甚至直接報錯失敗

程序端報錯信息如下:

General error: 1205 Lock wait timeout exceeded; try restarting transaction"

2分  析

這是個典型的鎖等待超時退出的報錯,原因可能是某些事務未及時提交導致鎖資源不被釋放導致。

1、慢SQL分析

思路:通過rds控制臺查看最近一段時間的慢SQL,看是否出現user_site表相關的DML或者select鎖定讀操作。 

查看慢SQL方式見下圖

技本功丨一個鎖等待現象的診斷案例

很可惜,并沒有找到相關的慢SQL,那么就代表SQL執(zhí)行都很快,事務的處理上出現了問題,因此,我們更相信是某些程序沒有及時提交事務導致的了。

不過,還是有些收獲的,我們發(fā)現一些潛在的問題,就是top前幾的慢SQL。都是非鎖定select,因此和本次現象無關,但是這幾個查詢操作最長需要近百秒,十分消耗CPU以及內存資源,需要優(yōu)化。

2、事務阻塞分析

思路:通過一個腳本,定期采集出現阻塞的事務信息,只要再次進行相關操作,阻塞事件的參與事務信息便被計入日志,可對其進行詳細分析。 

采集腳本如下:

技本功丨一個鎖等待現象的診斷案例

大約半小時后,日志中抓取到相關的信息

通過分析日志,我們發(fā)現每隔一段時間會出現較為嚴重的連環(huán)鎖等待現象,主要是以下兩種情況:

技本功丨一個鎖等待現象的診斷案例

技本功丨一個鎖等待現象的診斷案例

解釋下上面的日志輸出:

waiting_trx_id: 被阻塞的事務ID

waiting_thread:被阻塞的mysql線程ID

waiting_query:被阻塞的SQL語句

blocking_trx_id: 阻塞者的事務ID

blocking_thread: 阻塞者的mysql線程ID

blocking_query: 阻塞者的SQL語句

我們發(fā)現,阻塞者總是處于非活躍狀態(tài),而后的相繼操作會進入一個等待隊列。之所以會發(fā)生阻塞,就是這個空事務持有著被阻塞事務所需要的鎖資源,也就是說,以鎖定的方式,訪問到了相同的記錄。

參考前面的慢SQL分析結果,進一步推論,事務內部的SQL執(zhí)行應該是較快的,那么程序可能處理完SQL之后沒有進行提交操作。

定位程序

與客戶開發(fā)同學后溝通后,對該場景進行重現。實時輸出日志,得到阻塞者的線程ID,通過information_schema.processlist視圖查詢出訪問mysql數據庫的程序。

客戶開發(fā)同學仔細排查代碼,很可惜也并沒有發(fā)現未提交事務的代碼。那么問題就可能出現在程序自身,是程序處理慢,而并非SQL。提交事務之前,程序極有可能經過一個緩慢的處理過程,至于處理什么,需要下一步做進一步的驗證。

接下來,對上面的推論做驗證~

3、SQL審計分析

思路:想要找到是哪塊代碼的問題,盲目的找無疑是大海撈針,所幸的是,RDS提供SQL審計功能,只要找到事務提交之前的SQL操作,這個問題的定位就應該清晰明了了。

通過前面排查的線程ID,搜索相關的SQL審計記錄。SQL審計可以通過下圖方式查看。 

技本功丨一個鎖等待現象的診斷案例

點擊數據庫安全→SQL審計。輸入篩選條件:database name,程序訪問數據庫的用戶名,關鍵字輸入線程ID,并選擇有效的時間范圍。

這次,終于有些收獲了,并且應該可以對本次現象做出合理的解釋了。以下是可疑的數據庫操作 

技本功丨一個鎖等待現象的診斷案例

技本功丨一個鎖等待現象的診斷案例

  我們發(fā)現,事務開啟后,立即進行了幾個SQL操作,而這幾個SQL都沒有被計入慢日志,因此SQL執(zhí)行很快(2S以內),從前面的日志輸出我們也能看出,SQL執(zhí)行是瞬間完成的,因為我們根本抓取不到事務的SQL語句。

而事務的提交操作卻發(fā)生在十幾分鐘之后,那么現在的疑問就是解決問題的關鍵了。長達十幾分鐘的事務,而SQL執(zhí)行總共不到2S,那么其余的時間程序在干什么?

有了針對性的目的后,該客戶開發(fā)同學馬上定位到程序并找到了問題所在,在提交之前,程序會去進行插入隊列和刪除緩存的操作,而這些操作,占用的都是事務的持有鎖且非活動時間。

屆此,該問題的分析過程全部結束,出現問題的原因就在于事務內部的非數據庫操作 。

3處理方案

根因分析

事務內部進行的不只是數據庫操作,程序進行的插入隊列以及刪除緩存操作,讓一個2S之內完成的事務,延長至十幾分鐘;也就意味著,這十幾分鐘內,凡是請求事務內部鎖資源的SQL操作,必須進入鎖等待狀態(tài)。

處理建議

1.事務內部只進行SQL操作,程序的處理一律放在事務提交之后或開始之前。

2.如果存在邏輯問題不可修改,可為相關處理過程設計處理隊列,拋出指令即可,而不用等待這個過程處理完畢再提交事務。

當前文章:技本功丨一個鎖等待現象的診斷案例-創(chuàng)新互聯(lián)
URL分享:http://www.rwnh.cn/article0/dhphio.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、網站導航網站改版、用戶體驗、標簽優(yōu)化云服務器

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設
临漳县| 锡林郭勒盟| 白银市| 青阳县| 马边| 汨罗市| 满洲里市| 沧州市| 宝清县| 龙山县| 钟祥市| 田林县| 会泽县| 白玉县| 姜堰市| 夹江县| 德庆县| 杂多县| 宜川县| 腾冲县| 灵丘县| 宁国市| 彩票| 浮梁县| 迭部县| 湘阴县| 小金县| 临城县| 白玉县| 宕昌县| 苍山县| 山丹县| 昌宁县| 教育| 兰坪| 东阿县| 青冈县| 天水市| 永城市| 防城港市| 扎鲁特旗|