Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用@Transactional(readOnly=true)时延迟增加_Postgresql_Spring Boot_Jooq_Hikaricp_Pg Jdbc - Fatal编程技术网

Postgresql 使用@Transactional(readOnly=true)时延迟增加

Postgresql 使用@Transactional(readOnly=true)时延迟增加,postgresql,spring-boot,jooq,hikaricp,pg-jdbc,Postgresql,Spring Boot,Jooq,Hikaricp,Pg Jdbc,我正在使用一个后端服务(Spring Boot 2.2.13.RELEASE+Hikari+JOOQ),它使用一个AWS Aurora PostgreSQL DB集群,该集群配置有一个Writer(主)节点和一个Reader(读取副本)节点。读卡器节点一直处于空闲/暖机状态,等待在发生故障转移时升级到主节点 最近,我们决定开始为一些GET端点专门从Reader节点提供查询服务。为了实现这一点,我们使用了RoutingDataSource的“风格”,这样每当一个服务被@Transactional(

我正在使用一个后端服务(Spring Boot 2.2.13.RELEASE+Hikari+JOOQ),它使用一个AWS Aurora PostgreSQL DB集群,该集群配置有一个Writer(主)节点和一个Reader(读取副本)节点。读卡器节点一直处于空闲/暖机状态,等待在发生故障转移时升级到主节点

最近,我们决定开始为一些GET端点专门从Reader节点提供查询服务。为了实现这一点,我们使用了RoutingDataSource的“风格”,这样每当一个服务被@Transactional(readOnly=true)注释时,都会对读卡器数据源执行查询

在这里之前,一切都很顺利。然而,在应用此解决方案后,我注意到与主数据源相比,延迟增加了3倍。

深入研究后,我发现每个事务都会额外往返到db以设置会话特征:

将会话特征设置为只读 实际查询/查询 设置会话特征读写

为了改进这一点,我尝试使用pg jdbc pg jdbc 42.2.10中引入的readOnlyMode设置。此设置允许控制连接设置为只读(readOnly=true)时的行为

在我的第一次尝试中,我使用了readOnly=true和readOnlyMode=always。尽管我弯腰看到SET会话特征语句,但延迟保持不变。最后,我尝试使用readOnly=false和readOnlyMode=ignore。最后一个选项导致延迟减少,但仍然比以前更糟

其他人有过这种设置的经验吗?什么是最佳配置? 我不需要将事务标记为只读(除了告诉路由数据源使用读取副本之外),因此我想知道是否可以执行其他操作,以便Writer和Reader节点之间的延迟保持不变


注意:目前,读卡器节点仅为所有流量的1%(+-20req/s)提供服务。

请确认,因为您提到了jOOQ:您是否同时使用了此
@Transactional
注释和jOOQ的事务API?我只使用了@Transactional注释。