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

Откуда:
Сообщений: 382
В результате выполнения ожидаемых строк 10 млн. а по факту 0 строк. (на скрине).
Я правильно понимаю по было просканировано 10 млн. строк, т.к. это было в транзакции эти 10 млн. строк заблокированы до окончания транзакции?

К сообщению приложен файл. Размер - 11Kb
15 апр 19, 16:44    [21862796]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
Владислав Колосов
Member

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

зависит от уровня изоляции и типа блокировки.
15 апр 19, 16:51    [21862809]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
В запросе with(nolock)

exec sp_executesql N'INSERT INTO #tt90 WITH(TABLOCK) (_Q_001_F_000RRef, _Q_001_F_001RRef, _Q_001_F_002RRef, _Q_001_F_003_TYPE, _Q_001_F_003_S, _Q_001_F_003_RRRef, _Q_001_F_004) SELECT TOP 332
T1.Fld34174RRef,
T1.Fld34175RRef,
T1.Fld34173RRef,
T1.Fld35801_TYPE,
T1.Fld35801_S,
T1.Fld35801_RRRef,
CAST(SUM(T1.Fld34179Turnover_) AS NUMERIC(27, 3))
FROM (SELECT
T2._Period AS Period_,
T2._RecorderTRef AS RecorderTRef,
T2._RecorderRRef AS RecorderRRef,
T2._Fld34175RRef AS Fld34175RRef,
T2._Fld34174RRef AS Fld34174RRef,
T2._Fld35801_TYPE AS Fld35801_TYPE,
T2._Fld35801_S AS Fld35801_S,
T2._Fld35801_RRRef AS Fld35801_RRRef,
T2._Fld34173RRef AS Fld34173RRef,
CAST(SUM(CASE WHEN T2._RecordKind = 0.0 THEN T2._Fld34179 ELSE -T2._Fld34179 END) AS NUMERIC(21, 3)) AS Fld34179Turnover_
FROM dbo._AccumRg34172 T2 WITH(NOLOCK)
WHERE T2._Active = 0x01 AND (EXISTS(SELECT
1
FROM #tt85 T3 WITH(NOLOCK)
WHERE (T2._Fld34174RRef = T3._Q_000_F_002RRef) AND (T2._Fld35801_TYPE = CASE WHEN (T3._Q_000_F_017_TYPE = 0x08 AND T3._Q_000_F_017_S = @P1 AND T3._Q_000_F_017_RRRef = @P2) THEN T3._Q_000_F_020_TYPE ELSE T3._Q_000_F_017_TYPE END AND T2._Fld35801_S = CASE WHEN (T3._Q_000_F_017_TYPE = 0x08 AND T3._Q_000_F_017_S = @P3 AND T3._Q_000_F_017_RRRef = @P4) THEN T3._Q_000_F_020_S ELSE T3._Q_000_F_017_S END AND T2._Fld35801_RRRef = CASE WHEN (T3._Q_000_F_017_TYPE = 0x08 AND T3._Q_000_F_017_S = @P5 AND T3._Q_000_F_017_RRRef = @P6) THEN T3._Q_000_F_020_RRRef ELSE T3._Q_000_F_017_RRRef END)))
GROUP BY T2._Period,
T2._RecorderTRef,
T2._RecorderRRef,
T2._Fld34175RRef,
T2._Fld34174RRef,
T2._Fld35801_TYPE,
T2._Fld35801_S,
T2._Fld35801_RRRef,
T2._Fld34173RRef
HAVING (CAST(SUM(CASE WHEN T2._RecordKind = 0.0 THEN T2._Fld34179 ELSE -T2._Fld34179 END) AS NUMERIC(21, 3))) <> 0.0) T1
LEFT OUTER JOIN dbo._Document567 T4 WITH(NOLOCK)
ON T1.RecorderTRef = 0x00000237 AND T1.RecorderRRef = T4._IDRRef
LEFT OUTER JOIN dbo._Document27909 T5 WITH(NOLOCK)
ON T1.RecorderTRef = 0x00006D05 AND T1.RecorderRRef = T5._IDRRef
LEFT OUTER JOIN dbo._Document46085 T6 WITH(NOLOCK)
ON T1.RecorderTRef = 0x0000B405 AND T1.RecorderRRef = T6._IDRRef
WHERE (CASE WHEN T1.RecorderTRef = 0x00000237 THEN T4._Fld16218_TYPE WHEN T1.RecorderTRef = 0x00006D05 THEN T5._Fld27910_TYPE WHEN T1.RecorderTRef = 0x0000B405 THEN CASE WHEN T6._Fld47647RRef IS NOT NULL THEN 0x08 END ELSE CAST(NULL AS BINARY(1)) END = 0x08 AND CASE WHEN T1.RecorderTRef = 0x00000237 THEN T4._Fld16218_RTRef WHEN T1.RecorderTRef = 0x00006D05 THEN T5._Fld27910_RTRef WHEN T1.RecorderTRef = 0x0000B405 THEN CASE WHEN T6._Fld47647RRef IS NOT NULL THEN 0x00000153 END ELSE CAST(NULL AS BINARY(4)) END = 0x0000B405 AND CASE WHEN T1.RecorderTRef = 0x00000237 THEN T4._Fld16218_RRRef WHEN T1.RecorderTRef = 0x00006D05 THEN T5._Fld27910_RRRef WHEN T1.RecorderTRef = 0x0000B405 THEN T6._Fld47647RRef ELSE CAST(NULL AS BINARY(16)) END = @P7)
GROUP BY T1.Fld34174RRef,
T1.Fld34175RRef,
T1.Fld34173RRef,
T1.Fld35801_TYPE,
T1.Fld35801_S,
T1.Fld35801_RRRef',N'@P1 nvarchar(4000),@P2 varbinary(16),@P3 nvarchar(4000),@P4 varbinary(16),@P5 nvarchar(4000),@P6 varbinary(16),@P7 varbinary(16)',N'',0x943500505688064611E49FDF661DC874,N'',0x943500505688064611E49FDF661DC874,N'',0x943500505688064611E49FDF661DC874,0x9C8EAC1F6B0C185F11E95F48CD9A6402
15 апр 19, 16:53    [21862811]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
leonix,
автор
В запросе with(nolock)

