繁体   English   中英

没有连接可用时的HikariCP行为

[英]HikariCP behavior when no connection is available

我注意到,即使数据库关闭,因此池中实际上没有可用的连接,Hikari CP仍会等待连接超时到期,然后再向客户端发送异常。

我同意这在数据库可用时是可取的,但就我而言,我希望在没有连接可用时,池不要在发送异常之前等待。

原因是数据库本身的响应时间少于2ms,因此我每秒可以处理数千个事务,但是当没有可用连接时,池将等待更长的时间(建议的最小可接受超时为250 ms),因此我可以不再处理吞吐量。 另一方面,我的逻辑可以在没有数据库的情况下工作一段时间。

我应该如何处理?

编辑:

该链接几乎是我想要实现的,减去了我希望HikariCP自动执行此操作的事实,我不应该激活暂停状态。

也许您应该在应用程序代码中的某个地方引入一个计数器,如果并发请求数超过该值,请不要使用数据库。 在不知道您要处理的内容(例如读取与写入)的情况下很难分辨。

根据关于connectionTimeout超时属性的brettwooldridge注释,由于线程调度,即使有可用的连接,较低的超时也不可靠:

我们当然可以考虑较低的楼层,但是绝对最小为125ms。

Windows和Linux的默认调度程序时间间隔均为20ms。 如果在4核CPU上运行16个线程,则仅允许一个线程运行最多80ms。 如果池由于(例如)在maxLifetime退出连接而导致空闲,那么这将浪费宝贵的时间来建立连接以填充插槽,而不会将虚假故障返回给客户端。

如果未认真考虑以确保CPU和调度程序不会过饱和(以125ms的超时运行),则即使池具有可用的连接,也会使您的应用程序层出现虚假故障的风险。 例如,在4核CPU上运行32个线程可能导致负载不足的线程饥饿长达120ms-非常接近边缘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM