2

在我们的项目中,我们使用 Oracle XA 连接池。只有一小部分查询(事务)被分发。其余是相当简单的单个数据库修改。

我想知道使用 XAConnections 与普通的 XAConnections 是否存在性能差异。

我们使用 websphere v6.1 作为服务器。

如果 XAConn 的性能不是很好,那么我计划拥有两个数据源并酌情使用来自它们的连接。

任何指针都会有很大帮助。

4

1 回答 1

2

我没有基准来证实以下内容,这只是“我们都知道”的传统智慧。与所有性能讨论一样,您的里程数会有所不同,如果这对您的应用程序绝对至关重要,那么您需要执行自己的基准测试。

我相信将支持 XA 的连接池用于非 XA 工作不会产生显着的性能开销 - 当事务中仅使用单个资源时,WebSphere 会谨慎使用 1PC 事务。XA 的主要开销是额外的 Prepare/Commit/Forget 一组 XA 消息,这些不会在简单的 1PC 情况下发生。

因此,主要的危险是无意中启动了 2PC 事务。如果您针对相同的资源但使用(例如)不同的隔离级别执行多项工作,则可能会发生这种情况。您从池中获得一个连接并做一些工作,该连接现在与您的事务相关联,直到 COMMIT。您“关闭”连接,名义上将其返回到池中,但实际上 WebSphere 的池为您的事务保留了连接。您再次请求连接以完成更多工作,前提是您请求完全相同的连接,您将再次获得相同的连接,因此工作在单个事务中继续 - 我们只有 1PC,没有开销。

我会采用最初拥有一个支持 XA 的池的方法,但有两个单独的资源引用,一个用于 2PC 工作,一个用于 1PC 工作。让两个引用都指向同一个连接池。您的代码现在与任何需要单独连接池的需求隔离开来,如果您确实需要进行更改,只需重新绑定资源引用即可。

于 2009-06-25T08:09:44.630 回答