cx_Oracle connection pooling



我来自Java背景,当我在oracle中看到用于连接池的java api时,oracle驱动程序本身提供了连接池。但是在cx_Oracle的情况下,我只看到一个包含threaded=true或使用SessionPooling的选项。

目前我将使用线程 - true 选项。但我不确定使用此选项可以获得多少并发性。这是真正的连接池还是有其他方法可以完成此操作。

cx_Oracle文档说:

"线程参数应该是一个布尔表达式,它指示 Oracle 是否应该使用互斥锁包装对连接的访问。在单线程应用程序中这样做会带来大约 10-15% 的性能损失,这就是默认值为 False 的原因。

我们如何将cx_Oracle配置为具有连接池而不是会话池。因为两者在甲骨文中是不同的吧?

感谢您的时间和建议。

OracleOCI 文档中有一些关于何时使用连接池与会话池的讨论点。

对于无状态连接(可以说是更常见的情况(,请使用会话池:

  • 所有会话池管理均由 OCI 处理。

  • 与运行时负载平衡 (RLB( 事件集成以获得更好的性能。

  • 与 FAN 事件和应用程序连续性集成,以提高可用性。

  • 与 DRCP 集成以获得更好的可扩展性。

cx_Oracle不支持连接池,仅支持会话池。如果您计划在应用程序中使用并发性,并且与会话池的使用无关,则只需要 threaded=True 选项。使用这种技术可以获得相当合理的并发性,特别是如果数据库所需的时间明显超过在 Python 中处理数据所需的时间。

正如Chris所提到的,你也可以在Python中"滚动自己的"连接池,没有太多困难,但是使用内置的会话池功能也有好处。

希望能回答你的问题!

最新更新