Mysql事物阻塞的實現(xiàn)
阻塞因為不同鎖之間的兼容性關(guān)系,在有些時刻一個事務(wù)中的鎖需要等待另一個事務(wù)中的鎖釋放它所占用的資源,這就是阻塞。
阻塞并不是一件壞事,其是為了確保事務(wù)可以并發(fā)且正常地運行。在InnoDB存儲引擎中,參數(shù)innodb_lock_wait_timeout用來控制等待的時間(默認是50秒),innodb_rollback_on_timeout用來設(shè)定是否在等待超時時對進行中的事務(wù)進行回滾操作(默認是OFF,代表不回滾)。參數(shù)innodb_lock_wait_timeout是動態(tài)的,可以在MySQL數(shù)據(jù)庫運行時進行調(diào)整而innodb_rollback_on_timeout是靜態(tài)的,不可在啟動時進行修改,當發(fā)生超時,MySQL數(shù)據(jù)庫會拋出一個1205的錯誤,需要牢記的是,在默認情況下InnoDB存儲引擎不會回滾超時引發(fā)的錯誤異常。其實InnoDB存儲引擎在大部分情況下都不會對異常進行回滾。
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ù)庫的線程,及其對應(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 null3、查看事務(wù)超時時間
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
lock_wait_timeout 是一個服務(wù)器級別的參數(shù),它用于設(shè)置所有連接在等待行級鎖或表級鎖時可以等待的最大時間。當連接等待的時間超過了 lock_wait_timeout 的值時,MySQL 將拋出一個錯誤,并終止連接。默認值為 31536000 秒(即一年)。
innodb_lock_wait_timeout 是一個存儲引擎級別的參數(shù),它僅用于設(shè)置使用 InnoDB 存儲引擎的連接在等待行級鎖或表級鎖時可以等待的最大時間。當連接等待的時間超過了 innodb_lock_wait_timeout 的值時,InnoDB 將拋出一個錯誤,并終止連接。默認值為 50 秒。
建議將 innodb_lock_wait_timeout 的值設(shè)置得比較小,因為這可以有效避免因等待鎖而導(dǎo)致的超時問題。但是,也要注意不要設(shè)置得過小,以免在高并發(fā)的情況下出現(xiàn)頻繁的超時錯誤。
到此這篇關(guān)于Mysql事物阻塞的實現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql事物阻塞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 5.7.21 winx64免安裝版配置方法圖文教程
MySQL數(shù)據(jù)庫誤刪恢復(fù)的幾種方式實現(xiàn)
MySQL中表子查詢與關(guān)聯(lián)子查詢的基礎(chǔ)學習教程
mysql 5.7.17 安裝配置方法圖文教程(windows)

