1

皆さん、JBoss AS 5 で実行されているアプリケーションを JBoss AS 7 に移行することに積極的に取り組んでいます。

移行後、データベース呼び出しのパフォーマンスが大幅に低下していることに気付きました。

JBoss 5 でプール (最小 - 5 最大 - 100) で ojdbc14 を使用していましたが、かなりうまく機能していました。

JBoss AS 7 では、ドライバーをモジュールとしてインストールしました。

すべてのクエリに 10 倍の時間がかかっています。たとえば、JBoss AS 5 でクエリに 30 ミリ秒かかった場合、JBoss AS 7 では 400 ~ 600 ミリ秒かかっています。

以下の構成に示されている両方のドライバーで試しました(ojdbc6、ojdbc14)

観察によると、パフォーマンスの低下は、OS X ボックスよりも Linux ボックス マシンの方が顕著です。

ご参考までに。Java 1.6 と 1.7 の両方で JBoss AS 7 を実行してみました

私のアプリケーション自体には以下が含まれています:

  • struts 2 フロントエンド (リクエスト処理に使用され、Web UI は関係ありません)
  • バックエンドのセッション Bean
  • バッチジョブ用の QuartzPlugin。
  • カスタム MBean

私が試してみました

  1. プールサイズの増減
  2. prefill = true および false
  3. ojdbc6 と ojdbc14 の切り替え

スタンドアロン.xml

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
        <datasources>
            <datasource jta="true" jndi-name="java:jboss/datasources/MyDS" pool-name="hive-datasource" enabled="true" use-java-context="true" use-ccm="true">
                <connection-url>jdbc:oracle:thin:@host:port:service</connection-url>
                <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                <connection-property name="defaultRowPrefetch">
                    50
                </connection-property>
                <driver>oracle14</driver>
                <pool>
                    <min-pool-size>20</min-pool-size>
                    <max-pool-size>100</max-pool-size>
                    <prefill>true</prefill>
                    <use-strict-min>false</use-strict-min>
                    <flush-strategy>FailingConnectionOnly</flush-strategy>
                </pool>
                <security>
                    <user-name>theusername</user-name>
                    <password>thepassword</password>
                </security>
                <validation>
                    <check-valid-connection-sql>select * from dual</check-valid-connection-sql>
                    <validate-on-match>false</validate-on-match>
                    <background-validation>false</background-validation>
                    <use-fast-fail>false</use-fast-fail>
                    <exception-sorter class-name="org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter"/>
                </validation>
                <timeout>
                    <set-tx-query-timeout>true</set-tx-query-timeout>
                    <blocking-timeout-millis>300000</blocking-timeout-millis>
                    <idle-timeout-minutes>30</idle-timeout-minutes>
                </timeout>
                <statement>
                    <track-statements>false</track-statements>
                    <prepared-statement-cache-size>0</prepared-statement-cache-size>
                </statement>
            </datasource>
            <drivers>
                <driver name="oracle6" module="com.oracle.ojdbc6">
  <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                </driver>
                <driver name="oracle14" module="com.oracle.ojdbc14">
                    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                </driver>
            </drivers>
        </datasources>
    </subsystem>
4

2 に答える 2

1

アップグレードによってデータベースのパフォーマンスが変化するという問題が頻繁に発生します。重要なのは、JBoss 5 と JBoss7 の間でデータベースクエリがどのように変化したかを突き止めることです。処理効率に関しては、すべての OS に長所と短所があるため、ある OS ではより大幅な低下が見られ、別の OS ではより少ないという事実は驚くべきことではありません。

私の提案は、JBoss 7 で最大のボトルネックを引き起こしているクエリと上位の待機イベントを含め、データベースの高い可視性を確認することです。ご存じない方のために説明すると、Oracle はクエリの実行を待機イベントと呼ばれる個別のステップに分割します。これらは、テーブル ロックの待機からディスク I/O 時間のかかるイベントまで、あらゆる可能性があります。Oracle には 1000 近くの待機イベントがあるため、この情報を手動で取得し、待機イベントをクエリおよびハードウェア リソースと関連付けるのは非常に困難な場合があります。

これは、Ignite データベース監視ソフトウェアの無料バ​​ージョンへのリンクです。http://www.ignitefree.com

于 2013-06-19T16:58:08.433 に答える