ну так и на первую половину вопроса отвечайте
15 апр 19, 17:04    [21862823]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
msLex
Member

Откуда:
Сообщений: 6245
leonix

1. У вас локальная временная таблица, зачем вам вообще беспокоиться о блокировках?
2. при nolock накладывается только schema stability блокировка на таблицу, чтобы избежать модификации ее структуры в процессе получения данных. Она будет снята сразу после завершении стейтмента.
3. только при уровне изоляции serializable на объекте могут остаться блокировки после завершения читающего стейтмента
15 апр 19, 17:09    [21862831]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
msLex
Member

Откуда:
Сообщений: 6245
msLex
leonix

1. У вас локальная временная таблица, зачем вам вообще беспокоиться о блокировках?
2. при nolock накладывается только schema stability блокировка на таблицу, чтобы избежать модификации ее структуры в процессе получения данных. Она будет снята сразу после завершении стейтмента.
3. только при уровне изоляции serializable на объекте могут остаться блокировки после завершения читающего стейтмента


за стеной красного текста не увидел остальные объекты.
первый пункт вычеркиваем.
15 апр 19, 17:11    [21862834]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
msLex,

ну ещё REPEATABLE READ

хотя NOLOCK ничего деражать "после" не будет
15 апр 19, 17:12    [21862837]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
Насколько я понял идёт длительная транзакция с уровнем изоляции READ COMMITTED.

