Postgresql 使用@Transactional(readOnly=true)时延迟增加
我正在使用一个后端服务(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节点之间的延迟保持不变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(
注意:目前,读卡器节点仅为所有流量的1%(+-20req/s)提供服务。请确认,因为您提到了jOOQ:您是否同时使用了此
@Transactional
注释和jOOQ的事务API?我只使用了@Transactional注释。