2016-11-09 54 views
1

我有一个API服务,它使用odbc_connect,odbc_exec从数据库加载数据。PHP没有关闭与数据库的连接(odbc)

我有一个100行查询,我决定移动到存储过程。服务请求的数量约为每秒10个。

那么,什么是问题:当使用像SELECT smthng这样的常规查询一切正常,当在一个过程中使用相同的SELECT服务开始响应很慢。它会导致数据库中的许多打开的连接无法关闭。

我试过odbc_close_all之后直接odbc_execodbc_fetch - 没有帮助。

SELECT count(*) 
FROM master..sysprocesses 
WHERE suid > 0 

返回约500个连接。

我也试图设置

SET PROC_RETURN_STATUS OFF 

也没有帮助。

回答

1

页从manual说:如果有这个 连接打开交易

此功能将失败。在这种情况下,连接将保持打开状态。

我认为这解释了你所面对的行为。 我认为当存储过程完成它的工作时,losted连接就会死掉。无论如何,在这里你的案例需要一些研究。

+0

但是我只在得到结果后才关闭连接。在这种情况下会失败吗? – Daria

+0

所以..从PHP你执行调用存储过程,获得结果,关闭连接,并且它不关闭(执行存储过程后)?在这种情况下你使用交易吗? –

+0

不,你是什么意思“交易”?我的查询是'EXECUTE procName $ param'; – Daria