1

伙计们,我正在积极地将在 JBoss AS 5 上运行的应用程序迁移到 JBoss AS 7。

迁移后,我注意到数据库调用对性能造成了巨大影响。

我在 JBoss 5 上使用 ojdbc14 和一个池(最小 - 5 最大 - 100),它对我们来说工作得很好。

在 JBoss AS 7 中,我已将驱动程序作为模块安装。

我所有的查询都需要 10 倍的时间。例如,如果我在 JBoss AS 5 上查询需要 30 毫秒,那么在 JBoss AS 7 上需要 400-600 毫秒。

我已尝试使用以下配置中显示的两个驱动程序(ojdbc6、ojdbc14)

一个观察结果是,Linux 机器上的性能下降比 OS X 机器更明显。

供参考。我尝试在 Java 1.6 和 1.7 上运行 JBoss AS 7

我的应用程序本身包含:

  • struts 2 前端(用于请求处理,不涉及 web ui)
  • 后端的会话 Bean
  • 用于批处理作业的 QuartzPlugin。
  • 自定义 MBean

我努力了

  1. 降低和增加池大小
  2. 预填充 = 真假
  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 之间是如何变化的。您看到一个操作系统的性能下降幅度更大,而另一个操作系统的性能下降幅度较小这一事实并不奇怪,因为每个操作系统在处理效率方面都有其优势和劣势。

我的建议是确定数据库的高可见性,包括导致 JBoss 7 最大瓶颈的查询和最重要的等待事件。如果您不熟悉,Oracle 将查询执行分解为称为等待事件的离散步骤。这些可以是任何事情,从等待表锁到磁盘 I/O 时间占用事件。Oracle 中有近 1000 个等待事件,因此手动获取此信息并将等待事件与查询和硬件资源相关联可能非常困难。

这是一个免费版本的 Ignite 数据库监控软件的链接,它应该可以帮助您http://www.ignitefree.com

于 2013-06-19T16:58:08.433 回答
0

例如,在 JBoss5/Java6 上花费 2 毫秒的操作在 JBoss7/Java6 或 7 上花费 2-5 秒。这仅在我在 linux 机器上运行时才会发生。机器本身有 8Gig+ 可用内存并且是 Xeon 处理器。当我在 OS X 服务器/笔记本电脑上运行它时,一切运行正常

于 2013-06-20T22:50:48.383 回答