powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
31 сообщений из 31, показаны все 2 страниц
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801646
Фотография leonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В результате выполнения ожидаемых строк 10 млн. а по факту 0 строк. (на скрине).
Я правильно понимаю по было просканировано 10 млн. строк, т.к. это было в транзакции эти 10 млн. строк заблокированы до окончания транзакции?
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801655
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leonix,

зависит от уровня изоляции и типа блокировки.
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #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
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801664
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leonix,
авторВ запросе with(nolock)

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

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

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

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

ну ещё REPEATABLE READ

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

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

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

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

ну ещё REPEATABLE READ

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

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

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

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



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


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

Ваш случай самый первый
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801744
Фотография leonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgleonixНа просторах интернета нарыл вот такую таблицу. Не знаю, насколько ей можно доверять.
Мой случай выделил.

Ваш случай самый первый

У меня в транзакции.
Это в проведении документа. Проведение в транзакции.
Режим управления блокировками Управляемый.
Как определить какой у меня уровень изоляции? В профайлере?
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801749
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leonixalexeyvgпропущено...
Ваш случай самый первый

У меня в транзакции.
Это в проведении документа. Проведение в транзакции.
Режим управления блокировками Управляемый.
Как определить какой у меня уровень изоляции? В профайлере?

nolock - это синоним read uncommited
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801751
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leonixalexeyvgпропущено...
Ваш случай самый первый

У меня в транзакции.
Это в проведении документа. Проведение в транзакции.
Режим управления блокировками Управляемый.
Как определить какой у меня уровень изоляции? В профайлере?

мама дорогая, вам уже несколько раз повторили у вас в запросе использовано явное хинтование
Код: sql
1.
FROM dbo._AccumRg34172 T2 WITH(NOLOCK)

у всех таблиц табличное указание read uncommitted уровня изоляции, в таком случае у вас для чтения из этих таблиц поведение будет как на уровне изоляции read uncommitted, и совершенно пофигу что у вас изначально ваш уровень изоляции read committed


Код: sql
1.
2.
set transaction isolation level READ COMMITTED;
select * from [dbo].[table] with(nolock);


эквивалентно
Код: sql
1.
2.
set transaction isolation level READ UNCOMMITTED;
select * from [dbo].[table];



поэтому совмещаемых блокировок на уровне строк для ваших читаемых таблиц накладываться не будет. будут только блокировки sch-S на уровне таблиц.

вот если у вас в запросе на уровне изоляции read committed к примеру будет инструкция
Код: sql
1.
2.
3.
4.
set transaction isolation level read committed;
select * 
from [dbo].[table1] t1 with(nolock) 
    join [dbo].[table2] t2 on t2.[id] = t1.[id]



то table1 будет читаться без блокировки строк, а вот на строки table2 S-блокировки строк будут запрошены, также будут наложены IS на уровне страниц и объекта. (или еще возможна эскалация)
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801770
Фотография leonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня на этой таблице блокировок много.
Тогда получается, что если одна транзакция меняет хотябы одну строку в этой таблице, т.е. наложила x блокировку, то этот запрос не сможет выполниться, т.к. он пытается наложить s блокировку на все 10 млн. записей. Отсюда постоянные блокировки.
Я правильно понял?
...
Рейтинг: 0 / 0
Подскажите по плану выполнения запроса. Сколько будет заблокировано строк?
    #39801772
Фотография leonix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leonixУ меня на этой таблице блокировок много.
Тогда получается, что если одна транзакция меняет хотябы одну строку в этой таблице, т.е. наложила x блокировку, то этот запрос не сможет выполниться, т.к. он пытается наложить s блокировку на все 10 млн. записей. Отсюда постоянные блокировки.
Я правильно понял?
Не, блокировки не будет.

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


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