cx_Oracle 连接速度慢

Slow speed of cx_Oracle connection

我正在使用 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 我想要的是 减少 250ms.

的连接时间

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

我还尝试通过为连接对象声明全局变量并仅创建和关闭游标来在应用程序的整个生命周期内保持连接,如下所示将在 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

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

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

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

您的解决方案(或使用 connection pool)是减少 Oracle 应用程序连接时间的方法。在应用程序的使用点周围具有获取和释放的池有利于计划内和计划外的数据库维护。这是由于池的内部实现。

您的服务负载是多少?您可能想要启动一个池和 aquire/release 个连接,请参阅 How to use cx_Oracle session pool with Flask gracefuly? and 等。专业提示:保持池较小,并使最小和最大大小相同。

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