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

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

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

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

    • Взаимоблокировка из-за повышения уровня изоляции ресурса и из-за разного порядка записи ресурсов
    • Отслеживание взаимоблокировок в СУБД
    • Создание сценария для анализа взаимоблокировок
    • Диагностика и анализ взаимоблокировок с помощью ЦУП и облачного сервиса

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

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

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

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

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

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

  1. Dubina.E.A.

    В архиве 42 го задания есть текст запроса из задания №39, его как то нужно учитывать?

    • Шемякин Александр

      Добрый день!
      Ориентируйтесь на содержимое pdf-файла, текстовый файл попал в архив случайно.

  2. Vad344

    Почему в решении задания 39 указан текст задания 39 (без текста запроса)?

    • Татьяна Гужавина

      Скачайте решение повторно.

  3. Дмитрий Ермилов

    Добрый день.
    Задание 42 полностью совпадает с заданием 39, по которому уже есть готовое решение. Так и должно быть? зачем тогда писать ответ на это задание?

    • Татьяна Гужавина

      Доброго дня, Дмитрий!
      Задание 39 заменено. Скачайте, пожалуйста, задание и решение повторно.

      • Дмитрий Ермилов

        Добрый день, а куда делось решение задания 39? В файле только повторение условия задания и нет решения.

        • Татьяна Гужавина

          Доброго дня, Дмитрий!
          Обновленное решение задания уже опубликовано.

        • Татьяна Гужавина

          Решение обновлено. Скачайте, пожалуйста, повторно.

  4. bantos

    Добрый день.
    При использовании тест-центра иногда во время выполнения сценария выдаётся такое сообщение (на картинке). При этом в запущенных виртуальных рабочих местах выдаются сообщения об ошибке: “Не удалось определить порт агента”. Причём такие сообщения выскакивают “через раз”. В чём может быть причина? Как-то “плохо” обновил конфигурацию с тест-центром?

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


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

  5. SvetlanaV

    Добрый день! В запросе задания 42 опечатка- во вложенном запросе нет поля КоличествоКСписанию, которое затем выбирается.

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


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

  6. Dmitry K

    Замечание по заданию 39.
    Что изменится, если начинать транзакцию в управляемом режиме?
    Исходя из того, что по условию задачи конфигурация работает в Автоматическом режиме конструкция

    НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);

    ничего не изменит.

    Стоит четче сформулировать вопрос в задаче. Речь идет о попытке использовать вышеописанную команду или запуске кода в конфигурации с режимом управления блокировкой данных “Управляемый”?

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


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

  7. e.sholokh@efsol.ru

    Когда в запросе используется ДЛЯ ИЗМЕНЕНИЯ – то блокируется вся таблица или только обработанные данные?

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


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

  8. Gosha009

    Добрый день!
    Провожу эксперименты по воспроизведению дедлоков по причине захвата в разном порядке .
    Исходные данные:
    Для регистров разделители итогов выключены.
    Для регистра “Остатки товаров” текущие итоги не используются.
    Для регистра “Остатки товаров” период итогов 31 августа 2015.
    Ставлю точку останова в модуле документа “Продажа” на строке Движения.ВазиморасчетыСКонтрагентом.Записать(), то есть уже после записи регистра “Остатки товаров”.
    Провожу продажу датой 17.09.2015 из первой сессии и останавливаюсь на брейкпоинте.
    Из второй сессии провожу документы “Поступление” с повторяющимися наборами данных и тут появляются разные результаты.
    1. Режим управляемый.
    1.1 Если дата поступления 05.05.2015, то дедлок успешно воспроизводится
    1.2 Если дата поступления 05.10.2015, то дедлока нет, документ проводится как не в чем не бывало.
    Эти ситуации справедливы как с режимом совместимости с 8.2 так и без него.
    2. Режим автоматический.
    В этом случае дедлок случается всегда.

    Собственно сам вопрос почему не случается дедлок в описанной ситуации?.

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


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

      • Gosha009

        Спасибо! с этим понятно, а почему тогда в автоматическом режиме дедлок все-таки случается?

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


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

          • Gosha009

            Спасибо понял. Знал же эту особенность, но еще не всегда удается применить теоретические знания на практике)

  9. serk@rarus.ru

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

    При настройки ЦУПа мне не удается настроить оперативный показатель “Взаимогруппировки” (С оперативным показателем “Таймауты” проблем нет)
    На этапе показателей операционной системы с выбранным показателем “Взаимогруппировки” в инструкции написано, что пользователь должен входить в группу “Performance Monitor Users”

    У меня windows 8.1 (для одного языка), как я понял в этой операционной системе отсутствуют групповые политики. Получается для данной операционной системы нет возможности настроить оперативный показатель “взаимогруппировки”?

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


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

      • serk@rarus.ru

        Здравствуйте, Андрей.

        Да, я опечатался – взаимоблокировки конечно же
        Скрин ошибки я прикрепил.

        Файл с ошибками ЦУП, где он находится? Кнопка “Инструкция” в момент вывода ошибки – неактивна.

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


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

          • serk@rarus.ru

            Андрей,

            в системном мониторе я нашел счетчик “\SQLServer:Locks(_Total)\Number of Deadlocks/sec”
            И добавил его в раздел “Группы сборщики данных/особые/1С”

            Данный счетчик и пытается выбрать ЦУП, добавляя сетевой адрес компютера в начале. Но ошибка все равно осталась.

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


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

              • serk@rarus.ru

                Группа “Пользователи журнала производителей” есть. Только вот изменить ничего нельзя – недоступно.

                • serk@rarus.ru

                  Ларчик просто открывался, запустил сессию ЦУПа от имени администратора. Заработало.

  10. yamarsel

    Андрей, подскажите, пожалуйста, по следующему вопросу:
    Как взаимоблокировка связана с запросом:

    Я особой связи не вижу, и в курсе тоже не припомню, что об этом говорилось.
    Единственное, что я помню – вы говорили, что чем неоптимальнее запрос, и чем дольше он выполняется – тем выше вероятность взаимоблокировок в системе.

    Не могли бы прокомментировать в двух словах, а почему это так?
    Спасибо.

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


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

  11. yamarsel

    Вопрос по решению задания 38.

    В задании сказано следующее:
    Данный блок кода приводит к возникновению взаимоблокировки. Код выполняется при
    проведении документа.

    В решении сказано следующее:
    Необходимо выполнить запрос с опцией «ДЛЯ ИЗМЕНЕНИЯ» чтобы заблокировать документ
    блокировкой обновления.

    Имеется ввиду, что мы должны получить ссылку на данный документ запросом с пометкой для изменения.
    Таким образом будет заблокирована нужная строка в таблице документов. А потом с помощью Выборка.Ссылка.ПолучитьОбъект() получаем объект для возможности модификации.

    Правильно ли я понимаю?

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


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

  12. yamarsel

    Добрый день!

    Возник следующий вопрос.

    При демонстрации взаимоблокировок СУБД не проводятся оба документа, а при демонстрации взаимоблокировки 1С возникает ошибка только в одном из документов. А другой успешно проводится. С чем это связано?

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


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

  13. hjkl

    Андрей, напомните пожалуйста в каком видеоуроке из главы курса, которая посвящена взаимоблокировкам говорится о типах взаимоблокировок?

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


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

  14. Дмитрий Абраменко

    Андрей, а можно вас попросить хотя бы в двух трех словах (лучше конечно на примерах) описать блокировки намерения, почитал ссылку в вопросах в шапке и все равно не совсем понятно, к примеру: “В компоненте Database Engine блокировки с намерением применяются для защиты размещения совмещаемой (S) или монопольной (X) блокировки ресурса на более низком уровне иерархии.” Что за “защита размещения блокировки ресурса” и “более низкий уровень иерархии”? Имеется ввиду гранулярность блокировки? В каком случае менеджер блокировок решает наложить такие блокировки? Если есть ресурс, где об на примерах рассказывается, буду благодарен за ссылку.

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


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

      • Дмитрий Абраменко

        А они всегда накладываются? Скажем, если мы блокируем одну запись на чтение на странице, значит ли это, что мы получим блокировки IS на уровне страницы и/или таблицы? и отчего это зависит?

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


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

          • Дмитрий Абраменко

            я почему спрашивал “всегда ли”, т.к. в описании, скажем, IS указано: “Защищает запрошенные или полученные совмещаемые блокировки на некоторых (но не на всех) ресурсах на более низком уровне иерархии.” Что в данном случае означает “на некоторых (но не на всех) ресурсах”?
            И правильно ли я понимаю, что блокировка SIX накладывается в случае, когда нужно иметь возможность читать все данные нижнего уровня и при этом иметь возможность изменять некоторые? В этом случае блокировка S уже не будет устанавливаться на конкретные записи, а в случае необходимости изменения данных будет накладываться X блокировка?

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


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

  15. Дмитрий Абраменко

    Добрый вечер, Андрей.
    1)пытаюсь использовать ЦУП (2.0.15.9) для анализа дедлоков, добавляю аналитический показатель, записываю, открываю в режиме просмотра и этого показателя в списке нет, несколько раз проверил – один результат, все остальные записываются, а этого нет. В чем может быть проблема?

    2)Вопрос по использованию ЦУП: что будет если использовать (включать) ЦУП несколько раз в день, но устанавливать разные наборы показателей, как они будут отображаться при просмотре? Имею ввиду если выбрать период с самого утра и до вечера, ведь в один период собирались одни показатели, а в другой другие.

    Вообще данная версия ЦУП, странно себя ведет при настройке. Особенно при настройке Показателей ОС, бывает выдает ошибки, начинаешь отлаживать – все проходит дальше.

    Вопрос по 28 видео – “Примеры из жизни. Повышение уровня изоляции”:
    3) почему сервис показывает блокировку по объекту Document210, а не по регистру, которые блокируются, как может возникнуть блокировка на объекте или тут две транзакции пытаются менять один и тот же документ?
    4) не совсем понимаю почему первый процесс наложил s-блокировку, а второй u-блокировку, там же выполняется один и тот же код в одном и том же модуле? Ведь U-блокировка ведь подразумевает наличие специального текста в запросе.

    5)Так же в видео с примерами в ЦУП: почему при записи движений в один регистр (остатки товаров) накладывается блокировка rangex-x, а при записи во взаиморасчеты – просто x? Ведь в автоматическом режиме при записи необъектных сущностей используется serializable, а это ведь range-блокировка всегда, я не прав?

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


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

      • Дмитрий Абраменко

        1) MS SQL 2014
        3) Я наверное неправильно сформулировал, почему дедлок зафиксировался на контексте проведения документа, а не на записи движений конкретного регистра, по которому был конфликт? Или там имеет место дедлок именно на записи самого объекта?
        5) т.е. решает оптимизатор, какую блокировку накинуть?

          • Дмитрий Абраменко

            1) Вот это да! Дело все в том, что облачный сервис у меня так же не работает, вроде бы логи пишутся и отправляется что-то, но в облачном сервисе ничего, может ли быть это следствием той же проблемы?

            Спасибо за пояснения.

            И еще один вопрос: применение новой методики контроля отриц.остатков ведь не зависит от того, управляемые или автоматические блокировки применяются?

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


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

              • Дмитрий Абраменко

                1) А я вчера часа два пытался понять, что я делаю не так…интересно скоро ли адаптируют? сервисом как-то приятнее пользоваться учитывая, что с проблемами разбираешься все равно пошагово и настраиваются они явно проще.
                Относительно ЦУПа Вы рекомендуете выключать его минут на 15 не более, если данные записывать именно, а с облачным сервисом? Могу ли я его оставить включенным его на весь день, на производительности это, как я понял, не должно сказаться, а вот сколько места на диске займут логи тех. журнала…я так понимаю, что будучи включенным, логи будут собираться вне зависимости от того работает ли сервис, чтобы логи перестали писаться тех журнал нужно отключать?

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


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

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


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

  16. AlexanderKulikov

    Также помучился с показом взаимоблокировок в ЦУП (2.0.12.11). (При нажатии на кнопку “Анализ” выдает окно, что данных нет и вообще ведёт себя так как будто взаимоблокировки не мониторились). В вот ЦУП 2.0.15.9 отработал как и должен. По крайней мере, в этом месте.

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


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

  17. AveryanovAlexey

    Подробнее об IX и SIX?
    В одном из комментариев вы указали, что для анализа взаимоблокировок можем IX считать почти тем же самым, что и S. Но судя по одному из домашних заданий блокировки IX и SIX накладываются контекстом “Движения.Записать()”. Разве здесь не должны накладываться X-блокировки?

    При этом один и тот же контекст накладывает разные типы, то IX, то SIX?

    Или это особенности работы именно MS SQL, в которые не обязательно погружаться? А тип блокировки по сути определять контекстом “Движения.Записать()” или “Запрос.Выполнить()”?

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


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

  18. Gostmair

    Почему в уроке 28. При выполнении одного и того же контекста (даже номер строки указан тот же) один процесс ставит U блокировку, а другой S? А затем при выполнении записи (контекст у обоих процессов тот же и строка кода) один процесс пытается установить X, другой U? Вообще не понимаю, как такое может быть при одном и том же коде приложения.

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


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

      • Gostmair

        Андрей, в предыдущих сообщениях вы несколько раз говорили, что не используете ЦУП на реальных проектах. Подскажите, пожалуйста, для расширения кругозора, что вы лично используете на больших проектах? Интересует именно ваше мнение, как человека с большим опытом.

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


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

          • AveryanovAlexey

            Я уже пользуюсь на одном проекте сервисами. Кроме беплатности (что здесь обсуждать смысла нет) есть другой плюс. Они могут мониторить базу круглосуточно. Например анализ долгих запросов выполняется у меня уже 3 недели. Я захожу туда и смотрю периодически, а были ли длинные запросы. И этим сервисом я ловил неожиданные редкие запросы, которые в момент выполнения ЦУПа могли бы и не “выстрелить”. Да и картина за сутки получается более репрезентативная.
            Но есть и минус. Это просмотр данных “не онлайн”. Т.е. надо подождать, пока данные соберутся, потом пока отправятся, и только потом спустя какое-то время смотреть. А иногда сервисы не работают почему-то. Идут какие-то работы видимо.
            Мне кажется оба инструмента вполне могут дополнять друг друга. И хорошо когда у специалиста есть выбора, чем когда выбора кроме профайлера и ручного анализа тех.журнала просто нет )))
            ИМХО

  19. Владимир

    Добрый день.

    1. Модуль 3, видео “108 Анализ блокировок ЦУП. Устранение блокировки”. Когда после устранения проблемы вы повторно проводите тест и мониторите его ЦУП-ом, то наряду с блокировками пропало выполнение запросов. По крайней мере в ЦУП-е не видно. Это происходит потому, что время выполнения запросов стало очень маленьким и ЦУП его даже не “улавливает”?

    2. Модуль 3, видео “111 Анализ блокировок сервис. Пример анализа блокировок 1С”. В демонстрируемых примерах в окошке “Ресурсы блокировки” видно, что есть поле Splitter. Отсюда можно сделать вывод, что в регистре используется разделение итогов. Почему тогда возникают блокировки?

    3. Модуль 3, видео “21 ЦУП. Анализ первой взаимоблокировки”. В ЦУПе показано, что во взаимоблокировке участвуют 3 транзакции. Сама же взаимоблокировка получается из-за двух: 2 и 3. А 1-я транзакция тут каким образом оказалась?

    4. Модуль 3, видео “27 Сервис анализа взаимоблокировок. Анализ”. При анализе вы говорите, что первая строка бесполезная. При этом в ней видно, что устанавливается Х блокировка при выполнении какого-то запроса. А разве такое может быть, что при чтении данных накладывается Х блокировка?

    5. U блокировки в 1С могут быть только, если используется Автоматический режим управления блокировкой данных?

    6. Модуль 3, видео “28 Примеры из жизни. Повышение уровня изоляции”. Мы видим, что обе транзакции выполняют один и тот же код. При этом вторая транзакция при выполнении запроса накладывает U блокировку, а первая при выполнении того же запроса S блокировку. Почему режимы блокировок разные при выполнении одного и того же действия?

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


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

      • Владимир

        6.

        > просто вспоминаем что SELECT не может ставить U блокировку в автоматическом режиме

        Так вроде бы может, если в запросе будет ДЛЯ ИЗМЕНЕНИЯ. Или нет?

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


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

  20. Gostmair

    Я использую ЦУП 2.0.13.10, платформа 8.3.5.
    Выполнил все настройки для анализа взаимоблокировок:
    1. Все как в видео + по инструкции в самом ЦУП.
    2. Проверил права пользователей (Под которым запускаю ЦУП и под которым крутится 1С) в MS SQL, всем выставил alter trace (соединение с базой само собой) + processadmin (потом добавлял им sysadmin).
    3. Добавил пользователей в группу MS SQL.
    4. Проверил, чтобы пользователю Агента MS SQL была доступна папка с трассировками.
    5. Проверил доступность папки с логами ЦУП.
    6. Время запуска записи в ЦУПе выдерживаю, чтобы применялся файл настроек.

    Итог:
    При анализе выбираю оперативные показатели и анализ взаимоблокировок. По окончании анализа в мониторе анализа показывается сам анализ и затем появляется окно, что он анализируется. Но после того, как пытаюсь выполнить в мониторинге анализ взаимоблокировок, возникает сообщение, что анализировать нечего. Я проверял лог SQL там все в порядке (начинается трассировка, заканчивается, затем выполняется вход пользователя сервера 1С успешно). В чем еще может быть причина?
    При этом другие показатели анализа работают хорошо, что не удивительно, т.к. они не используют SQL.

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


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

      • Gostmair

        Я воспроизвожу через сценарий тест-центра как в уроке 19-20. Проведение продаж и поступлений по 2.
        Получается дедлок на блокировках СУБД, в документе результате тестирования указаны сообщения о дедлоках СУБД.

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


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

          • Gostmair

            У меня стоит Hyper-V, с ним появились проблемы, чтобы передать что-то физическому компьютеру (виртуальный сетевой адаптер перестал вообще работать). Пока не могу передать dt. ЦУП 2.0.13.10. За основу dt в базе лежит то, что прилагалось к курсы. Я воспроизвел ровно то, что было в видео уроках 19-20 и на той же конфигурации что у вас. Меня само поведение ЦУПа смущает, т.к. сервис Гелева работал и показывал нормально дедлоки.

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


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

              • Gostmair

                Вот ссылка на базу (получилось побороть вирт. машину):
                https://yadi.sk/d/vbX3bqE2hBcwz

                Я внимательно проверял поведение ЦУП при анализе взаимоблокировок и вот что заметил:
                1. В настройках файлов с логами ТЖ в ЦУП у меня не отмечено удалять их. А ЦУП после анализа их удаляет.
                2. В настройках файлов трассировки СУБД в ЦУП у меня не отмечено удалять их. А ЦУП после анализа их удаляет.
                3. В не зависимости сколько по времени я писал показатели ЦУП, после нажатия кнопки “Стоп” он выполняет анализ (окно с процессом анализа) примерно 5 секунд и все, но ошибок при этом не выдает.

                Подскажите, пожалуйста, на реальных проектах вы использует Сервисы Гилева? Или что-то еще?

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


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

                • Gostmair

                  Андрей спасибо, но это не помогло. Всем кому интересно я нашел проблему (это заняло у меня несколько вечеров под отладкой с ЦУПом).
                  Ситуация следующая:
                  У меня стоит MS SQL 2014. Когда он делает файлы трассировки, то содержимое их отличается от содержимого предыдущих версий, а именно вот чем:

                  Тут должен был быть текст файла трассировки, но он почему-то вставляется весь кривой.

                  Раньше запрос содержался в теге frame, а теперь в тэге inputbuf. Из-за этого ЦУП не может получить текст запроса и просто в тихую после анализа, при нажатии кнопки “Анализ” говорит, что нечего анализировать.

                  Как это исправить:
                  1. В общем модуле MSSQL нужно исправить строку XPath, далее приведена вся функция:

                  Функция ПолучитьЗапросПроцесса(Документ, УзелПроцессов, ИдентификаторПроцесса) Экспорт

                  Разыменовыватель = Документ.СоздатьРазыменовательПИ(УзелПроцессов);
                  // Было раньше
                  //Узел = Документ.ВычислитьВыражениеXPath(
                  // “process[@id=””” + ИдентификаторПроцесса + “””]/executionStack/frame[@procname=””adhoc””]”,
                  // УзелПроцессов,
                  // Разыменовыватель).ПолучитьСледующий();

                  // Я добавил
                  Узел = Документ.ВычислитьВыражениеXPath(“process[@id=””” + ИдентификаторПроцесса + “””]/inputbuf”, УзелПроцессов, Разыменовыватель).ПолучитьСледующий();
                  Если Узел Неопределено Тогда
                  Возврат Узел.ТекстовоеСодержимое;
                  КонецЕсли;

                  Возврат Неопределено;

                  КонецФункции // ПолучитьЗапросПроцесса()

                  2. В общем модуле “Анализвзаимблокировок”, функция “РазобратьГрафВзаимоблокировкиMSSQL”. Найти кусок кода и в промежутке вставить код:

                  // Получить запросы процессов
                  СтрокаЗапросаПроцесса = Результат.ЗапросПроцесса.Добавить();
                  СтрокаЗапросаПроцесса.НомерПроцесса = НомерПроцесса;
                  ОригинальныйФрагмент = СокрЛП(MSSQL.ПолучитьЗапросПроцесса(DomГраф, Процессы, ИдентификаторПроцесса.Процесс));
                  // Начало кода, который нужно вставить +++
                  // SELECT, UPDATE, INSERT, DELETE
                  SelectQuery = Найти(ВРег(ОригинальныйФрагмент), “SELECT”);
                  UpdateQuery = Найти(ВРег(ОригинальныйФрагмент), “UPDATE”);
                  InsertQuery = Найти(ВРег(ОригинальныйФрагмент), “INSERT”);
                  DeleteQuery = Найти(ВРег(ОригинальныйФрагмент), “DELETE”);
                  Если SelectQuery Тогда
                  ОригинальныйФрагмент = Сред(ОригинальныйФрагмент, SelectQuery) ;
                  КонецЕсли;
                  Если UpdateQuery Тогда
                  ОригинальныйФрагмент = Сред(ОригинальныйФрагмент, UpdateQuery) ;
                  КонецЕсли;
                  Если InsertQuery Тогда
                  ОригинальныйФрагмент = Сред(ОригинальныйФрагмент, InsertQuery) ;
                  КонецЕсли;
                  Если DeleteQuery Тогда
                  ОригинальныйФрагмент = Сред(ОригинальныйФрагмент, DeleteQuery) ;
                  КонецЕсли;
                  // Конец кода, который нужно вставить —
                  СтрокаЗапросаПроцесса.ФрагментЗапроса = “%” + ОригинальныйФрагмент + “%”;
                  СтрокаЗапросаПроцесса.ФрагментЗапросаМодифицированный = “%” + MSSQL.ПолучитьТекстЗапросаСПараметрамиВопросами(ОригинальныйФрагмент) + “%”;
                  СтрокаЗапросаПроцесса.ФрагментЗапросаГрафа = СтрЗаменить(СтрокаЗапросаПроцесса.ФрагментЗапроса, “‘”, “””);

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


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

  21. Gostmair

    В видео 15. Взаимоблокировки. Неоптимальный запрос. Сказано, что причиной может служить следующее: транзанзакции пишут разные данные, а затем выполняют запрос со сканированием.
    Правильно ли я понимаю, что это будет проблема только в 8.2, где будет использоваться уровень изоляции для запроса Readcommited (упр. режим) и выше (автоматический)? Т.е. для 8.3 с уровнем Readcommited Snapshot эта ситуация не создаст взаимоблокировку.

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


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

      • Gostmair

        Правильно ли я понимаю, что будут следующие проблемы:
        1. При выполнении запроса в транзакции с уровнем изоляции Readcommited Snapshot будут получены данные без учета внесенных изменений в рамках транзакции до запроса.
        2. За счет увеличения выполнения не оптимальных запросов (вместо ожидания будет выполнение) будет увеличение нагрузки на оборудование.

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


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

          • Gostmair

            Спасибо про отрицательные остатки понял, т.к. запросы в разных транзакциях не будут видеть изменения данных в этих транзакциях друг у друга.
            Правильно, я понимаю, что в режиме изоляции Readcommited Snapshot даже при том, что предполагается, что будет снимок до начала транзакции он будет только относиться к изменениям других транзакций. А снимок используемый в запросе в транзакции будет учитывать все изменения сделанные в этой транзакции до запроса?

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


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

  22. Виталий

    Пытался воспроизвести взаимоблокировку на управляемой блокировке и наткнулся на интересный момент: для воспроизведения повышения уровня изоляции перед записью РН Остатки товаров наложил разделяемую блокировку на пространство блокировок “РегистрНакопления.ОстаткиТоваров”, при этом не воспроизвел взаимоблокировку. Если смотреть ТЖ, то там в таком порядке все прошло: Иванов:AccumRg18.DIMS Shared; Петров:AccumRg18.DIMS Shared , а потом Иванов:AccumRg18.RECORDER Exclusive; Петров:AccumRg18.RECORDER Exclusive. Как я понял я неверно указал пространство блокировок, надо было РегистрНакопления.ОстаткиТоваров.НаборЗаписей. Но Ситуация не понятна. Зачем же нужно пространство блокировок “РегистрНакопления.ОстаткиТоваров”, если дает другой транзакции списывать остатки с измерений, которые заблокированы. Петров и Иванов проводили копии одного и того же документа. Код и Кусок ТЖ в Файле. На ИТС нашел еще такое предложение: “Следует иметь в виду, что одну и ту же запись регистра можно заблокировать дважды: первый раз блокируя саму запись, а второй раз – блокируя набор, в который эта запись входит.” И еще : с пространством блокировок НаборЗаписей и блокировкой по регистратору тоже взаимоблокировки не получилось. ТЖ в сама низу файла.

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


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

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


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

      • Виталий

        И еще вопрос не в тему, но по этой базе: в Этот же документ в модуль объекта в процедуру “ПередЗаписью” Встроен замер для замера проведения группы документов из динамического списка. Он не работает, хотя другие замеры работают. Я предполагаю замер надо где то завершить. Но где?

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


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

      • Виталий

        Про вопрос взаимоболокировок я немного разобрался. Получается при записи движений ставится упр блокировка на пространство набор записей, и если попытаться предварительно установить разделяемую блокировку на пространство блокировок «РегистрНакопления.ОстаткиТоваров», то они будут в любом случае совместимы, т.к. находятся в разных пространствах блокировок. А если предварительно установить разделяемую блокировку на пространство блокировок «РегистрНакопления.ОстаткиТоваров.НаборЗаписей», то там можно поставить блокировку только по регистратору, а т.к. в разных сеансах у меня разные регистраторы, то и блокировки получаются совместимы. Но остался вопрос: Если мне надо перед записью наложить упр блокировку по складу и товару, то как это сделать?

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


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

      • Виталий

        Уже разобрался. Я в итоге устанавливал блокировки по одному одинаковому измерению, а второе измерение отличалось. И заблокированные объекты не пересекались.

  23. poloskovi

    Вопрос по заданию 39.
    В ответе сказано “документы смогут проводиться, так как тут блокируется только таблица товаров, а не таблица документов или регистров.”
    Но блокировка Х при записи элементов справочника товаров будет держаться до конца транзакции. Не значит ли это, что другие пользователи не смогут при этом прочитать эти элементы в транзакции (установить блокировку S)? И если в запросе в процедуре проведения документа будет использоваться обращение к значениям полей справочника Товары, то документ тоже не сможет провестись?

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


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

  24. Иван Татарников

    Долго пытался воспроизвести взаимоблокировки на тестовой базе курса, все делал, как в видеоуроке, но ничего не получалось, документы проводились без ошибок, хотя ожидания на блокировках были.
    В итоге перепробовав много чего, дошел до свойства Режим удаления движений у документа Продажи. Он у меня был выставлен в значение “Удалять автоматически”. После изменения режима удаления движений на “Удалять автоматически при отмене проведения” получилось воспроизвести взаимоблокировку.
    Профайлером определил, какие ожидания на блокировках возникают при проведении документов в разных режимах удаления движений. Если установлено “Удалять автоматически”, то режим блокировки RangeS-U (колонка Mode) на регистре бухгалтерии, если “Удалять автоматически при отмене проведения” – режим блокировки Х на РН Остатки товаров.
    Можете прокомментировать данную ситуацию?

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


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

      • Иван Татарников

        Перепроверил, попробовал воспроизвести на непроведенных документах – результат тот же.
        Посмотрел это ЦУПом. На скриншотах приведены результаты для разных режимов удаления движений. Первый и второй скрины – это удалять автоматически, третий и четвертый – удалять автоматически при отмене проведения.

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


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

  25. Сержантов Владимир Викторович

    Модуль 3. Видео №29 «Примеры из жизни. Неоптимальный запрос”
    Почему Блокировка IX накладывается на .НайтиПоРеквизиту и ПолучитьОбъект() – разве это не чтение?
    Скриншот не получился. Хотел сделать с курсов. Это строки 3 и 4 на слайде. В строке 14 на НайтиПоРеквизиту накладывается S блокировка

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


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

  26. Сержантов Владимир Викторович

    Еще несколько вопросов:
    Модуль 3. Видео №21 “ЦУП. Анализ первой блокировки”.
    На слайде, на котором показана таблица блокировок, видно, что в одном случае накладывается Х блокировка, а иногда RangeX -X. Ведь режим автоматический, это таблица регистра, уровень изоляции должен быть Serializable. Откуда берутся просто Х блокировки?

    Модуль 3, видео 27 “Сервис анализа взаимоблокировок. Анализ” На слайде с развернутыми блокировками в процессе 2 на строке Результат = Запрос.Выполнить() накладывается блокировка RangeX-X. Почему? Разве это не чтение и здесь не должно быть блокировки RangeS-S?

    А что обозначают две буквы в блокировках Range:S-U, X-X, S-S? И какие есть еще? Таблицу совместимости нашел, объясните, пожалуйста, смысл этих блокировок.

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


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

    • Сержантов Владимир Викторович

      Модуль 3. Видео №21 «ЦУП. Анализ первой взаимоблокировки».

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


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

  27. Сержантов Владимир Викторович

    Прошу помощи!
    Прохожу видеоурок №20 3 модуля. “Сбор данных для анализа взаимоблокировок”.
    Выходит ошибка анализа данных (на скриншоте). Прочитал инструкцию ЦУП в разделе “Трассировки”. Вроде, все настроено правильно. Прикладываю скриншоты:
    1. У клиента ЦУП включен флаг Alter trace
    2. Пользователь, от имени которого запущены рабочие процессы кластера, входит в указанную группу.

    может, я что-то напутал?

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


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

      • Сержантов Владимир Викторович

        Вот что на закладке действующие

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


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

  28. Сержантов Владимир Викторович

    Добрый день! 3 модуль. Видео №17 “Отслеживание в СУБД” на слайде имеется фраза: “отмена которой будет наименее “безболезненной””. Может имеется ввиду “наиболее”?

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


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

  29. Сержантов Владимир Викторович

    Андрей, добрый вечер! Подскажите, пожалуйста, “Распределение итогов” в автоматическом режиме используется? Если да, то, что дает эта настройка?

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


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

      • Сержантов Владимир Викторович

        Да, абсолютно верно. Но если выставить флаг разделение итогов в автоматическом режиме, провести запись и в этой же транзакции попробовать сделать запрос по остаткам. Возможно ли взаимоблокировка?

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


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

  30. PonomarevDY

    Процесс 1 наложил Х-блокировку и следом у него идет Х-ожидание, но сервис не показывает кого или чего ожидаем.
    для процесса 2 понятно что он ожидает процесс 1, но как понять в следствие чего произошло ожидание у процесса 1 ?
    SQL-запрос у блокировок 1 и 2 процесса 1 одинаковые…
    возможно что набор данных между блокировкой 1 и 2 успел измениться каким другим процессом который к моменту времени блокировки 2 успел завершиться и поэтому не отображается сервисом?
    или это ошибка сервиса?
    скриншоты страницы сервиса в приложении

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


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

  31. leonsk

    Добрый день.
    Что-то я запутался с обязательными заданиями. В этом задании №12 обязательными отмечены 42,43,44. А на стартовой странице вы пишете:
    Андрей Бурмистров 05.01.2015
    Номера обязательных практических заданий
    5, 7, 8, 9, 11, 14, 22, 20, 34, 35, 36, 38, 39, 40, 49
    Просьба выдать согласованную информацию.

    • Татьяна Гужавина

      Добрый день!
      Номера обязательных заданий после перенумерации следующие:
      № 5, 7, 8, 12, 13, 14, 21, 28, 34, 35, 36, 42, 43, 44, 51.

  32. kasanir

    Что с заданиями?
    У необязательных – нет файлов, о которых говорится в задании, а в обязательных – не скачиваются файлы-архивы!
    Из-за этого обязательные невозможно решить, а решения в необязательных не понятны.
    Посмотрите, пожалуйста.

    • Татьяна Гужавина

      Добрый день!
      Номера обязательных заданий после перенумерации следующие: № 5, 7, 8, 12, 13, 14, 21, 28, 34, 35, 36, 42, 43, 44, 51.
      Попробуйте повторно скачать задания через другой браузер.
      Если проблема не исчезнет, пожалуйста, напишите нам на support@kursy-po-1c.ruи приложите скриншот с ошибкой.

  33. Andrefan

    Андрей, добрый день! Вопрос наверное не столько по данному разделу, сколько сводно по 3му модулю. В Ваших примерах вы много внимания уделяете разбору ошибок, возникающих при работе в Автоматическом режиме блокировок. Это конечно, необходимо знать, но, как Вы и сами упоминали в курсе, Автоматический режим уходит в прошлое и на больших проектах при работе с большими объемами данных он уже неактуален, и лучше использовать управляемый режим. А по моим ощущениям разбор автоматического режима занимает больше времени, чем управляемого режима. Вопрос: стоит ли так уж хорошо запоминать особенности при работе в автоматическом режиме, и по вашему опыту: как часто встречаются проекты с автоматическим режимом (ну скажем за последние 2-3 года?)? В процентном соотношении по сравнению с упр.режимом?
    Спасибо!

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


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

  34. DenisS

    Здравствуйте. Подскажите по заданию 39. Почему один и тот же участок кода (Документ.РеализацияТоваров.МодульОбъекта : 34 : Движения.Записать();) В разных транзакциях вызывает разнотипные блокировки (SIX, IX) ?

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


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

  35. banzai

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

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


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

  36. Marinellka

    Андрей,добрый день.
    Вопрос по ДЗ №41. Правильно ли я поняла, что запрос с опцией «ДЛЯ ИЗМЕНЕНИЯ» нужно выполнить вместо объектного чтения Результат.Документ.ПолучитьОбъект(), чтобы заблокировать документ блокировкой U???

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


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

      • Marinellka

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

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


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

  37. Константин Гаевский

    В практическом задании 42 задан

    вопрос:
    “Что изменится, если начинать транзакцию в управляемом режиме?”

    Ваш ответ:
    “… одна из транзакций в момент записи получит ошибку, что данные устарели (были изменены или удалены)”

    ————————–
    Если я правильно понял, то сообщение об изменении или удалении можно получить только в интерактивном режиме (сработает объектная блокировка) при проверки версии объекта.

    Но при записи на уровне кода проверки версии нет. Поэтому ошибки не будет, объекты будут записаны. Но возможно ожидание. Проверял.

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


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

  38. Константин Гаевский

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

    По уроку 29.
    1. В обеих транзакциях устанавливаются блокировки с намерением монопольного доступа (IX), а не X. В данном случае X и IX одно и тоже? Нужно ли брать во внимание блокировки намерения?

    2. Состояние блокировок в примере либо установлена, либо преобразование (изменение режима блокировки). Как в данном случае определить какая именно блокировка ожидает? Или после преобразования блокировка должна изменить статус на установлена?

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


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

      • IvanSkrobot

        Андрей, а можете ли вы объяснить блокировки намерения на примерах 1С?

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


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

  39. StaticUnsafe

    Взаимоблокировки. Видео 17. Такой текст:
    * отмена которой будет наименее “безболезненной”

    Тут,видимо, надо написать: наименее болезненной либо наиболее безболезненной.
    Наименее безболезненный = максимально болезненный.

    При этом, в видео Вы говорите “более безболезненно”. Когда читал слайд и одновременно слушал – меня заклинило.

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


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

  40. Sunhare

    Не нашел, как искать взаимоблокировки если режим управляемый. Как я понял, только самому анализировать ТЖ? Про это будет в занятии 14? И как ответ на задание 39: Установить БлокироватьДляИзменение = истина, если это подразумевает управляемый режим, в котором мы не могли получить картинки как на рисунке к заданию?

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


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

  41. Serg82

    Не получается провести анализ взаимоблокировок в ЦУП (2.0.13.10), анализ блокировок проходит. Сервера СУБД и 1С отдельные на W2003, сервер SQL 2005, время синхронизировано, файлы трассировки создаются (при просмотре явно видны записи взаимоблокировок). При просмотре данные отображаются некорректно (рис. 1), не видно полностью график, но при масштабировании до минуты все видно (рис. 2) и при нажатии на кнопку Анализ выдает окно, что данных нет (рис. 1).

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


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

      • Serg82

        Платформа 8.2 (забыл написать), буду смотреть отладчиком, что не так.

  42. adelpieroff10

    Здравствуйте!
    1. Хотел уточнить про проблему повышения уровня изоляции ресурса в управляемом режиме. В видео, где проблема взаимоблокировки возникает в объектной технике (при получении объекта справочника Товары) вы говорите, что в управляемом режиме взаимоблокировки не будет, а будет просто сообщение, что объект уже был изменен. Соответственно, вопрос – а в какой момент и кто контролирует, что объект был изменен и за счет каких правил это происходит?
    2. Я правильно понял, что ЦУП показывает взаимоблокировки без разреза базы, а облачный сервис – с разрезом базы?

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


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

  43. gosn1ck

    Добрый день, Андрей.
    столкнулся со следующим дедлоком – документ проводится и пишет в одном порядке, а тот же документ при отмене проведения удаляет движения – в другом. ситуацию исправил, но начал смотреть как это сделано в типовых, смотрел УТ 11, а там одна строка кода Объект.Движения.Записать(); в отмене проведения. Отсюда возник вопрос – как платформа в этом случае определяет порядок удаления движений? я предположил, что в том порядке в каком они расположены в конфигураторе, так ли это ?

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


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

  44. igor@kozlitin.net

    Андрей,

    Хотел бы у Вас проконсультироваться, чтобы убедиться, что я правильно понимаю. Допустим, у меня есть обработка в которой не используются явные транзакции и которая содержит примерно такой код:
    ……
    СправочникОбъект.Записать();
    ……
    Результат = Запрос.Выполнить();
    ……
    Насколько я понимаю, при выполнении команды на запись (справочника или же документа или же регистра) у меня откроется неявная транзакция. Затем, после завершения этой команды на запись транзакция закроется, снимутся все наложенные при записи блокировки. Далее, при выполнении запроса, он уже будет вполняться “вне транзакции”, т.е. будет использоваться неблокирующее чтение.
    Правильно ли понимаю, где начинается и где заканчивается транзакция в вышеприведенной обработке?

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


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

  45. scooper

    Андрей Добрый день.
    Возникло пару вопросов по взаимоблокировкам.
    В видео “29.Примеры из жизни. Неоптимальный запрос.” Строка кода “Задачи.ЗадачиДляБизнесПроцесс.НайтиПоРеквизиту” накладывает X блокировку, это сервис ошибся и показал не верные данные или я что то не понял, ведь запрос не может накладывать Х блокировку?

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


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

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