현재 우리는 Java와 MySQL에서 1.2.5 버전을 사용하고 있습니다. 우리는 데이터베이스에 저장하는 간단한 JPA 모델 (Model 클래스를 확장하는 Play 엔터티)을 가지고 있습니다. 각 웹 요청에 다중 삽입을 처리하는 가장 좋은 방법
SimpleModel() test = new SimpleModel();
test.foo = "bar";
test.save();
우리는 예를 들어, SimpleModel의 여러 인스턴스를 저장 : 우리는 수동으로 시작하고 트랜잭션을 종료 JPAPlugin.startTx 및 closeTx를 사용하는
JPAPlugin.startTx(false);
for (int i=0;i<5000;i++)
{
SimpleModel() test = new SimpleModel();
test.foo = "bar";
test.save();
}
JPAPlugin.closeTx(false);
. 트랜잭션을 실행하는 요청이 하나뿐이면 모든 것이 올바르게 작동합니다. 두 번째 요청이 루프를 동시에 실행하려고하면 두 번째 요청에 "대기 대기 시간 초과가 발생했습니다. 트랜잭션을 다시 시작하십시오. javax.persistence.PersistenceException : org.hibernate.exception.GenericJDBCException : 삽입 할 수 없습니다 : [ SimpleModel] "첫 번째 요청이 테이블을 잠그지 만 두 번째 요청이 시간 초과 될 때까지 완료되지 않기 때문입니다. 널 (null) : - :
오류 AssertionFailure : 어설 션 오류 (이 최대 절전 모드의 버그를 나타낼 수 있지만 인해 세션의 안전하지 않은 사용 가능성이) 발생 org.hibernate.AssertionFailure 45 이 여러 결과 SimpleModel 항목의 id (예외 발생 후 Session을 비우지 않음)
또 다른 감염은 삽입하는 동안 CPU 사용량이 미쳐 버린다는 것입니다.
이 문제를 해결하려면 엔티티를 순차적으로 삽입하는 트랜잭션 인식 대기열을 만들려고하는데 이것은 삽입 시간이 길어질 것입니다. 이 상황을 처리하는 올바른 방법은 무엇입니까?
2 배로 시도해보고 어떤 결과가 나타나는지 살펴 보겠습니다. – kospol