在事务下执行只读查询是否会造成性能损失?

发布于 2024-12-08 19:42:49 字数 511 浏览 0 评论 0原文

使用基于 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>

Is there any performance penalty to define all methods as transactional using Spring AOP based declarative transaction management? See the config below. The reason is that I do not know what method name developers will give for non transactional methods. One option is I start with a wild card list and developers update the list if the method name does not fall under the defined list.

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伏妖词 2024-12-15 19:42:49

这取决于您使用的底层事务管理器。默认的 spring“每个线程事务,无 XA 事务”可能没有任何惩罚。如果您将 JBoss 与 XA 事务管理器一起使用,那么它会将一些数据写入事务日志。

-- 原始 -- 即便如此,我认为您也会发现性能损失相当小。

-- 编辑 -- 根据我的经验,使用 JBoss 事务管理器转换为只读时,我没有看到性能的巨大提升。根据下面的评论,至少一位用户看到性能提高了 30%,这是非常显着的。

It depends on what underlying transaction manager you are using. The default spring "transaction per thread, no XA transactions" probably doesn't have a any penalty. If you are using JBoss with the XA transaction manager, then it will write some data to a transaction log .

-- original -- Even then, I think you'd find the performance penalty to be fairly small.

-- edited -- In my experience, I haven't seen a huge increase in performance when converting to Readonly using the JBoss transaction manager. Per the comment below, at least one user saw a 30% performance increase which is significant.

瑕疵 2024-12-15 19:42:49

理论上,向过多的方法添加 AOP(以及内省/反射)开销会带来性能损失。此外,打开和关闭超出所需数量的交易也会带来额外的开销。恕我直言,应该由对数据访问层进行编码的开发人员知道何时以及是否应该启动事务。

Theoretically there's a performance penality to adding AOP (and thus introspection/reflection) overhead to more methods than necessary. Also there's the added overhead of opening and closing more transactions than needed. It should be up to the developer coding the data-acces layer to know when and if a transaction should be started IMHO.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文