91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql autocommit=0引起的業務hang住問題分析

發布時間:2021-11-18 15:45:35 來源:億速云 閱讀:300 作者:iii 欄目:MySQL數據庫

這篇文章主要講解了“mysql autocommit=0引起的業務hang住問題分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql autocommit=0引起的業務hang住問題分析”吧!

背景

有用戶報告一個普通的select 語句被hang住了,執行超時。查明之后發現是autocommit使用不當導致。
這里將case簡化,說明復現步驟及原因。

復現

session1 建表并插入數據:

create table if not exists t(id int primary key, c int);
set autocommit=0;
insert into t values(1,1);
insert into t values(2,2);
insert into t values(3,3);
commit;
select count(*) from t;

這個執行流程的目的很直觀,建表、插入數據、查詢結果。貌似沒有問題。

維持session1不斷,新建一個連接session2,執行 create table if not exists t(id int primary key, c int);
此時該語句處于等待狀態.

再新建一個連接session3, 執行select count(*) from t; 該語句處于等待狀態.

于是從業務上看就是一個select 語句被hang住。

原因分析

MySQL Tips:  如果服務中某些語句無法執行完成,追查問題時第一步要先保留現場,pstack <pid of mysqld> > tmplog之一個常用的方法。
這兩個等待線程的棧如:
#0  0x000000310ce0b7bb in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x000000000063ba46 in MDL_wait::timed_wait(THD*, timespec*, bool, char const*) ()
#2  0x000000000063e095 in MDL_context::acquire_lock(MDL_request*, unsigned long) ()

可以看到,堵在MDL_wait.

簡單說明下什么是MDL。試想,如果一個語句在執行一個表上的查詢過程中,表結構被改了,或者表被drop,這樣會得到一個錯誤的結果。因此在一個事務持續期間,就需要對訪問的表結構作保護。這個就是meta data lock (MDL).
很容易理解的,對表數據作增刪改查,需要對MDL加讀鎖,修改表結構、刪除表等操作則加寫鎖。
MySQL Tips: MDL是5.5才加入的機制,5.1版本下本文的case不會復現。 MySQL Tips: 事務中MDL申請時機是在首次使用時,釋放時機是在事務結束后。
也就是說文章開頭的這個case,原因是session2等待在加寫鎖過程。而session3雖然只是加讀鎖,但與session2沖突,也需要等待。

session1的事務

也就是說session1還持有表t的MDL讀鎖。但我們的事務明明已經提交(commit)了。這里就涉及到一個常見的誤解。以前有看過文章說,可以用set autocommit=0開啟一個事務。其實這個描述不準確.
MySQL Tips: set autocommit=0是將本線程設置為非自動提交模式。在每個事務結束后,下個語句開始時自動新建一個事務。
這就意味著,session1最后的那個select count(*)操作,實際上之前隱含了一個begin操作。由于該事務沒有提交,因此session1持有表t的MDL讀鎖。

因此對于業務方的建議就是,及時提交這些讀事務,或斷開連接。
MySQL Tips: 連接斷開時,MySQL會自動回滾當前未提交的事務。 由于本case里面session1的最后一個事務只是一個select語句,因此回滾不影響業務。

感謝各位的閱讀,以上就是“mysql autocommit=0引起的業務hang住問題分析”的內容了,經過本文的學習后,相信大家對mysql autocommit=0引起的業務hang住問題分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐石市| 名山县| 孟连| 双辽市| 楚雄市| 根河市| 开平市| 政和县| 河池市| 青海省| 舟山市| 涿鹿县| 铁力市| 阳泉市| 米林县| 西峡县| 承德市| 宜宾市| 南京市| 永靖县| 南平市| 甘德县| 宁波市| 伽师县| 柘城县| 波密县| 象山县| 将乐县| 正宁县| 秦皇岛市| 普定县| 镇坪县| 交口县| 平昌县| 南投县| 九龙城区| 常德市| 马关县| 沐川县| 绵阳市| 泰和县|