2009-06-22 4 views
2

В нашем проекте мы используем пул Oracle XA Connection. Распространяется только небольшое подмножество запросов (транзакций). Rest - довольно простая модификация базы данных.Производительность XAConnection в Oracle (10g)

Я хотел бы знать, есть ли разница в использовании при использовании XAConnections Vs обычные.

Мы используем websphere v6.1 в качестве сервера.

Если XAConn не очень эффективен, тогда iam планирует иметь два источника данных и использовать соединения из них по мере необходимости.

Любые указатели окажут большую помощь.

ответ

2

У меня нет ориентиров для обоснования следующего, это просто «все мы знаем, что» общепринятая мудрость. Как и во всех обсуждениях производительности, ваше Milage Vary, если это абсолютно важно для вашего приложения, вам нужно выполнить свои собственные тесты.

Я считаю, что из-за использования пула соединений XA-совместимых приложений для работы, отличного от XA, нет значительных накладных расходов. WebSphere осторожно использует транзакции 1PC, когда в транзакции используется только один ресурс. Первичные накладные расходы XA - это дополнительный сбор готовых/Commit/Forget сообщений XA, это не произойдет в простом случае 1PC.

Таким образом, основная опасность заключается в непреднамеренном инициировании транзакции 2PC. Это может произойти, если вы делаете несколько работ, предположительно, против одного и того же resoruce, но с (например) разными уровнями изоляции. Вы получаете соединение из пула и выполняете некоторую работу, это соединение теперь связано с вашей транзакцией до COMMIT. Вы «закрываете» соединение, по сути, сохраняя его в пуле, но на самом деле объединение WebSphere поддерживает соединение для вашей транзакции. Вы снова запрашиваете соединение для выполнения еще одной работы, при условии, что вы запрашиваете точно такое же соединение, вам снова будет предоставлено одно и то же соединение, и поэтому работа будет продолжаться в одной транзакции - у нас есть только 1PC, никаких накладных расходов.

Я бы взял подход изначально, имея единственный, способный к XA пул, но имеющий две отдельные ссылки на резорцию, один для работы 2PC, один для работы 1PC. Обе ссылки указывают на один и тот же пул соединений. Теперь ваш код изолирован от необходимости иметь отдельные пулы соединений, это просто вопрос переустановки ресурса-ref, если вам когда-либо понадобится внести изменения.