Производительность XAConnection в Oracle (10g)

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

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

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

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

Любые указатели будут очень полезны.


person Sathya    schedule 22.06.2009    source источник


Ответы (1)


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

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

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

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

person djna    schedule 25.06.2009