java - Java Springboot Hibernate 设置 Oracle 数据库会话参数
问题描述
我们的数据库管理员推荐了一个特定的微服务,我改变了它的会话。
alter session set optimizer_dynamic_sampling=2;
微服务服务于一个非常特殊的用例,它正在搜索大量订单(数据分为 3 个表),因此它可以将分页结果返回给用户,在 SQL 开发人员会话中进行此会话更改后,查询时间被缩短一半。
我们的微服务是基于 Java Springboot 的,我们使用的是 JPA(Hibernate 实现),这是一个正在连接的 Oracle 数据库。正在运行的查询是本机查询。我只需要更改一次会话。出于明显的性能原因,我不想每次运行查询时都运行更改语句。话虽如此,如何确保 JPA 在我的池中创建的每个连接都使用此属性更新其相应的会话?似乎实体管理器工厂或实体管理器可以提供这个..只是无法找到关于它的详细文档。
进一步说明.. 根据当前实现(该服务已经存在 2 年了),每次运行本机查询时都会创建并关闭一个实体管理器。尚无法确定这是否会导致性能下降甚至导致性能下降。
欢迎所有提示/想法。谢谢!
解决方案
在玩了一些之后,我发现这个 alter session 语句实际上可以作为 SQL 提示在线添加。
SELECT /*+ dynamic_sampling(2) */ <your columns and rest of query>
所以我会将此提示添加到当前正在运行的本机查询中。关于这个提示的语法没有很多文档,所以有一些试验和错误。
推荐阅读
- typescript - 几乎任何来自“any”的类型(任何,但一个)
- linux - 为什么 CPU 使用率超过 100%?
- sas - 如何在 SAS 中按类型将观察结果分组在一起
- python - 如何在基类中定义静态但动态的属性?
- python - 比较python pandas中的日期
- firebase - 无法从 Firebase 承诺中访问我的商店
- c# - 在 Azure AppService 中获取 X509Certificate2.PrivateKey 时出错
- swift - 矩阵的快速舍入元素
- matlab - 使用 MATLAB 提取文本文件中的特定行号
- python - 计算满足条件的连续值的数量(Pandas Dataframe)