cx_Oracle连接速度慢

时间:2020-02-25 09:07:20

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

我正在使用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,因此使用此代码,当整个响应时间为500ms时,250ms的连接时间太长。

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

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

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

1 个答案:

答案 0 :(得分:0)

创建连接需要在数据库服务器上进行大量工作:进程启动,内存分配,身份验证等。

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

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

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

相关问题