Как отследить пул соединений в веб-приложении Java - DBMS_APPLICATION_INFO - PullRequest
4 голосов
/ 06 мая 2009

Мне нужно улучшить прослеживаемость в веб-приложении, которое обычно запускается для пользователя с фиксированной базой данных. Администратор базы данных должен иметь быстрый доступ к информации о тяжелых пользователях, которые ухудшают базу данных.

5 лет назад я внедрил движок .NET ORM, который делает журнал пользователя и сервера, используя пакет DBMS_APPLICATION_INFO. Использование оболочки над диспетчером соединений со следующим кодом:

DBMS_APPLICATION_INFO.SET_MODULE ('"+ Пользователь +" - "+ appServerMachine +"', '');

Каждый раз, когда соединение получает соединение из пула, выполняется пакет для записи информации в V $ SESSION.

Кто-нибудь обнаружил или реализовал решение этой проблемы, используя Toplink или Hibernate? Есть ли реализация по умолчанию для этой проблемы?

Я нашел здесь решения, которые я реализовал 5 лет назад, но я хотел бы знать, у кого-нибудь есть лучшее решение, интегрированное с ORM.

с использованием DBMS_APPLICATION_INFO с Jboss

Мое приложение выше Spring, DAO реализованы с использованием JPA (с использованием hibernate) и фактически работают непосредственно в Tomcat с планами (в следующем году) перейти на сервер приложений SAP Netwevare.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 02 августа 2009

В Oracle 10g мы можем использовать DBMS_SESSION.SET_IDENTIFIER для уникальной идентификации определенного сеанса. Oracle также предоставляет встроенный JDBC , чтобы подключить его к пулу соединений. Вы должны будете предоставить свои собственные средства уникальной идентификации сеанса, которые будут зависеть от вашего приложения.

Ваш администратор базы данных будет иметь достаточно информации для идентификации сеанса, требующего ресурсов.

Нет БД, которого я знаю, будет впечатлен огромным текстовым файлом, сгенерированным из среднего уровня.

0 голосов
/ 06 мая 2009

Если вы хотите узнать о запросах, выполнение которых стоит дорого, вам следует перейти непосредственно на сервер базы данных. Для этого есть инструменты мониторинга, специфичные для каждого сервера. Например, в PostgreSQL вы должны запускать SELECT * FROM pg_stat_activity в качестве администратора для проверки каждого соединения и того, что оно делает, как долго оно работает и т. Д.

Если вы действительно хотите / должны сделать это из контейнера, то, возможно, вы можете определить перехватчик с помощью Spring AOP для выполнения того оператора, который вам нужен, прежде чем что-либо делать. Помните, что соединение с базой данных не всегда используется одним и тем же пользователем приложения, поскольку вы используете пул.

0 голосов
/ 06 мая 2009

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

Два момента для рассмотрения:

  1. В загруженной системе это создаст большой файл журнала.
  2. Частые подключения не являются обязательным признаком поведения, которое может ухудшить работу БД.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...