Здравствуйте.
Не могу найти как в Lazarus в компонентах TSQL... изменить время ожидания выполнения запроса.
Нагуглить смог только для TADO... компонент.
например
TADODataSet(ADOStoredProc1).CommandTimeout := 30000;
Я так понял аналогичный TSQLDataSet отсутствует.
Подскажите пожалуйста.
как изменить ConnectionTimeOut в TSQL.... компонентах
Модератор: Модераторы
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Это как где. Для мускула выставляется в параметрах соединения, например, для текущей сессии.
Снег Север писал(а):Это как где. Для мускула выставляется в параметрах соединения, например, для текущей сессии.
Мне нужно для MS SQL Server
Для MySQL это параметр в TMySQL**Connection ? или установка значения в первом запросе соединения?
Добавлено спустя 17 минут 4 секунды:
Поясню задачу.
Rest сервер написанный на Lazarus+Indy10 работает.
Параметры из URL строки или json из body передает в Хранимые процедуры, обратно получает json строку
Но 2 самых тяжелых POST запроса, стабильно отрабатывают только в часы низкой загрузки сервера. В часы пик ни ответа нет, ни соответственно нужных записей в базе не возникает.
Видимо соединение прерывается со стороны клиента из-за длительного времени выполнения.
Вот и ищу как увеличить время ожидания.
И получается это должна быть установка именно в компонентах TSQLConnection или TSQLQuery
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
У коннекшена есть свойство параметры, там задаются параметры sql server connection string, которые не входят явно в пропертях. Для разных серверов они могут отличаться в названиях. Попробуйте там просто вписать CommandTimeout = ... сколько вам надо.
Точно! про это я не подумал.
Дописал
MSSQLConnect_thread.Params.Add('AutoCommit=true');
MSSQLConnect_thread.Params.Add('TextSize=16777216');
MSSQLConnect_thread.Params.Add('CommandTimeout=30');
MSSQLConnect_thread.Params.Add('ApplicationName='+AppName);
Буду тестировать.
Нагуглить удалось только варианты для IB/FB и MySQL там другой синтаксис параметра.
Спасибо!
Дописал
MSSQLConnect_thread.Params.Add('AutoCommit=true');
MSSQLConnect_thread.Params.Add('TextSize=16777216');
MSSQLConnect_thread.Params.Add('CommandTimeout=30');
MSSQLConnect_thread.Params.Add('ApplicationName='+AppName);
Буду тестировать.
Нагуглить удалось только варианты для IB/FB и MySQL там другой синтаксис параметра.
Спасибо!
jsa
MSSQL - штука хитрющая. Вдобавок, судя по Вашим словам, сервак сильно нагружен и ответ от него об истечении таймаута на сервере Вы просто не получите. Ведь Вы этот параметр пересылаете серверу, клиентский компонент тут не при делах.
Попробуйте поговорить с ним на его же языке:
У Вас, как минимум, должны быть права на возможность конфигурации.
Результат не гарантирую...
MSSQL - штука хитрющая. Вдобавок, судя по Вашим словам, сервак сильно нагружен и ответ от него об истечении таймаута на сервере Вы просто не получите. Ведь Вы этот параметр пересылаете серверу, клиентский компонент тут не при делах.
Попробуйте поговорить с ним на его же языке:
Код: Выделить всё
SQLScript1.Script.Add('USE master;');
SQLScript1.Script.Add('GO');
SQLScript1.Script.Add('EXECUTE sp_configure '+#39+'remote query timeout'+#39+', 3600*24');
SQLScript1.Script.Add('RECONFIGURE');
SQLScript1.Script.Add('GO');
SQLScript1.Execute;У Вас, как минимум, должны быть права на возможность конфигурации.
Результат не гарантирую...
Vadim писал(а):MSSQL - штука хитрющая. Вдобавок, судя по Вашим словам, сервак сильно нагружен и ответ от него об истечении таймаута на сервере Вы просто не получите. Ведь Вы этот параметр пересылаете серверу, клиентский компонент тут не при делах.
Попробуйте поговорить с ним на его же языке:
...
В данном случае этот метод не нужен. Дело именно в клиенте (в сессии), т.к. множество основных клиентов работающих с этим сервером, вполне себе нормально ожидают ответа тяжелых/больших запросов .
