Java Springboot Hibernate 设置 Oracle 数据库会话参数

Posted

技术标签:

【中文标题】Java Springboot Hibernate 设置 Oracle 数据库会话参数【英文标题】:Java Springboot Hibernate setting an Oracle Database session parameter 【发布时间】:2021-11-01 07:43:54 【问题描述】:

我们的数据库管理员已建议我更改其会话的特定微服务。

alter session set optimizer_dynamic_sampling=2;

微服务服务于一个非常特殊的用例,它正在搜索大量订单(数据分为 3 个表),因此它可以在 SQL 开发人员会话中将分页结果返回给用户,在此会话更改查询时间后被切成两半。

我们的微服务是基于 Java Springboot 的,我们使用的是 JPA(Hibernate 实现),这是一个正在连接的 Oracle 数据库。正在运行的查询是本机查询。我只需要更改一次会话。出于明显的性能原因,我不想每次运行查询时都运行更改语句。话虽如此,如何确保 JPA 在我的池中创建的每个连接都使用此属性更新其相应的会话?似乎实体管理器工厂或实体管理器可以提供此功能.. 只是无法找到有关它的详细文档。

进一步说明.. 根据当前实现(该服务已经存在 2 年了),每次运行本机查询时都会创建并关闭一个实体管理器。尚无法确定这是否会使性能变得复杂,甚至还会导致性能下降。

欢迎所有提示/想法。 谢谢!

【问题讨论】:

【参考方案1】:

经过一番尝试,我发现这个 alter session 语句实际上可以作为 SQL 提示内嵌添加。

SELECT /*+ dynamic_sampling(2) */ <your columns and rest of query>

所以我会将此提示添加到当前正在运行的本机查询中。 关于这个提示的语法没有很多文档,所以需要一些试验和错误。

【讨论】:

动态采样提示的文档可以在here找到。但也许它应该在usage section 中更加突出。

以上是关于Java Springboot Hibernate 设置 Oracle 数据库会话参数的主要内容,如果未能解决你的问题,请参考以下文章

Java:SpringBoot整合hibernate-validator实现入参数据校验

Java Springboot Hibernate 设置 Oracle 数据库会话参数

springboot??????hibernate??????

Spring Boot / Thymeleaf / Hibernate:带有 Java 注解的 Sessionfactory Bean

springboot官方为何不支持mybatis,而选择底层为hibernate的JPA?

SpringBoot JPA-Hibernate