2013-08-25 5 views
0

JPA (EclipseLink)를 통해 Postgres 데이터베이스에 액세스하는 Java 프로그램이 있습니다.
먼저 JPA에서 데이터베이스를 만들도록했습니다.
그런 다음 생성 된 데이터베이스를 조작하는 pgsql 스크립트 인 java.sql.Connection (엔티티 관리자에서 unwrap()을 통해 얻음)을 실행합니다.
엔티티 관리자가 연결 풀 (c3p0)과 함께 작동하도록 구성되었습니다.
스크립트의 일부가 테이블 목록의 제약 조건을 삭제합니다.
어떤 이유로 테이블 수가 떨어지면 막히게됩니다.
다른 활성 트랜잭션 (pg_stat_activity)이없고 부여되지 않은 잠금 (pg_locks)이 없습니다.
drop 제약 조건 문 앞뒤에 디버그 인쇄를 추가했습니다. 둘 다 인쇄되므로 루프 중간에 멈추는 것 같습니다. pg_stat_activity에서 선택하는 경우 다음과 같은 결과는 관련 거래에 반환됩니다postgres plsql 스크립트 루프가 멈춤

Waiting: false 
State: Active 
Query: Empty 

CPU 사용량 및 체크 아웃에서 포스트 그레스 프로세스가 유휴 상태 인 것 같다. pgAdmin에서 스크립트를 실행할 때 Java 프로그램에서 실행될 때만 멈추지 않습니다. 일반적으로 루프 반복 횟수가 200 회를 초과하면 멈추지 만 다른 루프에도 걸렸습니다. 코드를 리베이스 한 후 문제가 두 번 사라졌습니다 (실제 Vodou).
그런 시나리오에 대한 Postgres 분석 도구에 더 관심이 있습니다. 이 교착 상태를 해결할 수있는 아이디어 나 기술을 제공해 주시면 감사하겠습니다.

  • 문제를 해결 해결 방법

    은 새 JDBC 연결을 열고 거기에서 그것을 실행했다,하지만 난 여전히 문제는 그에게 미래를 int로 해결하는 방법을 이해하기 관심이 있어요.
+0

Linux를 사용하고 있다면 걸린 프로세스의'strace -p '을 실행 해 보셨습니까? 'pg_stat_activity'를 질의하여 pid를 볼 수 있습니다. 또한,''pg_stat_activity'에서 쿼리의 "state"컬럼의 값은 무엇입니까? – bma

+0

누락 된 정보를 질문에 추가했습니다. 감사. @bma –

+0

실제로 잠금 쿼리가없고 db에서 아무 것도 일어나지 않는 경우 프로세스를 strace합니다. 다음은 유용한 자습서입니다. http://www.hokstad.com/5-simple-ways-to-troubleshoot-using-strace – bma

답변

1

PGAdmin이 작동하지만 JDBC 메소드가 아니라면 Postgresql이 아닌 JDBC 또는 C3P0 문제인 것 같습니다. C3P0 연결 풀러로 모든 쿼리를 로깅하여 DB 수준 문제가 있는지 확인하려고합니까? PGAdmin이 성공했다는 사실은 당신이 JDBC와 C3P0 구성을 재검토해야한다고 생각하게 만듭니다. DB 잠금에 대한

자세한 내용은 다음 페이지에서 확인할 수 있습니다

0

문제가 PLSQL 스크립트 인쇄 인상 통지를 사용 하였다 보인다 디버그 메시지.
그 중 너무 많은 부분이 인쇄 될 때 어떤 이유로 스크립트가 멈추게됩니다. 일단 제거되면 다시 작동하기 시작합니다.

관련 문제