cx_Oracle连接池

时间:2017-08-22 05:06:07

标签: cx-oracle

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

目前我将使用threaded-true选项。但我不确定使用此选项可以获得多少并发性。这是真正的连接池还是有另一种方法来完成这项工作。

cx_Oracle文档说:

"螺纹参数应该是一个布尔表达式,表示Oracle是否应该使用互斥锁包装对连接的访问。在单线程应用程序中执行此操作会导致性能损失约10-15%,这就是默认值为False的原因。"

我们如何配置cx_Oracle以建立连接池而不是会话池。因为在oracle中两者都不同吗?

感谢您的时间和建议。

2 个答案:

答案 0 :(得分:1)

Oracle OCI doc中有关于何时使用连接池与会话池的讨论点。

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

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

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

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

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

答案 1 :(得分:1)

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

正如克里斯提到的,你可以自己推动自己的"连接池以及Python中没有太多困难,但使用内置会话池功能有一些优势。

希望能回答你的问题!