不使用数据库连接池的原因?

时间:2011-03-04 13:12:35

标签: database connection-pooling

我最近发现了一个自动创建的连接字符串,指定了“Pooling = False”,并想知道为什么设置这样。根据我的理解,只要不完全错误配置,汇集几乎总是有利的。

是否有任何理由禁用合并?它取决于操作系统,物理连接还是使用的DBMS?

3 个答案:

答案 0 :(得分:3)

是的,有理由禁用池。您需要检查特定池库如何处理临时网络断开连接。例如,如果连接丢失但连接对象仍处于活动状态,则某些数据库驱动程序和/或池库不会执行任何操作。池不会重新生成新连接,而是会为您提供过时的连接,您将收到错误。某些池实现通过在提供与应用程序的连接之前向服务器发出一些快速命令来检查连接是否处于活动状态。如果他们得到错误,他们会杀死该连接并产生一个新连接。在启用池之前,您始终需要针对此类场景测试池库。

答案 1 :(得分:2)

如果它是单线程应用程序,则池化似乎是不必要的。它是在资源有限的设备上吗?启动时间对应用程序很重要吗?这些因素可能会导致决定关闭合并。

总的来说,我认为你是合适的,汇集是有益的。如果它是一个典型的网络应用程序,那么我会询问它。

答案 2 :(得分:2)

原因必须是您的上下文正在尝试更改底层数据库的状态,例如,如果您正在做一些影响TLS(传输层安全性)的事情,则不应使用连接池,因为LDAP不会跟踪任何此类状态更改,如果您这样做,您将妥协安全问题。