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我在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

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

因此,我希望在创建具有良好响应时间的稳定代码方面得到帮助。

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

您的解决方案(或使用连接池(是减少Oracle应用程序中连接时间的方法。一个带有acquire&围绕应用程序中的使用点发布有利于计划内和计划外的数据库维护。这是由于池的内部实现。

你的服务负载是多少?您可能想要启动一个池并获取/释放连接,请参阅如何优雅地使用带有Flask的cx_Oracle会话池?以及无响应请求-了解瓶颈(Flask+Oracle+Gunicorn(等。专业提示:保持游泳池小,并使最小&最大大小相同。

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

最新更新