Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
День добрый!
Есть сервис отчетности. Он оперирует таблицами отчетности. Потребовалось создать механизм расчета и контроля значений таблиц по формулам. Я сделал хранимую процедуру. В общих чертах ее принцип работы такой:
1) Получить список формул таблицы одной очереди исполнения
2) Подготовить данные для проведения расчетов
3) Выполнить расчеты
4) Получить идентификатор следующей очереди исполнения и перейти к п.1
Код выкладывать не буду, ибо 40 листов формата А4 вряд ли кто-то будет читать.
Переход к следующей очереди исполнения осуществляю через GOTO поскольку велик риск преодолеть (что, собственно, сразу же и случилось) предел вложенности вызовов функций.
Пока с таблицей формул связано мало, проблем нет. Но, если формул становится много, подготовка данных для расчетов занимает существенное время. И появляется риск получить таймаут от сервера.
Можно увеличить время таймаута, но это не панацея. Риск всё равно остается.
В JS есть интересная особенность. Иногда нужно выполнить какие-то действия в цикле или в ряде вызываемых друг из друга функций. В этом случае, если количество инструкций переваливает за 5 млн., IE начнет распинаться перед пользователем о зависшем скрипте. Но, если исполнение всего этого массива инструкций разбить на вызовы отдельных функций через setTimeout(), то проблема пропадает - при каждом вызове setTimeout() IE начинает подсчет количества инструкций заново. Остальные браузеры определяют зависший скрипт (по сути таймаут) через 30 сек. и мне пока не доводилось так их нагрузить. Но не исключаю, что и здесь можно таким же образом избежать проблемы.
Так вот хотелось бы знать, можно ли в MS SQL сотворить нечто подобное, или все же таймаут считается от поступления запроса до момента ответа и никак мою проблему разумными средствами не решить?
3 сен 15, 09:59    [18102570]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
demoniqus
Так вот хотелось бы знать, можно ли в MS SQL сотворить нечто подобное, или все же таймаут считается от поступления запроса до момента ответа и никак мою проблему разумными средствами не решить?

Серверу все равно, что там клиент считает таймаутом.
3 сен 15, 10:03    [18102596]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
demoniqus,

А не лучше ли это всё в ETL перенести? В SSIS пакет.
3 сен 15, 10:41    [18102850]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
demoniqus,

сиквел по умолчанию не запрещает выполнять запросы любой продолжительности. Разрывать по длительности соединение или нет всегда решает клиент, а не сервер.
3 сен 15, 12:08    [18103541]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
Yuri, я не спец в этой области и хотелось бы поподробнее...
Если я правильно понял про ETL (по википедии), то по сути моя процедура так и организована: сначала всё, что только возможно, выгружается во временные таблицы; потом производится обработка данных; в заключение данные из времянок отправляются обратно в постоянные таблицы. Это дало хороший прирост производительности... но потом пришло понимание, что рассчитываемые формулы могут использовать результат обработки других формул - так возникла очередь выполнения, а с ней и необходимость каждый раз заново подготавливать данные во временные таблицы, обращаясь к тяжеловесным постоянным таблицам. Так что времени я сэкономил тут не слишком густо, разве что в плане памяти выигрыш остался, т.к. не приходится делать JOIN'ы на невразумительных объемах данных.
Про пакеты пока читаю на msdn, но что-то мне пока кажется, что пакеты не решат проблему и сервер, как только истечет установленный лимит времени, просто загасит выполнение пакета и выкинет ошибку...
3 сен 15, 12:15    [18103583]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
Владислав, а можно указание на источник этой информации, если Вам не трудно?
3 сен 15, 12:16    [18103586]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
demoniqus
как только истечет установленный лимит времени, просто загасит выполнение пакета и выкинет ошибку...

Еще раз. У серера нет никаких ограничений на время _выполнения_ запроса.
3 сен 15, 12:17    [18103596]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Glory
demoniqus
как только истечет установленный лимит времени, просто загасит выполнение пакета и выкинет ошибку...

Еще раз. У серера нет никаких ограничений на время _выполнения_ запроса.


А что такое мы тогда определяем здесь ?

Data Source=server;Initial Catalog=databaseUser Id=username;Password=password;Connect Timeout=30
3 сен 15, 12:23    [18103622]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Glory
пропущено...

Еще раз. У серера нет никаких ограничений на время _выполнения_ запроса.


А что такое мы тогда определяем здесь ?

Data Source=server;Initial Catalog=databaseUser Id=username;Password=password;Connect Timeout=30

Здесь вы определяете время, которое клиентское приложение будет ожидать установление соедениния с сервером.
3 сен 15, 12:25    [18103643]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
demoniqus
Владислав, а можно указание на источник этой информации, если Вам не трудно?


Какой источник? У сервера нет настроек на разрыв соединения. С чего бы это он вообще стал делать?
3 сен 15, 12:29    [18103657]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Хорошо SSIS -> Execute SQL

каким таймаутом определяется время отваливания по такой ошибке?

"Execute Load_Person_Penalty_Full:Ошибка: Сбой выполнения запроса ""exec [Stage].[Load_Person_Penalty_Full]"" со следующей ошибкой: ""Превышено время ожидания запроса на блокировку."". Возможные причины сбоя: проблемы с этим запросом, свойство ""ResultSet"" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.
"
3 сен 15, 12:33    [18103675]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
каким таймаутом определяется время отваливания по такой ошибке?

