2010-07-25 7 views
2

나는 새는 연결을 추적하려고합니다. (특히 커넥션 풀링을 위해 C3P0을 사용하여 마지막 DataSource의 클로저를 지나친 연결을 발견 할 수 있습니다. 버그는 의심 스럽지만 우선 바보가 아닌지 확인하고 싶습니다.)Postgres 연결을 Java 코드와 연결

Postgres의보기가 자바/JDBC 코드에 오픈 한 위치에

 
postgres=# select * from pg_stat_activity; 

datid | datname | procpid | usesysid | usename |   current_query   | waiting |   xact_start   |   query_start   |   backend_start   | client_addr | client_port 
11564 | postgres | 95709 |  10 | postgres | select * from pg_stat_activity; | f  | 2010-07-25 14:20:24.97529-07 | 2010-07-25 14:20:24.97529-07 | 2010-07-25 14:20:19.066576-07 |    |   -1 

(1 row) 

에서 열린 연결을 연결하는 좋은 방법? (또는 아마도 일부 고유 한 문자열 등) 이것이 유용 할 것으로 보입니다!

답변

1

PostgreSQL 9는 이러한 방식으로 읽을 수있는 application_name 설정을 지원하지만 이전 버전에서는 서버에 비슷한 내용이 없습니다.

JBoss에서는 백 트레이스를 캡처하고 연결과 함께 저장하기 위해 연결이 열릴 때마다 내부적으로 예외를 포착하고 catch하는 연결 보호 시스템을 사용했습니다. 그런 다음 트랜잭션이 끝날 때 연결이 닫히지 않으면 해당 백 트레이스에 경고가 기록됩니다. 이 전략을 일반 데이터 소스 데코레이터 레이어에 적용하고 10 분 (또는 예상 수명보다 긴 시간) 동안 사용되지 않았지만 닫히지 않은 클립에 대해 추적 된 연결을 주기적으로 스윕 할 수 있습니다.

+0

내가 기다려야 할 것 같아! –

+0

글쎄, Postgres 9가 나와서이 솔루션은 훌륭하게 작동합니다. –

0

PostgreSQL에서 확인할 수 없습니다. Java 코드에 대해서는 아무 것도 모릅니다. 호출자는 사용자 이름, 암호 및 DB 이름을 전달해야합니다. 아무것도 더. 그러나 자바 측에서 확인하는 것은 가능합니다. log4jdbc 같은 도구가 도움이 될 수 있습니다.

+0

필자는 Postgres 측에서 ** 필요하지 않다는 것을 이해합니다.하지만 사용하고자하는 연결 매개 변수가 있거나 사용할 수있는 "이름"매개 변수가 있습니다. 이렇게. –

+0

가장 좋은 방법은 가능한 경우 응용 프로그램에서만 사용되는 로그인 역할을 사용하는 것입니다. 그래도 개별 연결을 추적 할 수는 없지만 적어도 응용 프로그램이 문제인지 확인하게됩니다. –

관련 문제