我有一个API服务,使用odbc_connect
, odbc_exec
从数据库加载数据。
我有一个100行查询,我决定将其移动到存储过程中。服务请求数约为每秒10个。
那么问题是什么:当使用像SELECT smthng
这样的常规查询时,一切工作正常,当在过程服务中使用相同的SELECT
时,开始响应非常慢。它是由于数据库中有很多打开的连接没有关闭而导致的。
在odbc_exec
和odbc_fetch
之后,我直接尝试了odbc_close_all
-没有帮助。
SELECT count(*)
FROM master..sysprocesses
WHERE suid > 0
返回500个连接。
我也试着设置
SET PROC_RETURN_STATUS OFF
手册中的页面说:
如果有打开的事务,这个函数将失败连接。在这种情况下,连接将保持打开状态。
我认为这解释了你所面临的行为。我认为,当存储过程将完成它的工作,losted
连接将死亡。无论如何,你的情况需要做一些调查。