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

Откуда:
Сообщений: 1197
Привет

в профайлере вижу 2 запроса к одной и той же процедуре с разным параметрами (что говорит о параллельных запросах).
Дата начала и дата окончания у обеих вызовов одинакова,А время выполнения 100 секунд, что говорит что пересечение по времени есть.

Что смущеает? Смущает что в процедуре не так много кода и он выглядит так.
Я вижу что есть блокировка таблицы. Как такое может быть: процедуры выполнялись параеллельно, а в процедуре есть блокировка на момент апдейта?

SET NOCOUNT ON;    
 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;  

DECLARE @SQLSTR NVARCHAR(4000)        
 SET  @SQLSTR = ''    
    
    
 SET @SQLSTR = @SQLSTR + 'UPDATE tbl WITH (TABLOCK) ....'

PRINT @SQLSTR    
 EXEC sp_executesql @SQLSTR     
23 янв 12, 17:53    [11954768]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
Я вижу что есть блокировка таблицы. Как такое может быть: процедуры выполнялись параеллельно, а в процедуре есть блокировка на момент апдейта?

И что странного. Сначала один апдейт выполнился, потом второй
23 янв 12, 17:57    [11954839]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
Я вижу что есть блокировка таблицы. Как такое может быть: процедуры выполнялись параеллельно, а в процедуре есть блокировка на момент апдейта?

И что странного. Сначала один апдейт выполнился, потом второй


странно, что, насколько я понимаю на время апдейта таблица лочится целиком.
А время начала и время окончания 2 вызовов одинаковое, хотя время выполнения каждого запроса 100 секунд.
23 янв 12, 17:59    [11954865]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
странно, что, насколько я понимаю на время апдейта таблица лочится целиком.

Ну не на 100лет же она лочится ?
23 янв 12, 18:05    [11954937]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
странно, что, насколько я понимаю на время апдейта таблица лочится целиком.

Ну не на 100лет же она лочится ?


нет. но из 100 секунд думаю, лок занимает 80% точно. А время начала и выполнения запросов одинаково. Как такое может быть?
процедура состоит из формирования динамического запроса для апдейта и его выполнения. всё

запрос очень просто формируется. а вот апдейт делает джойн с таблицой из другой базы.
23 янв 12, 18:08    [11954983]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
нет. но из 100 секунд думаю, лок занимает 80% точно.

Вы это все видите из одного единственного события выполнения процедуры ?
23 янв 12, 18:09    [11954992]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

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

А вот почему вы решили, что блокировка таблицы в update начнется раньше, чем будут выбраны данные для этого update ?
23 янв 12, 18:11    [11955011]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
запрос очень просто формируется. а вот апдейт делает джойн с таблицой из другой базы

А вот почему вы решили, что блокировка таблицы в update начнется раньше, чем будут выбраны данные для этого update ?


сейчас посмотрел там сразу 5 запрсоов начали и закончились в одно и тоже время. Процедура одна и та же.

т.е. вы имеете ввиду, что на время селекта не будет блокировки, а будет только на время апдейта?

хорошо.
но как объяснить что у всех 5 запросов к одной процедуре время начала и окончания одинаково вплоть до секунд?
23 янв 12, 18:21    [11955133]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
сейчас посмотрел там сразу 5 запрсоов начали и закончились в одно и тоже время. Процедура одна и та же.

Смотрел что ?

relief
т.е. вы имеете ввиду, что на время селекта не будет блокировки, а будет только на время апдейта?

То вы уверяете, что "Я вижу что есть блокировка таблицы", то задаете вопрос о том, когда и какие блокировки на какие объекты накладываются.

relief
но как объяснить что у всех 5 запросов к одной процедуре время начала и окончания одинаково вплоть до секунд?

Почему оно _должно_ быть разное ?
23 янв 12, 18:24    [11955155]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
запрос очень просто формируется. а вот апдейт делает джойн с таблицой из другой базы