Вы читать умеете ? "Превышено время ожидания запроса на блокировку"
3 сен 15, 12:34    [18103684]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
a_voronin
каким таймаутом определяется время отваливания по такой ошибке?


гугли CommandTimeOut и потом ищи в недрах своего клиента настройку
3 сен 15, 12:35    [18103686]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Glory
a_voronin
каким таймаутом определяется время отваливания по такой ошибке?

Вы читать умеете ? "Превышено время ожидания запроса на блокировку"


умею, а где задаётся время такого ожидания?
3 сен 15, 12:35    [18103687]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
Glory
пропущено...

Вы читать умеете ? "Превышено время ожидания запроса на блокировку"


умею, а где задаётся время такого ожидания?

В хелпе. locking timeout
3 сен 15, 12:36    [18103693]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
Glory, судя по msdn, Вы правы...


SqlConnection.ConnectionTimeout - Получает время ожидания при попытке установки подключения, по истечении которого попытка подключения завершается и создается ошибка.
3 сен 15, 12:37    [18103694]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
demoniqus
Glory, судя по msdn, Вы правы...

Такое впечатление, что вы буквально несколько минут назад узнали про msdn
3 сен 15, 12:39    [18103707]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Glory,

скорее query wait, чтобы не писать в каждой команде

USE AdventureWorks2012 ;
GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
GO
EXEC sp_configure 'query wait', 7500 ;
GO
RECONFIGURE;
GO


чтобы не писать в каждом запросе

SET LOCK_TIMEOUT timeout_period
3 сен 15, 12:43    [18103737]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
Glory, про msdn я знаю давно, однако SQL не является моим основным направлением, а потому про msdn вспоминаю лишь тогда, когда он попадается в выдаче поисковика. Да и непонятно было, что вообще искать (не вкуривать же весь их сайт!), пока здесь не привели в пример конфигурационную строку...)))
Просто поставили мне задачу и сказали, что Родина ждет от меня только победы...
3 сен 15, 12:46    [18103760]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
demoniqus
Glory, про msdn я знаю давно, однако SQL не является моим основным направлением, а потому про msdn вспоминаю лишь тогда, когда он попадается в выдаче поисковика. Да и непонятно было, что вообще искать (не вкуривать же весь их сайт!), пока здесь не привели в пример конфигурационную строку...)))

Это вы сейчас рассказываете причину того, почему вы сразу не стали читать в msdn про таймауты строки соединения ?
3 сен 15, 12:52    [18103819]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
Glory, я интересовался не про таймауты соединения. Про них, как про таковые, я имею представление. Мне был задан вопрос насчет времени выполнения моей процедуры. Оценить его пока невозможно, ибо нет подходящего объема данных, а сгенерировать его трудозатратно. И более того, сейчас мне приводится в пример другой отдел, также занимающийся разработками - у них процедуры, выполняющиеся дольше одной минуты, вроде как все же слетают по таймауту выполнения... То ли настройка у них какая-то все же сделана, чтобы не позволять выполнять какую-либо процедуру вечно, то ли что-то иное...
3 сен 15, 13:01    [18103894]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
demoniqus
Мне был задан вопрос насчет времени выполнения моей процедуры.

Выполнение процедуры невозможно без установления соединения из вашего клиенского кода.
В котором используется строка соединения.
В которой есть параметры.
О чем и говорится в сообщении об ошибке.
Почему вы начали искать проблему на сервере, а не в своем коде ?
3 сен 15, 13:05    [18103928]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
demoniqus,

да не слетают, у них КЛИЕНТ отключает соединение.
3 сен 15, 13:06    [18103934]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
demoniqus
Member

Откуда: Ото всюду
Сообщений: 37
Glory, проблемы пока не возникало. Как я сказал, оценить время выполнения моей функции весьма затруднительно в силу ряда причин:
1) отсутствие достаточного объема данных
2) нельзя предсказать сложность и количество формул
3) сами формулы зачастую имеют шаблонную запись, что означает: одна формула может "размножаться" и 100 и более раз
4) пользователь далеко не всегда будет использовать самые оптимальные формы записи
5) и куча других
Я его оценил навскидку секунд в 30-40 для "тяжелых случаев", а мне упомянули про эту пресловутую минуту... Вот и пытаюсь понять, что можно и нужно ли вообще что-то делать...

Владислав Колосов, я попробую порыться в указанном Вами направлении. Может действительно так настроен клиент, что сам рвет соединение по заданному таймауту...
3 сен 15, 13:23    [18104066]     Ответить | Цитировать Сообщить модератору
 Re: Возможен таймаут сервера - как его избежать  [new]
Glory
Member

Откуда:
Сообщений: 104751
a_voronin
чтобы не писать в каждом запросе

SET LOCK_TIMEOUT timeout_period

SET-ы вообще-то действуют на текущий коннект

a_voronin
скорее query wait, чтобы не писать в каждой команде

Ага. Типа запустил один ssis, а посыпались все коннекты
3 сен 15, 13:42    [18104237]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить