Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cx\U Oracle连接速度慢_Python_Python 3.x_Database_Oracle_Cx Oracle - Fatal编程技术网

Python cx\U Oracle连接速度慢

Python cx\U Oracle连接速度慢,python,python-3.x,database,oracle,cx-oracle,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和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\u Oracle.connect(dbconstr)的连接时间大约是250ms,整个代码将在500ms内运行,我想要的是减少250ms的连接时间

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

我还尝试在应用程序的生命周期内维护连接a,方法是为connect对象声明全局变量,并仅创建和关闭游标,如下所示将导致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
通过这种方法可以缩短响应时间,但即使没有人使用应用程序,也可以保持连接。在空闲一段时间后,第一个请求的执行速度将在空闲一段时间后降低,以秒为单位,这是非常糟糕的


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

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

您的解决方案(或使用a)是减少Oracle应用程序连接时间的方法。在应用程序的使用点附近具有acquire&release的池对于计划内和计划外的数据库维护都有好处。这是由于池的内部实现

你的服务负担有多大?您可能希望启动一个池并获取/释放连接,请参阅 等等。专业提示:保持池小,使最小和最大大小相同


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

如果ping服务器,需要多少钱?您最好确保连接始终处于打开状态,尤其是对于您的第二个版本。conction.ping()需要20毫秒的响应。我还尝试了使用cx\u oralce
cx\u Oracle.SessionPool('username','password','databaseip/sid',min=4,max=4,increment=0,threaded=True)与connection.aquire()进行会话池(
)。我确实得到了速度提升,但过了一段时间它就断开了。轮询的连接未得到维护。我在请求之前获得了一个连接,并在请求之后释放了到池的连接。请使用最新的Oracle客户端库(它们可能比您正在使用的版本具有更好的死连接检测)。19c客户端库可以连接到Oracle DB 11.2或更高版本。找出什么在扼杀连接(以及何时),并停止它。例如,禁用防火墙,删除数据库资源配置文件。如果这些都是原因,而您无法修复它们,那么请尝试使用EXPIRE_TIME,例如,请参阅
dbsession_pool=cx_Oracle.SessionPool('username','password','databaseurl/sid?EXPIRE_TIME=2',min=1,max=1,increment=0)