Java 不必要的数据库事务会导致速度变慢吗?
我在Spring、Java、Hibernate和Postgresql环境中工作。我发现我的数据库速度非常慢。我的具体问题是,如果我将Spring的Java 不必要的数据库事务会导致速度变慢吗?,java,spring,postgresql,hibernate,transactions,Java,Spring,Postgresql,Hibernate,Transactions,我在Spring、Java、Hibernate和Postgresql环境中工作。我发现我的数据库速度非常慢。我的具体问题是,如果我将Spring的@Transactional注释添加到一个包含不命中数据库的方法的类中,情况会有多糟?换句话说,它们不需要事务。假设这些方法是一些更常用的方法 类似这样的事情(只是一个例子): 我知道有很多因素会导致数据库速度缓慢。我只是想知道这是一个巨大的危险信号还是不是一个大问题?我是否应该将这些方法提取出来,并将它们放入未标记为@Transactional的其他
@Transactional
注释添加到一个包含不命中数据库的方法的类中,情况会有多糟?换句话说,它们不需要事务。假设这些方法是一些更常用的方法
类似这样的事情(只是一个例子):
我知道有很多因素会导致数据库速度缓慢。我只是想知道这是一个巨大的危险信号还是不是一个大问题?我是否应该将这些方法提取出来,并将它们放入未标记为@Transactional
的其他类中
TIA首先,您的
getProjectUrl
方法将被spring aspect拦截,即:
@事务性
会导致一些开销
但是什么样的开销呢
- Java在任何情况下都可以实现方面代码
- 根据
的值,我们可能会被迫创建物理(DB)事务。这会导致网络+连接+数据库端开销@Transactional
@Transactional
,您还应该知道Postgres将任何非事务性SQL查询包装在隐式事务中():
PostgreSQL实际上将每个SQL语句视为在事务中执行。如果不发出BEGIN命令,则每个语句都有一个隐含的BEGIN和(如果成功)COMMIT
最后,答案是:如果你的方法不处理DB,就不要使用
@Transactional
。你有没有关于这个方法的基准测试,有没有@Transactional
注释?“如果我添加Spring的@Transactional
注释的话有多糟糕,除非你分析了代码,它说你有问题,我怀疑它会有问题。我不能100%确定它是否有帮助,但你可以找到使用@Transactional
@Component
@Transactional
public class ProjectManager {
public String getProjectUrl(Project project) {
//simple logic that does not use the database
return "/my/url/" + project.getId();
}
}