А вот почему вы решили, что блокировка таблицы в update начнется раньше, чем будут выбраны данные для этого update ?


а подскажите когда идет конструкция

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

UPDATE tbl with(TABLELOCK)


я правильно понимаю, что на время апдейта ВСЕХ записей удовлетворяющих условию в таблице происходит лок всей таблицы?
23 янв 12, 18:27    [11955181]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
сейчас посмотрел там сразу 5 запрсоов начали и закончились в одно и тоже время. Процедура одна и та же.

Смотрел что ?

relief
т.е. вы имеете ввиду, что на время селекта не будет блокировки, а будет только на время апдейта?

То вы уверяете, что "Я вижу что есть блокировка таблицы", то задаете вопрос о том, когда и какие блокировки на какие объекты накладываются.

relief
но как объяснить что у всех 5 запросов к одной процедуре время начала и окончания одинаково вплоть до секунд?

Почему оно _должно_ быть разное ?


1. смотрел запросы в профайлере
2. я имел ввиду, что во время апдейта идет джойн с другой таблицей. и я думал, что сначал идет селект для джойна, а потом для выбранных записей идет апдейт с блокировкой

3. если у меня процедура состоит из 2 шагов:
фомирование запроса и его выполнения. причем выполнение идет с блокировкой таблицы. А запрос идет 100 сек. А после выполнения запроса ничего нет. Как оно может быть одинаково?
23 янв 12, 18:32    [11955229]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
я правильно понимаю, что на время апдейта ВСЕХ записей удовлетворяющих условию в таблице происходит лок всей таблицы?

Вопрос не только в том, что блокируется
Но и в том, когда начинает блокироваться
И когда заканчивается
Для этого профайлере есть соответстствующие события
23 янв 12, 18:33    [11955239]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
1. смотрел запросы в профайлере

И какие конктрено события вы мониторили/сравнивали

relief
2. я имел ввиду, что во время апдейта идет джойн с другой таблицей. и я думал, что сначал идет селект для джойна, а потом для выбранных записей идет апдейт с блокировкой

Можно не предполагать, а точно узнать это из того же профайлера

relief
3. если у меня процедура состоит из 2 шагов:
фомирование запроса и его выполнения. причем выполнение идет с блокировкой таблицы. А запрос идет 100 сек. А после выполнения запроса ничего нет. Как оно может быть одинаково?

Ответьте на вопрос - почему время должно быть разное то ?
Если вы даже не знаете когда какие блокировки происходят
23 янв 12, 18:36    [11955260]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
я правильно понимаю, что на время апдейта ВСЕХ записей удовлетворяющих условию в таблице происходит лок всей таблицы?

Вопрос не только в том, что блокируется
Но и в том, когда начинает блокироваться
И когда заканчивается
Для этого профайлере есть соответстствующие события


аа, ок. посмотрю.
Спасибо!
23 янв 12, 18:38    [11955275]     Ответить | Цитировать Сообщить модератору
 Re: Анализ запроса  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
1. смотрел запросы в профайлере

И какие конктрено события вы мониторили/сравнивали

relief
2. я имел ввиду, что во время апдейта идет джойн с другой таблицей. и я думал, что сначал идет селект для джойна, а потом для выбранных записей идет апдейт с блокировкой

Можно не предполагать, а точно узнать это из того же профайлера

relief
3. если у меня процедура состоит из 2 шагов:
фомирование запроса и его выполнения. причем выполнение идет с блокировкой таблицы. А запрос идет 100 сек. А после выполнения запроса ничего нет. Как оно может быть одинаково?

Ответьте на вопрос - почему время должно быть разное то ?
Если вы даже не знаете когда какие блокировки происходят


1. StartTime, EndTime
2. А подскажите пожалуйста как сделать такой фильтр, чтобы видеть все внутренности вызова нужной процедуры?
3. потому что после блокировки ничего нет в коде. Но я проверю Время начала и окончания блокировки, как вы советавали выше
23 янв 12, 18:41    [11955296]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить