Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Параллеьное удаление из таблицы вызывает ожидание на блокировке. / 23 сообщений из 23, страница 1 из 1
27.02.2019, 13:30
    #39779765
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
День добрый.
Есть таблица, с именем _InfoRg6219 и колонками
[_Fld6220RRef]
[_Fld6221]
[_Fld6222_TYPE]
[_Fld6222_RTRef]
[_Fld6222_RRRef]
[_Fld6223RRef]
[_Fld281]
содержащая 7 млн строк данных и 2 индекса:
Кластерный
[_Fld281]
[_Fld6220RRef]
[_Fld6221]
[_Fld6222_TYPE]
[_Fld6222_RTRef]
[_Fld6222_RRRef]
[_Fld6223RRef]

и некластерный:
[_Fld281]
[_Fld6222_TYPE]
[_Fld6222_RTRef]
[_Fld6222_RRRef]
[_Fld6220RRef]
[_Fld6221]
[_Fld6223RRef]

Из этой таблицы в 2 транзакциях, параллельно удаляются записи запросом вида:
DELETE FROM T1
FROM dbo._InfoRg6219 T1
WHERE (T1._Fld6222_TYPE = 0x08 AND T1._Fld6222_RTRef = 0x000016E5 AND T1._Fld6222_RRRef = @P1) AND (T1._Fld281 = @P2)

План запроса прост, как палка и не менялся ни разу:
StmtText
--------
Clustered Index Delete(OBJECT:([DISTR_DE].[dbo].[_InfoRg6219].[_InfoRg6219_1] AS [T1]), OBJECT:([DISTR_DE].[dbo].[_InfoRg6219].[_InfoRg6219_2] AS [T1]), OBJECT:([DISTR_DE].[dbo].[_InfoRg6219].[_InfoRg6219_3] AS [T1]) WITH UNORDERED PREFETCH)
|--Index Seek(OBJECT:([DISTR_DE].[dbo].[_InfoRg6219].[_InfoRg6219_2] AS [T1]), SEEK:([T1].[_Fld281]=[@P2] AND [T1].[_Fld6222_TYPE]=0x08 AND [T1].[_Fld6222_RTRef]=0x000016E5 AND [T1].[_Fld6222_RRRef]=[@P1]) ORDERED FORWARD)


Уровень изоляции транзакции - READ COMMITTED SNAPSHOT

В случае, если удаляется до 500 записей, транзакции выполняются параллельно, если записей больше 5000 - 2 транзакция ждет первую.
Во всех случаях - попадание в индекс есть, сколько строк к удалению - столько строк и прочитано в Index Seek.

Эскалаций блокировки в событиях профайлера не увидел.

В событии timeout lock Блокировка - IX на объекте _InfoRg6219

Что я не понимаю или делаю не так?
...
Рейтинг: 0 / 0
27.02.2019, 13:35
    #39779769
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ну так посмотрите на каком ресурсе ждет.

UPD:
Ежов Дмитрий Сергеевич timeout lock Блокировка - IX на объекте _InfoRg6219 Запрещайте эскалацию, понижайте уровень гранулярности блокировок.
...
Рейтинг: 0 / 0
27.02.2019, 13:36
    #39779771
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий Сергеевич5000

5000 - "магическое" число эскалации блокировок

Запретите эскалацию на уровне таблицы

ALTER TABLE ... SET ( LOCK_ESCALATION = DISABLE)
...
Рейтинг: 0 / 0
27.02.2019, 13:50
    #39779789
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
msLex,

а почему я не вижу эскалацию в профайлере?
...
Рейтинг: 0 / 0
27.02.2019, 13:52
    #39779793
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Пардон, вижу, дико извиняюсь, стоял фильтр по другой БД
...
Рейтинг: 0 / 0
27.02.2019, 14:01
    #39779797
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Так.
Управлять эскалацией блокировки я не могу, запрос делает наша прекрасная 1С и вмешаться в его работу я не могу.
Я могу менять только параметр locks и флаги трассировки:
https://docs.microsoft.com/ru-ru/previous-versions/sql/sql-server-2005/ms188396(v=sql.90)
DBCC TRACEON (1221,-1);
DBCC TRACEON (1224,-1);

В MSDN говориться, что может не хватить памяти, но у нас на сервере SQL 1 Тб памяти, из которой SQL пользует только 600-700 Гб.

Кто пользовался этой штукой?
...
Рейтинг: 0 / 0
27.02.2019, 14:04
    #39779802
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий Сергеевич,

96 байт на одну... может и не хватит :) Но вроде под блокировки не всё может выделить
...
Рейтинг: 0 / 0
27.02.2019, 14:06
    #39779807
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
вру, то можно ограничить максимум

sp_configure 'locks'
...
Рейтинг: 0 / 0
27.02.2019, 14:15
    #39779820
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий Сергеевич,

емнип игры с этой настройкой заканчиваются экспоненциальным ростом времени выполнения запроса. Граница там не от скуки сделана.
...
Рейтинг: 0 / 0
27.02.2019, 14:23
    #39779829
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Владислав КолосовЕжов Дмитрий Сергеевич,

емнип игры с этой настройкой заканчиваются экспоненциальным ростом времени выполнения запроса. Граница там не от скуки сделана.
т.е. время которое будет вызывано ожиданием получения блокировки лучше
...
Рейтинг: 0 / 0
27.02.2019, 14:25
    #39779835
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
а если просто включить флаг DBCC TRACEON (1224,-1); ?
...
Рейтинг: 0 / 0
27.02.2019, 14:27
    #39779838
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий Сергеевича если просто включить флаг DBCC TRACEON (1224,-1); ?
Правильно это отключить эскалация на конкретном объекте, а не во всём борделе. Почему вам это запрещает 1С не ясно
...
Рейтинг: 0 / 0
27.02.2019, 14:38
    #39779849
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
TaPaK,

потому что сам запрос формирует сервер 1С, закрытое приложение.
Но, собственно, вопрос снят, нашел рекомендации самой 1С по флагам трассировки
https://its.1c.ru/db/metod8dev#content:5946:hdoc
...
Рейтинг: 0 / 0
27.02.2019, 14:39
    #39779851
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий СергеевичTaPaK,

потому что сам запрос формирует сервер 1С, закрытое приложение.
Но, собственно, вопрос снят, нашел рекомендации самой 1С по флагам трассировки
https://its.1c.ru/db/metod8dev#content:5946:hdoc
я всё равно не могу понять, запрос - запросом, таблица - таблицей
ALTER TABLE ... SET ( LOCK_ESCALATION = DISABLE)
...
Рейтинг: 0 / 0
27.02.2019, 14:42
    #39779854
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
TaPaK,

стоп.
ALTER TABLE ... SET ( LOCK_ESCALATION = DISABLE)
выключит эскалацию блокировок для таблицы раз и навсегда?
...
Рейтинг: 0 / 0
27.02.2019, 14:45
    #39779858
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий СергеевичTaPaK,

стоп.
ALTER TABLE ... SET ( LOCK_ESCALATION = DISABLE)
выключит эскалацию блокировок для таблицы раз и навсегда?
доставка мануала на дом:
авторDISABLE Prevents lock escalation in most cases. Table-level locks aren't completely disallowed. For example, when you're scanning a table that has no clustered index under the serializable isolation level, Database Engine must take a table lock to protect data integrity.

для вас это "выключит эскалацию блокировок для таблицы раз и навсегда"
...
Рейтинг: 0 / 0
27.02.2019, 14:46
    #39779860
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
TaPaK,

спасибо тебе, добрый человек.
...
Рейтинг: 0 / 0
27.02.2019, 17:30
    #39780002
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Ежов Дмитрий Сергеевич,

рискуете нагрузить журнал так, что сервер чихнуть не сможет. Однако, практика - критерий истины. Расскажете, что получилось, если будет желание.
...
Рейтинг: 0 / 0
27.02.2019, 17:31
    #39780004
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Владислав КолосовЕжов Дмитрий Сергеевич,

рискуете нагрузить журнал так, что сервер чихнуть не сможет. Однако, практика - критерий истины. Расскажете, что получилось, если будет желание.
а журнал то при чём?
...
Рейтинг: 0 / 0
27.02.2019, 17:35
    #39780006
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
TaPaK,

разве блокировки не пишутся в журнал? Надо освежить...
...
Рейтинг: 0 / 0
27.02.2019, 17:38
    #39780007
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
Владислав КолосовTaPaK,
разве блокировки не пишутся в журнал? Надо освежить...
я могу и ошибаться, но зачем в принципе это для лога транзакций
...
Рейтинг: 0 / 0
27.02.2019, 17:53
    #39780019
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
TaPaKВладислав КолосовTaPaK,
разве блокировки не пишутся в журнал? Надо освежить...
я могу и ошибаться, но зачем в принципе это для лога транзакций

Пишутся, вместе с операцией изменения

Нужно это, для того, чтобы в стадии UNDO база была доступна для изменения.
В стадии REDO накладываются блокировки а затем получается как бы обычный откат транзакции в рабочей базе.
...
Рейтинг: 0 / 0
27.02.2019, 18:19
    #39780037
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параллеьное удаление из таблицы вызывает ожидание на блокировке.
msLexTaPaKпропущено...

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

Пишутся, вместе с операцией изменения

Нужно это, для того, чтобы в стадии UNDO база была доступна для изменения.
В стадии REDO накладываются блокировки а затем получается как бы обычный откат транзакции в рабочей базе.
да, информация о блокировках есть. Но "больше данных" её не становится от количества этих самих блокировок. Просто для блокировки будет в строке аля
HoBt 72057594044022784:ACQUIRE_LOCK_X OBJECT: 15:1586104691:0
для ключа
HoBt 72057594044022784:ACQUIRE_LOCK_IX OBJECT: 15:1586104691:0 ;ACQUIRE_LOCK_IX PAGE: 15:1:832 ;ACQUIRE_LOCK_X KEY: 15:72057594044022784 (fb4bcb376b2f)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Параллеьное удаление из таблицы вызывает ожидание на блокировке. / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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