【问题标题】:Disable all JPA Transactions in Spring Boot app在 Spring Boot 应用程序中禁用所有 JPA 事务
【发布时间】:2023-03-25 15:54:02
【问题描述】:

我想在我的 Spring Boot 服务中禁用所有 JPA 事务以提高性能。我的应用程序处理许多数据库操作并提高性能,我想在状态语句池中的 PostgreSQL 数据库中使用 pgBouncer (https://wiki.postgresql.org/wiki/PgBouncer#Feature_matrix_for_pooling_modes)

事务使数据库操作非常缓慢(可能???)。

是否有可能禁用所有 JPA 事务?

我的典型存储库:

public interface AgreementRepository extends JpaRepository<Agreement, Long> {

    List<Agreement> findByClientIdAndProductIdIn(Long clientId, List<Long> productIds);
}

我的 pom:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1206-jdbc42</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>26.0-jre</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
            <version>${spring.cloud.starter.zipkin.sleuth}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
            <version>${spring.cloud.starter.zipkin.sleuth}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

    </dependencies>

也许我应该更改默认隔离级别以提高性能?我的应用处理的数据库操作太多,整个过程非常缓慢。

提前致谢。

【问题讨论】:

  • 你确定是因为交易??
  • 不,我不确定,但我必须提高我的应用程序的性能......有人告诉我,这可能是我的应用程序在数以千计的数据库操作中如此缓慢的原因...... . 欢迎任何其他关于如何加速我的应用程序的建议
  • 不,我不确定,但我必须提高我的应用程序的性能。 所以你不确定,但你想禁用 Tx,因为它解决了以下问题其他人在非常不同的情况下。恕我直言,方法不好。
  • 我的服务有许多“搜索器”,它们在大数据库上执行多个搜索操作并将结果保存在另一个数据库中(非常小而且速度很快)这听起来像是缺失索引和写得不好的查询 - 事务不是罪魁祸首,禁用它们也不会帮助您。
  • 如果您的查询返回 10 个或更少的结果,请尝试直接在数据库上运行 EXPLAIN 以查看哪些索引(或哪些不是)并尝试添加一些索引以提高性能。如果您有数十或数百个结果 - 那不会很快。只选择您需要的,例如,如果您只需要 emptoyee 的“姓名”,则不要获取整个员工 - 水合和数据 IO 需要大量时间(相对)

标签: hibernate spring-boot jpa spring-transactions


【解决方案1】:

如果你实现了一个 JpaRepository 查找方法默认是@Transactional(readOnly=true)

根据 Vlad Mihalcea 的博客,他是 Hibernate 提交者,这已经是性能优化的: https://vladmihalcea.com/spring-read-only-transaction-hibernate-optimization/

所以我假设您的问题与交易无关。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-11-04
  • 2020-12-21
  • 2017-06-30
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 2018-08-17
  • 2018-09-17
相关资源
最近更新 更多