設(shè)置mysql 事務(wù)鎖超時(shí)時(shí)間 innodb_lock_wait_timeoutMysql數(shù)據(jù)庫采用InnoDB模式,默認(rèn)參數(shù):innodb_lock_wait_timeout設(shè)置鎖等待的時(shí)間是50s,一旦數(shù)據(jù)庫鎖超過這個(gè)時(shí)間就會(huì)報(bào)錯(cuò)。 SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';
SET GLOBAL innodb_lock_wait_timeout=500;
SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';//永久設(shè)置,需重啟mysql
SET innodb_lock_wait_timeout = 120; //臨時(shí)設(shè)置無需重啟 查詢進(jìn)程 查詢數(shù)據(jù)庫線程情況,看是否有執(zhí)行很慢的SQLshow processlist; 在執(zhí)行結(jié)果中可以看到是否有表鎖等待或者死鎖,如果有死鎖發(fā)生,可以通過下面的命令來殺掉當(dāng)前運(yùn)行的事務(wù): 查詢到相對(duì)應(yīng)的進(jìn)程再去查看innodb的事務(wù)表INNODB_TRX,看下里面是否有正在鎖定的事務(wù)線程,看看ID是否在show full processlist里面的sleep線程中,如果是,就證明這個(gè)sleep的線程事務(wù)一直沒有commit或者rollback而是卡住了,我們需要手動(dòng)kill掉。 kill id;
// KILL 后面的數(shù)字指的是 trx_mysql_thread_id 值。
|