Существует ли снижение производительности при выполнении запросов только для чтения в транзакции? - PullRequest
0 голосов
/ 10 октября 2011

Существует ли какое-либо снижение производительности для определения всех методов как транзакционных с использованием декларативного управления транзакциями на основе Spring AOP? Смотрите конфиг ниже. Причина в том, что я не знаю, что разработчики имен методов дадут для нетранзакционных методов. Один из вариантов - я начинаю со списка подстановочных знаков, и разработчики обновляют список, если имя метода не попадает в указанный список.

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="dtxops" expression="bean(*Service)" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="dtxops" />
</aop:config>

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Теоретически существует дополнительная производительность для добавления накладных расходов АОП (и, следовательно, самоанализа / отражения) к большему количеству методов, чем необходимо. Также есть дополнительные накладные расходы на открытие и закрытие большего количества транзакций, чем необходимо. Разработчик, кодирующий уровень доступа к данным, должен знать, когда и следует ли запускать транзакцию, IMHO.

1 голос
/ 10 октября 2011

Это зависит от того, какой базовый менеджер транзакций вы используете.Пружина по умолчанию «транзакция на поток, транзакций без XA», вероятно, не имеет штрафов.Если вы используете JBoss с менеджером транзакций XA, он запишет некоторые данные в журнал транзакций.

- оригинал - даже тогда, я думаю, вы найдете штраф за производительность довольно небольшим.

- отредактировано - По моему опыту, я не видел огромныхувеличение производительности при преобразовании в Readonly с помощью диспетчера транзакций JBoss.Согласно приведенному ниже комментарию, по крайней мере, один пользователь увеличил производительность на 30%, что является существенным.

...