Mysql事物阻塞的實(shí)現(xiàn)
阻塞因?yàn)椴煌i之間的兼容性關(guān)系,在有些時(shí)刻一個(gè)事務(wù)中的鎖需要等待另一個(gè)事務(wù)中的鎖釋放它所占用的資源,這就是阻塞。
阻塞并不是一件壞事,其是為了確保事務(wù)可以并發(fā)且正常地運(yùn)行。在InnoDB存儲(chǔ)引擎中,參數(shù)innodb_lock_wait_timeout用來(lái)控制等待的時(shí)間(默認(rèn)是50秒),innodb_rollback_on_timeout用來(lái)設(shè)定是否在等待超時(shí)時(shí)對(duì)進(jìn)行中的事務(wù)進(jìn)行回滾操作(默認(rèn)是OFF,代表不回滾)。參數(shù)innodb_lock_wait_timeout是動(dòng)態(tài)的,可以在MySQL數(shù)據(jù)庫(kù)運(yùn)行時(shí)進(jìn)行調(diào)整而innodb_rollback_on_timeout是靜態(tài)的,不可在啟動(dòng)時(shí)進(jìn)行修改,當(dāng)發(fā)生超時(shí),MySQL數(shù)據(jù)庫(kù)會(huì)拋出一個(gè)1205的錯(cuò)誤,需要牢記的是,在默認(rèn)情況下InnoDB存儲(chǔ)引擎不會(huì)回滾超時(shí)引發(fā)的錯(cuò)誤異常。其實(shí)InnoDB存儲(chǔ)引擎在大部分情況下都不會(huì)對(duì)異常進(jìn)行回滾。
1、查看現(xiàn)有事物(鎖),批量生成 kill 命令
select CONCAT('kill ', trx_mysql_thread_id, ';') as kill_command, a.* from information_schema.innodb_trx as a -- where trx_query is null
2、查看指定數(shù)據(jù)庫(kù)的線程,及其對(duì)應(yīng)的事物(鎖),批量生成 kill 命令
select CONCAT('kill ', trx_mysql_thread_id, ';') as kill_command, a.*, b.* from information_schema.processlist as a left join information_schema.innodb_trx as b -- join information_schema.innodb_trx as b on a.id = b.trx_mysql_thread_id where a.db = 'my_db' -- and b.trx_query is null
3、查看事務(wù)超時(shí)時(shí)間
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
lock_wait_timeout 是一個(gè)服務(wù)器級(jí)別的參數(shù),它用于設(shè)置所有連接在等待行級(jí)鎖或表級(jí)鎖時(shí)可以等待的最大時(shí)間。當(dāng)連接等待的時(shí)間超過(guò)了 lock_wait_timeout 的值時(shí),MySQL 將拋出一個(gè)錯(cuò)誤,并終止連接。默認(rèn)值為 31536000 秒(即一年)。
innodb_lock_wait_timeout 是一個(gè)存儲(chǔ)引擎級(jí)別的參數(shù),它僅用于設(shè)置使用 InnoDB 存儲(chǔ)引擎的連接在等待行級(jí)鎖或表級(jí)鎖時(shí)可以等待的最大時(shí)間。當(dāng)連接等待的時(shí)間超過(guò)了 innodb_lock_wait_timeout 的值時(shí),InnoDB 將拋出一個(gè)錯(cuò)誤,并終止連接。默認(rèn)值為 50 秒。
建議將 innodb_lock_wait_timeout 的值設(shè)置得比較小,因?yàn)檫@可以有效避免因等待鎖而導(dǎo)致的超時(shí)問(wèn)題。但是,也要注意不要設(shè)置得過(guò)小,以免在高并發(fā)的情況下出現(xiàn)頻繁的超時(shí)錯(cuò)誤。
到此這篇關(guān)于Mysql事物阻塞的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql事物阻塞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CMD命令操作MySql數(shù)據(jù)庫(kù)的方法詳解
今天小編就為大家分享一篇關(guān)于CMD命令操作MySql數(shù)據(jù)庫(kù)的方法詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02mysql二進(jìn)制日志文件恢復(fù)數(shù)據(jù)庫(kù)
喜歡的在服務(wù)器或者數(shù)據(jù)庫(kù)上直接操作的兄弟們你值得收藏下!不然你就悲劇了。-----(當(dāng)然我也是在網(wǎng)上搜索的資料!不過(guò)自己測(cè)試通過(guò)了的!)2014-08-08mysql?WITH?RECURSIVE語(yǔ)法的具體使用
WITH RECURSIVE是一個(gè)用于創(chuàng)建遞歸查詢的語(yǔ)句,本文主要介紹了mysql?WITH?RECURSIVE語(yǔ)法的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07SQL中CAST()實(shí)例之轉(zhuǎn)換數(shù)據(jù)類型
CAST函數(shù)用于將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于SQL中CAST()實(shí)例之轉(zhuǎn)換數(shù)據(jù)類型的相關(guān)資料,需要的朋友可以參考下2023-01-01Mysql啟動(dòng)報(bào)ERROR:2002的分析與解決
這篇文章主要給大家介紹了關(guān)于Mysql啟動(dòng)時(shí)報(bào)ERROR:2002問(wèn)題的分析與解決方法,文中通過(guò)示例代碼介紹將該問(wèn)題分析的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08淺談Mysql insert on duplicate key 死鎖問(wèn)
本文介紹了在并發(fā)場(chǎng)景下的 insert on duplicate key update sql 出現(xiàn)的死鎖,經(jīng)過(guò)分析發(fā)現(xiàn)這種sql確實(shí)比較容易造成死鎖,這篇文章就從分析死鎖展開,到最終如何解決這樣的問(wèn)題 分享相應(yīng)的思路,感興趣的可以了解一下2022-05-05Mysql支持的數(shù)據(jù)類型(列類型總結(jié))
MySQL支持大量的列類型,它可以被分為3類:數(shù)字類型、日期和時(shí)間類型以及字符串(字符)類型。本節(jié)首先給出可用類型的一個(gè)概述,并且總結(jié)每個(gè)列類型的存儲(chǔ)需求,然后提供每個(gè)類中的類型性質(zhì)的更詳細(xì)的描述2016-12-12MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法
本篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法,此處總結(jié)一下恢復(fù)方案,并結(jié)合數(shù)據(jù)庫(kù)的二進(jìn)制日志做下數(shù)據(jù)恢復(fù)的示范。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06