Я занимался некоторыми исследованиями в области производительности транзакций базы данных только для чтения и чтения-записи. Сервер MySQL удален, поэтому мне легко увидеть различия между различными типами транзакций. Это связано с пулом соединений, который, как я знаю, работает на основе сравнения 1-го и 2-го вызовов JDBC.
Когда я настраиваю AOP Spring для использования транзакции только для чтения в моем вызове DAO, вызовы на 30-40% медленнее по сравнению с read-write:
<!-- slower -->
<tx:method name="find*" read-only="true" propagation="REQUIRED" />
или
// slower
@Transaction(readOnly = true)
Versus:
<!-- faster -->
<tx:method name="find*" read-only="false" propagation="REQUIRED" />
или
// faster
@Transaction
Глядя на tcpdump, похоже, что транзакция только для чтения делает больше взад и вперед, разговаривая с MySQL. Здесь дамп только для чтения по сравнению с read-write.
-
Может кто-нибудь объяснить, почему вызовы только для чтения занимают больше времени. Ожидается ли это?
-
Есть ли что-то, что я делаю неправильно или что-то, что я могу сделать, чтобы улучшить их скорость, кроме улучшения сети? Просто нашел этот потрясающий пост с некоторыми хорошими рекомендациями по эффективности. Любые другие комментарии?
Большое спасибо.