У меня есть служба API, которая использует odbc_connect
, odbc_exec
загрузить данные из базы данных.
У меня есть запрос из 100 строк, который я решил перенести в хранимую процедуру. Количество запросов на обслуживание составляет около 10 в секунду.
Так в чем же проблема: при использовании обычного запроса вроде SELECT smthng
все работает нормально, при использовании такой же SELECT
в процедуре служба начинает отвечать очень медленно. Это вызывает много открытых соединений в базе данных, которая не закрывается.
Я старался odbc_close_all
сразу после odbc_exec
а также odbc_fetch
— не помогает
SELECT count(*)
FROM master..sysprocesses
WHERE suid > 0
возвращает около 500 соединений.
Также я попытался установить
SET PROC_RETURN_STATUS OFF
Тоже не поможет.
Страница из руководство говорит:
Эта функция не будет работать, если на этом есть открытые транзакции
подключение. В этом случае соединение останется открытым.
Я думаю, что это объясняет поведение, с которым вы сталкиваетесь.
Я думаю, что когда хранимая процедура закончит свою работу, losted
связь умрет.
Во всяком случае, здесь необходимо провести некоторые исследования.
Других решений пока нет …