статистика источника данных jboss, мониторинг JMX — противоречивая информация

#sql #jboss #datasource #jmx

#sql #jboss #источник данных #jmx

Вопрос:

Я определил два источника данных в *-ds.xml в jboss 4.2.3 (redhat 4.3) оба источника данных идентичны. Различаются только jndi-name, Каждое определяет min = max = 10

 <xa-datasource>
 <jndi-name>com.trax.hibernate.DataSource</jndi-name>
 <track-connection-by-tx>true</track-connection-by-tx>
 <isSameRM-override-value>false</isSameRM-override-value>
 <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
 <xa-datasource-property name="URL">jdbc:oracle:thin:@localhost:1521:orcl10</xa-datasource-property>
 <xa-datasource-property name="User"> xxxx </xa-datasource-property>
 <xa-datasource-property name="Password"> xxxx </xa-datasource-property>
 <min-pool-size>10</min-pool-size>
 <max-pool-size>10</max-pool-size>
 <prefill>true</prefill>
 <blocking-timeout-millis>60000</blocking-timeout-millis>
 <ih3e-timeout-minutes>15</ih3e-timeout-minutes>
 <valid-connection-checker-class-name> org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker </valid-connection-checker-class-name>
 <check-valid-connection-sql>select 1 from gtw_cust</check-valid-connection-sql>
 <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
 <no-tx-separate-pools/>
</xa-datasource>

<xa-datasource>
 <jndi-name>AuditTrail.DataSource</jndi-name>
 <track-connection-by-tx>true</track-connection-by-tx>
 <isSameRM-override-value>false</isSameRM-override-value>
 <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
 <xa-datasource-property name="URL">jdbc:oracle:thin:@localhost:1521:orcl10</xa-datasource-property>
 <xa-datasource-property name="User">xxxx</xa-datasource-property>
 <xa-datasource-property name="Password"> xxxx </xa-datasource-property>
 <min-pool-size>10</min-pool-size>
 <max-pool-size>10</max-pool-size>
 <prefill>true</prefill>
 <blocking-timeout-millis>60000</blocking-timeout-millis>
 <ih3e-timeout-minutes>15</ih3e-timeout-minutes>
 <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
 <check-valid-connection-sql>select 1 from gtw_cust</check-valid-connection-sql>
 <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
 <no-tx-separate-pools/>
</xa-datasource>
  

Проблема:
В jmx-консоли имя =com.trax.hibernate.Источник данных, service =ManagedConnectionPool, информация показывает 20 подключений, а не 10, как ожидалось.

Я бы ожидал, что максимальное значение созданных подключений будет равно 10 (MaxSize). Здесь кажется, что количество фактических подключений в два раза больше максимального, и соединения были созданы и уничтожены (40 созданных и 20 уничтоженных)

Что я делаю не так? Как вы можете это объяснить?

 com.trax.hibernate.DataSource:
AvailableConnectionCount    20
ConnectionCount           20
MinSize                      10
MaxSize                      10
MaxConnectionsInUseCount    11
InUseConnectionCount              0
ConnectionCreatedCount  40
ConnectionDestroyedCount    20

AuditTrail.DataSource:
AvailableConnectionCount    10
ConnectionCount           10
MinSize                      10
MaxSize                      10
MaxConnectionsInUseCount    8
InUseConnectionCount              0
ConnectionCreatedCount  20
ConnectionDestroyedCount    10
  

Комментарии:

1. При развертывании только источника данных без приложения два источника данных создают точно максимальные соединения. только при развертывании приложения первый источник данных создает соединения двойного максимального размера, поэтому это действительно зависит от того, как приложение использует источник данных, хотя оба источника данных определены как XA — oracle.jdbc.xa.client. OracleXADataSource

Ответ №1:

Это из-за свойства <no-tx-separate-pools/> . Смотрите документацию по источникам данных XA в Руководстве по настройке сервера JBoss:

<no-tx-separate-pools>

Объединяйте транзакционные и нетранзакционные соединения отдельно

Предупреждение

Использование этой опции приведет к тому, что ваш общий размер пула будет в два раза больше максимального размера пула, поскольку будут созданы два фактических пула.

http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/4.3/html-single/Server_Configuration_Guide/index.html#id2947572

Комментарии:

1. Хорошо, я вижу, что использую это свойство. однако я использую его в обоих источниках данных, и только первый удваивается…

2. Я бы предположил, что это потому, что вы используете подключение AuditTrail по-другому, чем основной пул. Есть ли что-то особенное в AuditTrail? Является ли это частью основной транзакции?

3. Что ж, первый источник данных используется через Hibernate и jboss JTA, в то время как другой используется другой (сторонней) библиотекой программного обеспечения, так что вы можете быть правы … есть идеи о том, как я могу это проверить?

4. Не уверен. Возможно, просматривая документацию этой сторонней библиотеки. Посмотрите, пытается ли он присоединиться к существующей транзакции JTA или нет. Держу пари, что это не так. Другой способ, конечно, просто удалить эту опцию и посмотреть пул 🙂

5. Хорошо, теперь относительно значения ConnectionDestroyedCount… почему источник данных должен создавать вдвое больше соединений, чем ему нужно, а затем уничтожать 50%? я бы ожидал, что он никогда не создаст больше, чем MaxSize…