在我们的项目中,我们使用 Oracle XA 连接池。只有一小部分查询(事务)被分发。其余是相当简单的单个数据库修改。
我想知道使用 XAConnections 与普通的 XAConnections 是否存在性能差异。
我们使用 websphere v6.1 作为服务器。
如果 XAConn 的性能不是很好,那么我计划拥有两个数据源并酌情使用来自它们的连接。
任何指针都会有很大帮助。
在我们的项目中,我们使用 Oracle XA 连接池。只有一小部分查询(事务)被分发。其余是相当简单的单个数据库修改。
我想知道使用 XAConnections 与普通的 XAConnections 是否存在性能差异。
我们使用 websphere v6.1 作为服务器。
如果 XAConn 的性能不是很好,那么我计划拥有两个数据源并酌情使用来自它们的连接。
任何指针都会有很大帮助。
我没有基准来证实以下内容,这只是“我们都知道”的传统智慧。与所有性能讨论一样,您的里程数会有所不同,如果这对您的应用程序绝对至关重要,那么您需要执行自己的基准测试。
我相信将支持 XA 的连接池用于非 XA 工作不会产生显着的性能开销 - 当事务中仅使用单个资源时,WebSphere 会谨慎使用 1PC 事务。XA 的主要开销是额外的 Prepare/Commit/Forget 一组 XA 消息,这些不会在简单的 1PC 情况下发生。
因此,主要的危险是无意中启动了 2PC 事务。如果您针对相同的资源但使用(例如)不同的隔离级别执行多项工作,则可能会发生这种情况。您从池中获得一个连接并做一些工作,该连接现在与您的事务相关联,直到 COMMIT。您“关闭”连接,名义上将其返回到池中,但实际上 WebSphere 的池为您的事务保留了连接。您再次请求连接以完成更多工作,前提是您请求完全相同的连接,您将再次获得相同的连接,因此工作在单个事务中继续 - 我们只有 1PC,没有开销。
我会采用最初拥有一个支持 XA 的池的方法,但有两个单独的资源引用,一个用于 2PC 工作,一个用于 1PC 工作。让两个引用都指向同一个连接池。您的代码现在与任何需要单独连接池的需求隔离开来,如果您确实需要进行更改,只需重新绑定资源引用即可。