Ожидания RESOURCE_SEMAPHORE и RESOURCE_SEMAPHORE_QUERY_COMPILE – внешние проявления, и как с ними бороться

8 Comments

  1. bulpi

    1)Эта статья была бы значительно полезнее для 1с-ников, если бы Вы приводили тексты запросов на языке 1с

    2)Что касается запроса по бизнес-процессам, то ошибка, ИМХО, очевидна, и это не отсутствие индекса, а отсутствие ограничения выборки по дате снизу.

    Reply
  2. fhqhelp

    Да, наверное нужно было исходный код.

    Отбор по дате есть.

    Тут методологическое скорее.. отчет запускается с пустыми по-умолчанию датами, и работает ветка «ВЫБОР КОГДА &Дата2 = ДАТАВРЕМЯ(1, 1, 1) ТОГДА &Дата1 <= Обращение.Дата» .. т.е. «И ‘1753-01-01 00:00:00’ <= Обращение.Дата»

    Отбор есть — толку нет.

    На предложение «а давайте воткнем по-умолчанию последний год» последует «а у нас задания и по пять лет висят».

    ВЫБРАТЬ
    …
    ИЗ
    БизнесПроцесс.Обращение КАК Обращение
    ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.Задание КАК Задание
    ПО Обращение.Ссылка = Задание.Обращение И (Задание.ОсновноеЗадание = ЗНАЧЕНИЕ(БизнесПроцесс.Задание.ПустаяССылка))
    ГДЕ
    НЕ Обращение.ПометкаУдаления
    И Обращение.Инициатор = &Инициатор
    И НЕ Обращение.Состояние В (&СписокСост)
    И ВЫБОР КОГДА &Дата2 = ДАТАВРЕМЯ(1, 1, 1) ТОГДА  &Дата1 <= Обращение.Дата ИНАЧЕ Обращение.Дата МЕЖДУ &Дата1 И &Дата2 КОНЕЦ
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    …
    ИЗ
    БизнесПроцесс.Задание КАК Задание
    ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.Обращение КАК Обращение
    ПО Задание.Обращение = Обращение.Ссылка
    ГДЕ
    Задание.Инициатор = &Инициатор
    И НЕ Задание.Состояние В (&СписокСост)
    И ВЫБОР КОГДА &Дата2 = ДАТАВРЕМЯ(1, 1, 1) ТОГДА &Дата1 <= Обращение.Дата ИНАЧЕ Обращение.Дата МЕЖДУ &Дата1 И &Дата2 КОНЕЦ

    Показать

    Reply
  3. bulpi

    (2)

    Не…. Такой отбор по дате не поможет. Поздно пить боржоми, когда почки сели 🙂 Нужно не полениться, и ввести отборы по дате ВНУТРЬ каждой таблицы, а именно : заменить текст

    ВЫБРАТЬ
    …
    ИЗ
    БизнесПроцесс.Обращение КАК Обращение
    

    На

    ВЫБРАТЬ
    …
    ИЗ
    (ВЫБРАТЬ
    * ИЗ
    БизнесПроцесс.Обращение
    ГДЕ Дата>=&ДатаНижнейГраницы
    ) КАК Обращение

    Пусть даже эта ДатаНижнейГраницы будет 5 лет назад. Ты же выбираешь сначала ВСЕ (все миллионы записей), а потом уже в последнем ГДЕ отсекаешь по дате, это не помогает.

    Reply
  4. triviumfan

    (2) Странно, криминала то тут не видно = Может отбор по дате в соединение «запилить»?

    Reply
  5. Armando

    Для SQL 2012 SP 3 расход памяти для sort или hash можно посмотреть в плане запроса при SET STATISTICS XML ON

    https://support.microsoft.com/ru-ru/help/3107400/improved-tempdb-spill-diagnostics-in-showplan-xml-schema-in-sql-server

    Reply
  6. fhqhelp

    (5)

    SET STATISTICS XML ON

    Вроде должно у меня показывать, но не вижу..

    Спасибо, поразбираюсь..

    Reply
  7. fhqhelp

    (4)

    Да не суть важно..

    Конкретный запрос можно починить кучей способов — вопрос-то в другом..

    Вопрос — как их выявлять, и желательно заблаговременно, до катастроф

    Reply
  8. nvv1970

    Отличная статья.

    Сам впервые столкнулся с подобного рода ожиданием.

    Попробуем оценить выделение памяти….

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *