답변:
MySQL 5.5.30에 도입 된 설정이 있습니다 : innodb_print_all_deadlocks
이 옵션을 활성화하면 InnoDB 사용자 트랜잭션의 모든 교착 상태에 대한 정보가 mysqld 오류 로그에 기록됩니다. 그렇지 않으면 SHOW ENGINE INNODB STATUS 명령을 사용하여 마지막 교착 상태에 대한 정보 만 표시됩니다. InnoDB가 상황을 즉시 감지하고 트랜잭션 중 하나를 자동으로 롤백하기 때문에 가끔 InnoDB 교착 상태가 반드시 문제가되는 것은 아닙니다. 응용 프로그램에 롤백을 감지하고 조작을 재 시도 할 적절한 오류 처리 로직이없는 경우 교착 상태가 발생하는 이유를 해결하려면이 옵션을 사용할 수 있습니다. 교착 상태가 많으면 여러 테이블에 대해 DML 또는 SELECT ... FOR UPDATE 문을 발행하는 트랜잭션을 재구성해야하므로 각 트랜잭션이 동일한 순서로 테이블에 액세스하여 교착 상태를 피할 수 있습니다.
이 설정을 추가하십시오 my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
또는
[mysqld]
innodb_print_all_deadlocks = on
mysql을 다시 시작할 필요는 없습니다. mysql에 로그인하고 실행하십시오.
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
이 설정은 나에게도 새로운 것입니다.
그것을 시도하고 당신이 생각하는 모든 것을 알려주세요!
mysql.user
하고 실행할 수 없도록 트리거를 사용합니다 FLUSH PRIVILEGES;
.