Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите по плану выполнения запроса. Сколько будет заблокировано строк? / 25 сообщений из 31, страница 1 из 2
15.04.2019, 16:44
    #39801646
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
В результате выполнения ожидаемых строк 10 млн. а по факту 0 строк. (на скрине).
Я правильно понимаю по было просканировано 10 млн. строк, т.к. это было в транзакции эти 10 млн. строк заблокированы до окончания транзакции?
...
Рейтинг: 0 / 0
15.04.2019, 16:51
    #39801655
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonix,

зависит от уровня изоляции и типа блокировки.
...
Рейтинг: 0 / 0
15.04.2019, 16:53
    #39801657
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
В запросе with(nolock)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
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
...
Рейтинг: 0 / 0
15.04.2019, 17:04
    #39801664
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonix,
авторВ запросе with(nolock)

ну так и на первую половину вопроса отвечайте
...
Рейтинг: 0 / 0
15.04.2019, 17:09
    #39801668
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonix

1. У вас локальная временная таблица, зачем вам вообще беспокоиться о блокировках?
2. при nolock накладывается только schema stability блокировка на таблицу, чтобы избежать модификации ее структуры в процессе получения данных. Она будет снята сразу после завершении стейтмента.
3. только при уровне изоляции serializable на объекте могут остаться блокировки после завершения читающего стейтмента
...
Рейтинг: 0 / 0
15.04.2019, 17:11
    #39801669
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
msLexleonix

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

за стеной красного текста не увидел остальные объекты.
первый пункт вычеркиваем.
...
Рейтинг: 0 / 0
15.04.2019, 17:12
    #39801672
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
msLex,

ну ещё REPEATABLE READ

хотя NOLOCK ничего деражать "после" не будет
...
Рейтинг: 0 / 0
15.04.2019, 17:15
    #39801673
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
Насколько я понял идёт длительная транзакция с уровнем изоляции READ COMMITTED.

Меня ещё интересует, судя по скрину, сканируется 10 млн? Т.е. скуль перебирает 10 млн?
...
Рейтинг: 0 / 0
15.04.2019, 17:17
    #39801675
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixНасколько я понял идёт длительная транзакция с уровнем изоляции READ COMMITTED.

Меня ещё интересует, судя по скрину, сканируется 10 млн? Т.е. скуль перебирает 10 млн?
Estimate это сколько он "прикинул" что прийдётся читать
...
Рейтинг: 0 / 0
15.04.2019, 17:17
    #39801678
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
TaPaK,
а по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?
...
Рейтинг: 0 / 0
15.04.2019, 17:20
    #39801679
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixа по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?Смотреть не оценку плана выполнения, а реальный план выполнения.
...
Рейтинг: 0 / 0
15.04.2019, 17:22
    #39801681
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixTaPaK,
а по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?
по факту этот блок вообще не выполянлся ни разу
...
Рейтинг: 0 / 0
15.04.2019, 17:22
    #39801682
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
alexeyvgleonixа по факту сколько просканировал?
Я подозреваю что все 10 млн, но как в этом убедиться?Смотреть не оценку плана выполнения, а реальный план выполнения.

Спасибо! Сейчас попробуй.
...
Рейтинг: 0 / 0
15.04.2019, 17:22
    #39801683
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
TaPaKmsLex,

ну ещё REPEATABLE READ

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

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

Я хотел описать ситуацию как у ТС, селект перебрав 10 млн строк не возвращает данные, но забыл указать этот пункт.
А с учетом того, что у ТС не 1 таблица (как мне показалось вначале), а несколько, то и в этом случае REPEATABLE READ может оставить блокировки, если фильтрация произошла не при вычитки из объекта, а позже, например фильтрация по данным другой таблицы.
...
Рейтинг: 0 / 0
15.04.2019, 17:25
    #39801686
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
Хм, ну что-то он должен был прочитать, чтобы убедиться, что данных нет на первой же странице. Если там только не констрейнт помог.
...
Рейтинг: 0 / 0
15.04.2019, 17:29
    #39801689
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
Владислав КолосовХм, ну что-то он должен был прочитать, чтобы убедиться, что данных нет на первой же странице. Если там только не констрейнт помог.
там может быть все, что угодно

скан внутри nested loop, который не выполнился ни разу
стартап предикат
...
Рейтинг: 0 / 0
15.04.2019, 17:29
    #39801690
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
Вот факт получил.
Теперь интересует блокирует 10 млн или нет?
...
Рейтинг: 0 / 0
15.04.2019, 17:32
    #39801691
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixВот факт получил.
Теперь интересует блокирует 10 млн или нет?



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


будут блокировки на уровне таблицы в insert, но, какие - вопрос
...
Рейтинг: 0 / 0
15.04.2019, 17:37
    #39801695
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
На просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.
...
Рейтинг: 0 / 0
15.04.2019, 17:38
    #39801697
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
...
Рейтинг: 0 / 0
15.04.2019, 17:38
    #39801699
leonix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
Если у меня сканируется вся таблица (там всего 10 млн.), то на всю таблицу накладывается S блокировка.
То при попытке другого запроса наложить X хотябы на одну запись у меня будет блокировка.
Я правильно понимаю, если верить этой табличке?
...
Рейтинг: 0 / 0
15.04.2019, 17:39
    #39801700
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixМой случай выделил.
NOLOCK -- это не READ COMMITTED.
...
Рейтинг: 0 / 0
15.04.2019, 17:40
    #39801701
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
я не вижу у вас begin tran
...
Рейтинг: 0 / 0
15.04.2019, 17:43
    #39801702
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixНа просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.
это вам так хочется? Прочитайте что делает NOLOCK
...
Рейтинг: 0 / 0
15.04.2019, 17:52
    #39801704
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
leonixНа просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.

Ваш случай самый первый
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите по плану выполнения запроса. Сколько будет заблокировано строк? / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]