как изменить ConnectionTimeOut в TSQL.... компонентах

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

как изменить ConnectionTimeOut в TSQL.... компонентах

Сообщение jsa »

Здравствуйте.
Не могу найти как в Lazarus в компонентах TSQL... изменить время ожидания выполнения запроса.
Нагуглить смог только для TADO... компонент.
например
TADODataSet(ADOStoredProc1).CommandTimeout := 30000;

Я так понял аналогичный TSQLDataSet отсутствует.

Подскажите пожалуйста.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Это как где. Для мускула выставляется в параметрах соединения, например, для текущей сессии.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Снег Север писал(а):Это как где. Для мускула выставляется в параметрах соединения, например, для текущей сессии.

Мне нужно для 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 = ... сколько вам надо.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Точно! про это я не подумал.
Дописал
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 там другой синтаксис параметра.
Спасибо!
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

jsa
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;

У Вас, как минимум, должны быть права на возможность конфигурации.
Результат не гарантирую... :-)
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Vadim писал(а):MSSQL - штука хитрющая. Вдобавок, судя по Вашим словам, сервак сильно нагружен и ответ от него об истечении таймаута на сервере Вы просто не получите. Ведь Вы этот параметр пересылаете серверу, клиентский компонент тут не при делах. ;-)
Попробуйте поговорить с ним на его же языке:
...

В данном случае этот метод не нужен. Дело именно в клиенте (в сессии), т.к. множество основных клиентов работающих с этим сервером, вполне себе нормально ожидают ответа тяжелых/больших запросов .
Ответить