Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Братья и сестры.

Есть ли возможность задать каким-то образом в одной транзакции, где несколько запросов, для соответствующего запроса максимальное время выполнения?

Ситуация такая: используется CLR, который сходу на все проверить невозможно. И возникают ситуации "закольцевания". (по мимо того, что это можно наверное решить тупо счетчиком итераций, что не хотелось бы). Запрос в этом случае ждет максимальное доступное время.

Примерно такой смысл
[sql]-- гдето здесь таймаут выставить, т.к. проверка функции по сути, терпимо, чем потом проблемы, которые могут возникнуть, если этого не проверить до след шага.
select dbo.SomeFunc(Field) from SomeTable

-- а здесь обнулить
update something from something[/sql]
11 окт 13, 19:03    [14958184]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
слегка черезжопно и с клиента - можно поставить Command Timeout на выполнение батча
но вроде как это не гарантирует, что запрос тут же снимется по факту таймаута
11 окт 13, 19:17    [14958233]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
_Промешан_, нельзя. Только на весь батч, как сказал Crimean
11 окт 13, 20:15    [14958352]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
второй "черезжопный" вариант - "метить" процесс вплоть до context_info и вешать "следилку", которая киляет по разнице getdate() с lastbatch из процессов....
11 окт 13, 20:45    [14958458]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Crimean
второй "черезжопный" вариант - "метить" процесс вплоть до context_info и вешать "следилку", которая киляет по разнице getdate() с lastbatch из процессов....
Мда...
То есть в теле процедуры, без участия клиента, вообще никак?..
11 окт 13, 22:31    [14958784]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
_Промешан_,

можно ограничить время ожидания блокировки. это если "честно"
остальное "честно же" я не представляю как ограничить
ресурсы - можно зажать. проц и память - так точно
но сиквел изначально построен на неопределенном времени выполнения, это же не реалтайм система
а обойти это видится только как внешний контроль над известным процессом
вариантов - масса, но все с точки зрения контролируемого процесса - внешние
имхо, конечно же
11 окт 13, 22:44    [14958845]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
p.s.

пересмотрел вопрос еще раз. так - еще сложнее. ибо 1 выполнение CLR UDF может быть и быстрым. а вот сколько их будет выполнено в итоге сервером - тот еще вопрос. я про execution count. было бы просто что-то типа

select @result = someproc( @someparams )

можно было бы внутри этой CLR себя же контролировать..
так что пока только внешний контроль выполнения
это кстати не исключает реализации в хранимке же
но не самыми очевидными средствами
11 окт 13, 22:55    [14958888]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
aleks2
Guest
Crimean
слегка черезжопно и с клиента - можно поставить Command Timeout на выполнение батча
но вроде как это не гарантирует, что запрос тут же снимется по факту таймаута

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

Откуда:
Сообщений: 970
aleks2
Crimean
слегка черезжопно и с клиента - можно поставить Command Timeout на выполнение батча
но вроде как это не гарантирует, что запрос тут же снимется по факту таймаута

Как раз это гарантируется.
Как показывает практика применения компонентов SDAC - таймаут, выставляемый в компонентах не соответствует реальности. Например, выставляешь 2000 (в секундах) - а он через минуту вываливается в лок-реквест. Хотя тот же запрос в SSMS отрабатывает расчудесно.

С урезанием ресурсов не пробовал (вопроса не стояло) :)
Может быть тут сработает? :)

Crimean
можно было бы внутри этой CLR себя же контролировать..
так что пока только внешний контроль выполнения
это кстати не исключает реализации в хранимке же
но не самыми очевидными средствами

Да, разве что контроль внутри себя. Но тогда ошибок не найти, если они есть (а они могут быть).
16 окт 13, 13:30    [14979743]     Ответить | Цитировать Сообщить модератору
 Re: Максимальное время выполнения запроса в одной транзакции. Можно как-то задать?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
_Промешан_,

а мы таймауты не путаем? их несколько, и лок таймаут слегка отличается от комманд таймаута
16 окт 13, 14:54    [14980415]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить