我正在使用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
通过这种方法可以减少响应时间,但是即使没有人使用该应用程序,也可以保持连接。闲置一段时间后,闲置时间过后,对于第一个请求的执行速度将降低,以秒为单位,这是非常糟糕的。
所以,我需要帮助来创建具有良好响应时间的稳定代码。
答案 0 :(得分:0)
创建连接需要在数据库服务器上进行大量工作:进程启动,内存分配,身份验证等。
您的解决方案-或使用connection pool-是减少Oracle应用程序中连接时间的方法。具有在应用程序中使用点附近的获取和发布的池对于计划内和计划外的数据库维护都有好处。这是由于池的内部实现。
您的服务负担是多少?您可能想启动一个池并获取/释放连接,请参阅 How to use cx_Oracle session pool with Flask gracefuly?和Unresponsive requests- understanding the bottleneck (Flask + Oracle + Gunicorn)等。专家提示:保持游泳池较小,并使最小和最大尺寸相同。
打开连接是否存在问题?那有什么影响?有一些解决方案,例如共享服务器或DRCP,但通常不需要使用它们,除非您的数据库服务器内存不足。