【问题标题】:Slow speed of cx_Oracle connectioncx_Oracle 连接速度慢
【发布时间】:2020-02-25 09:07:20
【问题描述】:

我正在使用 cx_oracle 和 python 3.7 连接到 oracle 数据库并执行存储在 oracle 数据库中的存储过程。

现在我连接到数据库如下

dbconstr = "username/password@databaseip/sid"
db_connection = cx_Oracle.connect(dbconstr)
cursor = db_connection.cursor()

#calling sp here

cursor.close()
db_connection.close()

但在此代码中,cx_Oracle.connect(dbconstr) 的连接时间约为 250ms,整个代码将在 500ms 左右运行想要减少 250 毫秒的连接时间

我在python中使用flask rest-api,此代码用于此,当整个响应时间为500ms时,250ms的连接太长了。

我还尝试通过为连接对象声明全局变量并仅创建和关闭游标来在应用程序的整个生命周期内维护连接,如下所示将在 250ms

dbconstr = "username/password@databaseip/sid"
db_connection = cx_Oracle.connect(dbconstr)

def api_response():
    cursor = db_connection.cursor()
    #calling sp here
    cursor.close()
    return result

通过这种方法可以减少响应时间,但即使没有人使用该应用程序,连接也会得到维持。闲置一段时间后,第一个请求的执行速度会在闲置一段时间后降低,以秒为单位,非常糟糕。

所以,我需要帮助创建具有良好响应时间的稳定代码。

【问题讨论】:

  • 如果你ping你的服务器,需要多少钱?而且您最好确保连接始终处于正常状态,尤其是对于您的第二个版本。
  • conection.ping() 需要 20 毫秒的响应时间

标签: python python-3.x database oracle cx-oracle


【解决方案1】:

创建连接涉及数据库服务器上的大量工作:进程启动、内存分配、身份验证等。

您的解决方案 - 或使用 connection pool - 是减少 Oracle 应用程序连接时间的方法。在应用程序的使用点附近具有获取和发布的池对于计划内和计划外的数据库维护有好处。这是由于池的内部实现。

您的服务有什么负载?您可能想要启动一个池并获取/释放连接,请参阅 How to use cx_Oracle session pool with Flask gracefuly?Unresponsive requests- understanding the bottleneck (Flask + Oracle + Gunicorn) 等。专业提示:保持池较小,并使最小和最大尺寸相同。

打开连接是否有问题?这有什么影响?有一些解决方案,例如共享服务器或 DRCP,但通常不需要使用它们,除非您的数据库服务器内存不足。

【讨论】:

  • 我还尝试使用 cx_oralce cx_Oracle.SessionPool( 'username', 'password', 'databaseip/sid', min=4, max=4, increment=0, threaded=True) 和 connection.aquire() 进行 session_pooling。我确实获得了速度提升,但一段时间后它会断开连接。轮询连接没有得到维护。我在请求之前获取了一个连接,并在请求到池后释放了连接。
  • 使用最新的 Oracle 客户端库(它们可能比您使用的版本有更好的死连接检测)。 19c 客户端库可以连接到 Oracle DB 11.2 或更高版本。找出是什么导致了联系(以及何时),并停止它。例如。禁用防火墙,删除数据库资源配置文件。如果这些是原因并且您无法修复它们,请尝试 EXPIRE_TIME,例如见cx-oracle.readthedocs.io/en/latest/user_guide/…
  • dbsession_pool = cx_Oracle.SessionPool( 'username', 'password', 'databaseurl/sid?expire_time=2', min=1, max=1, increment=0) 为我工作
猜你喜欢
  • 2012-11-11
  • 1970-01-01
  • 2013-11-10
  • 2012-08-17
  • 2013-01-13
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多