Курс по Оптимизации 1С – Занятие №8

В рамках этого занятия необходимо изучить следующие материалы.

Модуль 3. Причины медленной работы

    Глава 8. Анализ причин медленной работы и оптимизация системы

    • Анализ неоптимальных запросов с помощью сервисов, 1С:ЦУП, SQL Profiler, технологического журнала
    • Пример анализа плана запроса
    • Задача на поиск неоптимального запроса

Практические задания

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии / обсуждение (211):

  1. IPWinAlVl

    Добрый день!

    Анализируя предложенные в заданиях 12 и 14 планы столкнулся с недопониманием обозначения
    оператора “Nested Loops” в некоторых местах.

    Когда в графическом представлении к нему снизу подходят 2 таблицы – все понятно (происходит соединение):

    |–Nested Loops( …
    |– …

    |– …

    , но когда мы видим такую запись
    (стр. №7 в плане 12-2 задания №12 или стр. №17 в плане задания №14):

    |–Nested Loops( …
    |– …
    |– …

    |– …

    |– …

    становится непонятно, что здесь он соединяет?
    Причем наблюдается это только на последнем уровне, если читать справа-налево.
    Может сдвига не наблюдается из-за проблем форматирования?

    • IPWinAlVl

      Почему-то и в моем вопросе не сохранилось форматирование сдвигов, прикрепляю текстовый файл.

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  2. Andrefan

    Добрый день, Андрей.
    Есть не понятное долгое выполнение запроса. Произошло при проведении достаточно простой Требовании-накладной. Длилось 500 секунд. Повторное перепроведение занимает считанные секунды. Стоимость плана запроса копеечная, и есть подсказка что могло быть “загружено оборудование или ожидания на блокировках” (скрин). Сильной загруженности не было и трудно представить ожидание на блокировках ,которое длилось почти 10 минут. Журнал регистрации подтверждает, что было “окно” в действиях пользователя примерно на это же время (скрин), т.е. данным сервиса можно верить.
    Вопрос: очень трудно представить проблему, которая могла бы привести к 10-минутному зависанию. Подскажите, куда стоит покопать?
    P.S. Нечто похожее происходит регулярно, несколько раз в день в разных контекстах и разными пользователями.

      • Андрей Бурмистров


        (текст комментария доступен только участникам Мастер-группы)

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  3. Gosha009

    Здравствуйте! Подскажите если стоит задача найти избыточные блокировки именно профайлером, каким образом это можно выполнить?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  4. Andrefan

    Андрей, добрый день!
    Использую сервис анализа долгих запросов. Есть два одинаковых запроса (вложение). Слева выполнялся 397 сек, справа – 624. Слева – выполнялся в монопольном режиме, справа – в многопользовательском. (одним и тем же пользователем)
    Вопросы:
    1) Различие в запросе только в инструкциях WITH (NOLOCK). ПОдскажите пожалуйста, что это означает и могла ли эта инструкция так сущесвтенно ускорить запрос?
    2) Скорее всего проблема в ускорении запроса – отсутсвие ожиданий на блокировках, но сервисы Гилева позволяют использовать только один сервис, в совокупности нельзя. Подскажите пожалуйста, какой по вашему мнению наиболее удобный способ анализа совокупности Долгие запросы + Ожидания на блокирвоках?
    Я понимаю, что можно использовать ЦУП, но мне лично ЦУП очень не нравится тем, что аналитические показатели можно включать на маленький интервал. Откуда же мне знать, когда именно включать его? (если не использовать нагрузочные сценарии тест-центра)

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

      • Andrefan

        1. Спасибо за развернутый ответ и рекомендации. Запросы все же одинаковые, происходят при нажатии кнопки “Заполнить” в документе “Отражение зарплаты в регл.учете” (докуент один и тот же). К стати, вспомнил одно отличие – копия базы в кластере с параметром debug, рабочая – без. Как вы считаете, может ли повлиять параметр debug так существенно (+50% длительность)?
        2. Мне казалось, что в уроках (не помню каком именно) вы говорили что сервисы можно использовать только по отдельности. Если одновременно можно, поясните пожалуйста: как я понимаю при включении сервиса создается файл с настройками ТЖ, который удовлетворяет только ТЕКУЩЕМУ СЕРВИСУ. И скажем, если я включу использование другого сервиса, то файл с настройками ТЖ ЗАТРЁТСЯ. Разве не так?

        • Андрей Бурмистров


          (текст комментария доступен только участникам Мастер-группы)

          • Andrefan

            1. Все понял. Пробовал запускать только из обработки, попробую через консоль.
            2. Ок, всё ясно, попробую проанализировать совместно два сервиса, может на ожиданиях на блокировках будет что-то понятно.
            Большое спасибо за рекомендации.

  5. Gosha009

    Добрый день!
    Решил как Вы и советуете своими руками проверить некоторые моменты.
    Проверяю выполнение запроса “Условие не В”. В уроке получается неоптимальный запрос из-за nested loops, но на практике у меня получается все кроме nested loops.
    на базе курса получается план с hash match, на своей базе получается merge join.
    Подумал если в одной из таблиц будет мало строк, то наверняка получится nested loops,оставил в регистре только 4 записи, но у в этом случае план не изменился. Можете ли объяснить почему план запроса не выбирает вложенные циклы или пути оптимизатора совсем не исповедимы? Полученные планы запроса во вложении.

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  6. Андрей

    В практическом задании 14 в дополнительной информации о таблицах указан размер индекса РегСведений.ЦеныНоменклатуры и он в 3 раза больше размера данных. На что это может Указывать ???

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  7. ira778899

    Андрей, скажите какие были в вашей практике самые крупные проекты
    по объему базы и количеству пользователей в одной базе,
    а не в распределенной ?

    • Насипов Фарит


      (текст комментария доступен только участникам Мастер-группы)

      • ira778899

        Чисто спортивный интерес, у нас в Казахстане сейчас один пенсионный фонд и ходят слухи, что они хотят свою базу перевести на 1С, честно говоря, у меня на счет этого большие сомнения – в успешности этого проекта. По официальным данным на начало апреля количество счетов 10 млн, количество проводок в месяц тоже должно быть прилично, может и не 10 млн, но порядка нескольких млн. База получится очень большая. На сайте 1С я смотрела, там пишут про большие базы, но многие из них распределенные. Интересно какие у вас по этому поводу мысли, т.к. вы, возможно, работали с очень большими базами на 1С. Общее количество пользователей я, конечно, не знаю, но подозреваю, что это порядок нескольких тысяч.
        Хотя не совсем спортивный интерес, может что-то получится с работой и в этой связи тоже обдумываю возможные сложности.

        • Андрей Бурмистров


          (текст комментария доступен только участникам Мастер-группы)

          • ira778899

            Спасибо. Еще скажите, пожалуйста, в такого класса системах как они поступают, если нужно добавить поле в большую таблицу ? Или вводится запрет на изменение структуры таких таблиц ? У меня, например, не давно было – большая база, конечно, значительно меньше, но тем не менее. Нужно было изменить валютный признак в плане счетов по одному счету, база Oracle, при обновлении копии на MS Sql все нормально, при обновлении на Oracle – свалилось с ошибкой при обновлении. Восстановили с бакапа и добавили новый счет через Предприятие. А вообще как в таких системах ?

            • Андрей Бурмистров


              (текст комментария доступен только участникам Мастер-группы)

  8. Владимир Свириденко

    Андрей,
    В практическом задании 14 есть дополнительная информация о таблицах (имена, количество записей, размеры). А с помощью какого инструмента она получена – не из облачного сервиса Гилева? В курсе этой информации не было. На мой взгляд, такая таблица является необходимым инструментом при анализе медленных запросов.

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  9. SvetlanaV

    Добрый день!
    Если в плане запроса Clustered Index Seek выполняет 160000 логических чтений, при этом получает 160000 строк, кластерный индекс у документа – ссылка, таблица документов соединяется с таблицей регистра накопления. Тогда почему оптимизатор считает, что должна возвращаться 1 строка?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  10. e.martynenko

    Добрый день. Практическое задание 13.
    Подскажите, будет разница, если строку “ЛимитыОстатков.Склад = &Склад” в соединении таблиц заменить на
    “ЛимитыОстатков.Склад =Остатки.Склад”. Что лучше с точки зрения производительности?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  11. SvetlanaV

    Вопрос, который возник при выполнении практического задания: Будет ли тормозить Nested Loops, если соединяются две таблицы-одна большая, а вторая пустая?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  12. Виктор Яковлев

    Здравствуйте.

    Подскажите, пожалуйста, в чём может быть проблема. Аналитический показатель “Анализ запросов” – при завершении анализа посмотреть результат невозможно. Пишет “Ошибка при вызове метода контекста (РазделитьФайл)”. Скрин во вложении.

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  13. allegrosoft

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

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

      • allegrosoft

        у меня получилось у sort самый высокий показатель

        • Андрей Бурмистров


          (текст комментария доступен только участникам Мастер-группы)

  14. Andrefan

    Добрый день!
    Пытаюсь произвести анализ долгих запросов при помощи ЦУП. Возникает ошибка в результате обработки данных мониторинга.(Скрин) ЦУП (2.0.13.10). Платформа 8.3.6.2076. Оперативные показатели в режиме Просмотр отражаются корректно. В чем может быть проблема?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  15. allegrosoft

    В задание 14, в плане запроса строка 24, 25, операции Index Seek идентичны, как объяснить данный дубль?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  16. Dmitry K

    Вопрос по заданию 11. Одним из условий в задании было “При проведении документа, выполняется большое количество строк кода из различных модулей,
    выполняющихся как на клиенте, так и на сервере «1С:Предприятие».”. Помимо неоптимальных запросов, не может являться проблемой неоднократные переходы выполнения проведения с сервера на клиента и обратно? В условии написано про “однопользовательский” режим, это же не значит что база файловая и клиент=сервер. При медленных каналах связи узким местом может стать и неоднократная передача данных с сервера на клиент и обратно?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  17. Dmitry K

    Правильно понимаю, что с помощью ЦУП можно получать план запроса и из Postgresql тоже?
    Не планируете расширить курс материалами по работе с postgresql? При ценовой политике microsoft субд postgres неплохая альтернатива.

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  18. oberon2000

    1.В задании 14 проблемной является строка с низкой стоимостью “Total subtree cost”, хотя оператор один из немногих который реально отработал. Насколько можно ориентироваться на этот показатель в определении проблемности оператора?
    2.Напомните показатели “Rows” и “Total subtree cost” – итоговые? Т.е. посчитаны уже с учетом количества раз выполнений?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  19. yamarsel

    По заданию 12-1:
    “Есть сильное отличие между предполагаемым и фактическим количеством строк”.
    Это мы смотрим получается на 4-ую строку и сравниваем колонки Rows и Estimate rows?

    “В 5-й строке выполняется сканирование кластерного индекса”
    Мы определили, что идет сканирование, так как использована конструкция Seek Where? То есть получается частичное сканирование?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  20. yamarsel

    По решению задания 11:
    “При необходимости можно использовать SQL Profiler, чтобы понять – проблема на стороне СУБД
    или 1С”.

    А что нам даёт это понимание?
    Какие дальнейшие действия по решению проблемы можно предпринять в том и другом случае?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

      • yamarsel

        Андрей, посмотрел весь курс и не могу найти где об этом сказано.
        Ткните, пожалуйста, носом, где об этом идет речь.
        Спасибо.

        • Андрей Бурмистров


          (текст комментария доступен только участникам Мастер-группы)

  21. Владимир

    Добрый день!

    Есть вопрос по практическому занятию 12.
    Там выполняется Clustered Index Seek к объекту [Base1].[dbo].[_InfoRg6376].[_InfoRg6376_ByPeriod_TR]. Мне не совсем понятны условия соединения. Например:

    [T4].[_Period]=[Base1].[dbo].[_InfoRg6376].[_Period] as [T4].[_Period]

    Т.е. в этом индексе поле [_Period] сравнивается с [Base1].[dbo].[_InfoRg6376].[_Period]. Непонятно, причем тут вообще таблица [Base1].[dbo].[_InfoRg6376], если соединяются 2 индекса [Base1].[dbo].[_InfoRg6376].[_InfoRg6376_ByDims_RT] и [Base1].[dbo].[_InfoRg6376].[_InfoRg6376_ByPeriod_TR]?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  22. gerasimovv

    В регистрах остатков стандартный индекс состоит из полей Период + Измерение1+ …
    Если в условии виртуальной таблицы задается дата, то как СУБД использует этот индекс?
    ведь условия равенства по периоду нет, должно происходить частичное сканирование?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  23. gerasimovv

    Как по оператору плана запроса Index Seek определить, что происходит частичное сканирование? Только по количеству выполнений (больше 1) или это можно увидеть из текста ?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  24. gerasimovv

    Если в плане запроса параметр Executes равен нулю, то что это значит? Оператор был запланирован оптимизатором, но не выполнился ни разу?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

  25. Дмитрий

    Добрый день… Лучше создавать новый покрывающий индекс или изменять уже существующий… вот на примере из курса добавить поле наименование к _Reference7_Code_SR ?

    • Андрей Бурмистров


      (текст комментария доступен только участникам Мастер-группы)

Комментарии закрыты