Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Взаимоблокировки при автоматическом создании статистики / 10 сообщений из 10, страница 1 из 1
05.07.2020, 15:27
    #39976436
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
Искал, в чем "тормоза", оказалось, что запрос приводит к взаимоблокировке при автоматическом создании статистики. Отключение этой настройке в базе приводит к моментальному выполнению. Причем, эти блокировки не завершают аварийно запрос (костыль от SQL team?). Выполняется SELECT из очереди брокера в качестве теста очереди.

Как это можно победить, если ли возможность хинтами или трейсфлагом отключить автосоздание статистик при запросе?
...
Рейтинг: 0 / 0
05.07.2020, 16:24
    #39976444
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
1. xdl-файл практически бесполезен для анализа.
2. Вариант создания необходимых статистик вручную не рассматривается?
...
Рейтинг: 0 / 0
05.07.2020, 17:45
    #39976465
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
Владислав Колосов,

Ошибка же будет только 1 раз, по идее, ваше ПО должно ее обработать и перезапустить запрос.
Ну и обновить сервер пробовали?
...
Рейтинг: 0 / 0
05.07.2020, 18:03
    #39976469
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
Владислав Колосов,

Просто хочу поинтересоваться: а в чем сакральный смысл использования ddl инструкций в перемешку с dml в единой транзакции?

чисто имхо: это архитектурно неправильно, хотя конечно Вам виднее.
...
Рейтинг: 0 / 0
06.07.2020, 12:03
    #39976620
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
felix_ff,

это тест, поэтому и мешанина.

Не думаю, что вручную можно создать эти статистики, отключение автосоздания в базе не желательно, как я понимаю. Если не ошибаюсь, то система пытается создать статистики для очереди брокера, к которой выполняется запрос.
...
Рейтинг: 0 / 0
06.07.2020, 12:06
    #39976622
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
invm,

что лучше использовать для анализа? Этот файл (xml) получен из данных расширенных событий.
...
Рейтинг: 0 / 0
06.07.2020, 12:36
    #39976634
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
Владислав Колосов,

Я имел в виду, выкладывать сразу в виде xml. Иначе нужны лишние действия по сохранению и переименованию.

Если судить по
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 <resource-list>
  <objectlock lockPartition="0" objid="2116254644" subresource="FULL" dbid="6" objectname="unknown" id="lock2018ddc2080" mode="Sch-M" associatedObjectId="2116254644">
   <owner-list>
    <owner id="process201c71d44e8" mode="Sch-S" requestType="wait" />
   </owner-list>
   <waiter-list>
    <waiter id="process201c073a8c8" mode="Sch-S" requestType="wait" />
   </waiter-list>
  </objectlock>
  <objectlock lockPartition="0" objid="2116254644" subresource="FULL" dbid="6" objectname="unknown" id="lock2018ddc2080" mode="Sch-M" associatedObjectId="2116254644">
   <owner-list>
   <owner id="process201c073a8c8" mode="Sch-M" />
   <owner id="process201c073a8c8" mode="Sch-S" requestType="wait" />
   </owner-list>
   <waiter-list>
    <waiter id="process201c71d44e8" mode="Sch-S" requestType="wait" />
   </waiter-list>
  </objectlock>
 </resource-list>
</deadlock>


Дедлок вообще какой-то странный и непонятный.
Спорный ресурс один...
process201c073a8c8 конфликтует сам с собой...

Имхо, самый простой выход - установить deadlock priority = high.
Еще можно попробовать убрать NOLOCK.
...
Рейтинг: 0 / 0
06.07.2020, 12:36
    #39976635
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
Владислав Колосов,

Вы можете создать необходимые статистики для очереди вручную, поскольку очередь это всего лишь таблица. правда нужно подключение через DAC.

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

что лучше использовать для анализа?

Так в том то и проблема что конфликтуют Sch-M с Sch-S

Sch-M получается из-за ALTER QUEUE, а Sch-S пытается получить любая читающая сессия.

вопрос: зачем в какую то общую логику под транзакцию засовывать инструкцию ALTER?
...
Рейтинг: 0 / 0
06.07.2020, 13:13
    #39976654
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
Я находил описание схожей проблемы у других пользователей. Проблема не проблема на самом деле, т.к. 14 секунд выполнения вместо 1 в режиме тестирования. Однако, самым простым способом показалось отключение автоматического создания статистик.

Спасибо за рекомендации.
...
Рейтинг: 0 / 0
06.07.2020, 13:25
    #39976658
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Взаимоблокировки при автоматическом создании статистики
felix_ff
Sch-S пытается получить любая читающая сессия.
Не совсем.
Только "безблокировочные", т.е. nolock или rcsi или snapshot. Остальные накладывают IS уровня таблицы.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Взаимоблокировки при автоматическом создании статистики / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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