Связывание соединений Postgres с кодом Java - PullRequest
2 голосов
/ 26 июля 2010

Я пытаюсь отследить негерметичные соединения. (В частности, я заметил, что соединения остаются открытыми после закрытия последнего источника данных, используя C3P0 для пула соединений. Я подозреваю ошибку, но хочу убедиться, что я не просто глуп вначале.)

Есть ли хороший способ связать открытые соединения из представления Postgres

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)

с расположением, в котором они были открыты в коде Java / JDBC? (Или, может быть, какая-то уникальная строка и т. Д.) Похоже, это должно быть полезно иметь!

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Postgresql 9 поддерживает настройку application_name , которая может быть прочитана таким образом, но для версий до этого нет ничего похожего на сервере.

В JBoss у нас была защита соединениясистема, которая будет генерировать и перехватывать внутреннее исключение при каждом открытии соединения, чтобы захватить обратную трассировку, а затем сохранить ее вместе с соединением.Затем, если соединение не было закрыто в конце транзакции, эта обратная трассировка была зарегистрирована с предупреждением.Я полагаю, можно адаптировать эту стратегию в общий уровень источника данных-декоратора и периодически сканировать отслеживаемые соединения для тех, которые не использовались в течение 10 минут (или не превышали ожидаемое время жизни), но не закрывались.

0 голосов
/ 26 июля 2010

Это невозможно проверить на стороне PostgreSQL. Он ничего не знает о коде Java. Вызывающий абонент должен просто ввести имя пользователя, пароль и имя БД. Ничего более. Однако это можно проверить со стороны Java. В этом могут помочь такие инструменты, как log4jdbc .

...