2011-02-02 3 views
2

최대 절전 모드 및 innodb 및 mysql을 사용하고 있습니다. 아주 긴 절전 트랜잭션이 시작될 때 얻은 특정 테이블 행에 대한 비관적 잠금이 있습니다. 경우에 따라이 트랜잭션을 시작하고 독립 실행 형 응용 프로그램 모드에서 Eclipse에서 실행중인 응용 프로그램을 실행할 때 (스레드 오류가 발생하는) 응용 프로그램을 강제 종료하면 다음 시나리오가 나타납니다.mysql 트랜잭션 비관적 인 잠금이 손상됨

트랜잭션이 중단되었음을 알았습니다. 다음 번에 애플리케이션을 실행할 때, MySQL은 그 행이 잠금 해제되었음을 깨달아야한다고하더라도 긴 트랜잭션의 시작 부분에서 비관적 인 잠금을 얻는 함수가 차단됩니다.

다시 작동하게하는 유일한 방법은 MySQL 데몬을 중지하고 다시 시작한 다음 비관적 인 잠금을 얻는 것입니다.

이것은 정말로 우려됩니다. 즉, 예외 또는 완전 종료 이외의 모든 VM 종료는 MySQL 데몬을 다시 시작해야하는 깨진 상태로 MySQL을 남겨 둘 수 있습니다. 예 : Tomcat을 종료하고 다시 시작하는 정상적인 방법을 사용하고 있습니다. 이해를 돕기 위해 eclipse를 사용하여 실행중인 응용 프로그램을 중단하는 것과 같은 threaddeath가 필요합니다.

다른 사람들이이 문제를 경험 했습니까? 바람둥이를 막을 수있는 깨끗한 방법이 있습니까? 비관적 인 락 (업데이트 선택)을 얻은 트랜잭션의 중간에 MySQL이 threaddeath에 면역이되어서는 안됩니까?

나는

앤디

+0

이것을 알아 냈습니까? 문제점 행을 식별하고 수동으로 잠금을 해제하는 방법이 있습니까? (나는 우리가 비슷한 문제를 겪고있는 것 같음) – chrishomer

+0

아니, 테스트에서 3 번 봤어. 아직 알아 내지 못 했어. 요인 : (1) 동일한 프로세스에서 Lucene을 사용하고 있는데 Lucene은 치명적인 손상된 뮤텍스를 가져옵니다. (2) 내 응용 프로그램이 실행되는 동안 다른 프로세스에서 mysql 클라이언트를 사용하여 데이터베이스를 쿼리 할 때 발생하는 것처럼 보입니다. –

+0

이 질문은 오래된 질문이지만, 아직 알아 냈습니까? 나는 비슷한 문제가있어 그것을 고칠 수 없다고 생각한다. – xycf7

답변

0

MySQL은 트랜잭션이 중단 한 것을 깨닫지 못하고 $ CATALINA_HOME/빈/shutdown.sh와 Tomcat을 중지하고 있습니다.

트랜잭션 시간 제한을 트리거 할만큼 기다리지 않았다고 말할 수 있습니다. 어떤 데이터베이스 (그리고 특정 MySQL)에서 트랜잭션이 커밋되지 않은 경우 트랜잭션을 롤백하는 트랜잭션 시간 초과를 지정할 수 있습니다.

관련 문제