Меня ещё интересует, судя по скрину, сканируется 10 млн? Т.е. скуль перебирает 10 млн?
15 апр 19, 17:15    [21862838]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
leonix
Насколько я понял идёт длительная транзакция с уровнем изоляции READ COMMITTED.

Меня ещё интересует, судя по скрину, сканируется 10 млн? Т.е. скуль перебирает 10 млн?

Estimate это сколько он "прикинул" что прийдётся читать
15 апр 19, 17:17    [21862840]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
TaPaK,
а по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?
15 апр 19, 17:17    [21862845]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
leonix
а по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?
Смотреть не оценку плана выполнения, а реальный план выполнения.
15 апр 19, 17:20    [21862847]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
leonix
TaPaK,
а по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?

по факту этот блок вообще не выполянлся ни разу
15 апр 19, 17:22    [21862852]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
alexeyvg
leonix
а по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?
Смотреть не оценку плана выполнения, а реальный план выполнения.


Спасибо! Сейчас попробуй.
15 апр 19, 17:22    [21862853]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
msLex
Member

Откуда:
Сообщений: 6245
TaPaK
msLex,

ну ещё REPEATABLE READ

хотя NOLOCK ничего деражать "после" не будет


Да, конечно REPEATABLE READ оставляет блокировки по выбранным данным.

Я хотел описать ситуацию как у ТС, селект перебрав 10 млн строк не возвращает данные, но забыл указать этот пункт.
А с учетом того, что у ТС не 1 таблица (как мне показалось вначале), а несколько, то и в этом случае REPEATABLE READ может оставить блокировки, если фильтрация произошла не при вычитки из объекта, а позже, например фильтрация по данным другой таблицы.
15 апр 19, 17:22    [21862854]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6532
Хм, ну что-то он должен был прочитать, чтобы убедиться, что данных нет на первой же странице. Если там только не констрейнт помог.
15 апр 19, 17:25    [21862859]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
msLex
Member

Откуда:
Сообщений: 6245
Владислав Колосов
Хм, ну что-то он должен был прочитать, чтобы убедиться, что данных нет на первой же странице. Если там только не констрейнт помог.

там может быть все, что угодно

скан внутри nested loop, который не выполнился ни разу
стартап предикат
15 апр 19, 17:29    [21862862]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
Вот факт получил.
Теперь интересует блокирует 10 млн или нет?

К сообщению приложен файл. Размер - 12Kb
15 апр 19, 17:29    [21862863]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
msLex
Member

Откуда:
Сообщений: 6245
leonix
Вот факт получил.
Теперь интересует блокирует 10 млн или нет?

Картинка с другого сайта.


вам же уже сказали, nolock (AKA readuncommitted) не накладывает блокировок на уровне строк


будут блокировки на уровне таблицы в insert, но, какие - вопрос
15 апр 19, 17:32    [21862865]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
На просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.

К сообщению приложен файл. Размер - 35Kb
15 апр 19, 17:37    [21862872]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/transactions-transact-sql?view=sql-server-2017
15 апр 19, 17:38    [21862874]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
leonix
Member

Откуда:
Сообщений: 382
Если у меня сканируется вся таблица (там всего 10 млн.), то на всю таблицу накладывается S блокировка.
То при попытке другого запроса наложить X хотябы на одну запись у меня будет блокировка.
Я правильно понимаю, если верить этой табличке?
15 апр 19, 17:38    [21862876]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36269
leonix
Мой случай выделил.

NOLOCK -- это не READ COMMITTED.
15 апр 19, 17:39    [21862877]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
Konst_One
Member

Откуда:
Сообщений: 11297
я не вижу у вас begin tran
15 апр 19, 17:40    [21862878]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
leonix
На просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.

это вам так хочется? Прочитайте что делает NOLOCK
15 апр 19, 17:43    [21862879]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28723
leonix
На просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.

Картинка с другого сайта.
Ваш случай самый первый
15 апр 19, 17:52    [21862883]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить