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

