Производительность XAConnection в Oracle (10 г) - PullRequest
2 голосов
/ 22 июня 2009

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

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

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

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

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

1 Ответ

2 голосов
/ 25 июня 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...