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

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

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

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

    • Тест-центр. Написание простейшего теста
    • Создание сценария для анализа ожиданий на блокировках
    • Анализ блокировок с помощью сервисов и с помощью 1С:ЦУП
    • Пример анализа проблемы в 1С:ЦУП

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

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

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

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

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

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

  1. Анатолий

    Подскажите в чем может быть проблема. Пробую на тестовой конфигурации: режим блокировок управляемый, регистр накопления с измерениями склад и номенклатура, разделение итого на регистре включено. При перепроведении расходной накладной ( в шапке документа выбраны Склад1, Номенклатура1) прописываем ()
    // регистр ОстаткиНоменклатуры Расход
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Движения.ОстаткиНоменклатуры.Очистить();
    Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения=Истина;
    Движения.ОстаткиНоменклатуры.Записать();
    После строки “Движения.ОстаткиНоменклатуры.Записать();” в отладчике останавливаемся на точке останова.
    Во втором сеансе дает провести приходную накладную по др. измерениям (Склад2, Номенклатура2) т.к. разделение итогов включено. Но вот отменить проведение только что проведенной приходной накладной не дает. С чем это может быть связано ?
    Я попроробывал сам разобраться в этой проблеме. При попытке отмены проведения показывает сообщение, что говорит о том что проблема на стороне MSQL.

    При работе ЦУП пропадает показатель «анализ ожидания на блокировках» . Т.е. на запись я его ставлю, но при анализе он не появляется, хотя сам факт наличия ожидания на блокировках виден на графике.

    Логи MSQL для анализа в ЦУП создаются.

    Пробовал настроить трассировку в MSQL по событиям Lock:Acquired и Lock:Released, но в файл траасировки ничего не попало.
    Поэтому собственно появились вопросы: почему не дает отменить проведение документа?
    Должны ли эти события ожидания попадать в ЦУП? Если да, то в цем может быть проблема т.к. в ЦУП они не попали? И почему их не отловила трассировка MSQL?

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


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

  2. ITLand

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

    Вопрос по заданию №30. Не удается получить данные по показателю “Анализ ожиданий на блокировках”, в режиме Просмотр выдается сообщение “Получено пустое дерево анализа проблем производительности” (см. скриншот). Сбор данных останавливаю после завершения транзакции. В чем еще может быть проблема?

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


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

      • ITLand

        Проблем при настройке нет, трассировки и логи собираются. Обнаружила ошибку при выполнении анализа (см. скриншот).

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


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

  3. Александр

    Здравствуйте.
    Вопрос по практическому заданию №35. В правильном решении говорится, что если чтение набора записей регистра происходит вне транзакции, а в форме выбора это скорее всего так и есть, то следует выбрать нужные данные запросом. Я тут немного запутался. Благодаря курсу знаю, что блокировки накладываются только в транзакциях, а это значит, что неважно каким образом читать регистр вне транзакции – блокировки накладываться не будут. Почему появилась рекомендация про запрос вне транзакции?

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


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

  4. Andrefan

    Добрый день.
    Андрей, периодически появляется при попытке входа в базу “Ошибка разделенного доступа к базе данных. База данных заблокирована”. При этом специально никакого монопольного режима не было (явного и неявного). В каких случаях может быть заблокирована вся БД, кроме явной установки монопольного режима? Бывали ли такие ситуации на вашей практике?

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


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

  5. SvetlanaV

    Вопрос по решению к заданию 35. Длительность ожидания – почему указывается не суммарная длительность, а берется длительность первой блокировки?

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


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

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

    Возник вопрос по режимам блокировок (Mode), которые показывают Монитор активности SQL и SQL Profiler.
    По опытам у меня получилось, что Монитор активности SQL показывает тип блокировки, который установила транзакция “виновник”, а SQL Profiler тип блокировки, которую пытается установить транзакция “жертва”?

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


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

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

        Андрей, ставлю следующий опыт:
        Режим – Автоматический.
        Первая сессия (Иванов), ставлю точку останова в обработке проведения Продажи (старая методика) после записи регистра ОстаткиТоваров (строка Движения.ОстаткиТоваров.Записать();).
        Вторая сессия (Петров), выполняет обработку, которая в транзакции выполняет запрос (аналогичный запросу контроля остатков из документа Продажа) с тем же набором данных.
        Во второй сессии возникает естественное ожидание на блокировке.
        Что при этом показывают инструменты.
        Монитор активности: сессия Петров (ID 58) SUSPENDED …mode=RangeX-X ObjectID=72057594143113216… причиной является сессия Иванова (ID 57)
        SQL Profiler в случае блокировки: Lock:Acquired … 0 – LOCK … 13 – RangeS-S … 72057594143113216 1 – TRANSACTION 58 (SPID Петрова) … 7 – KEY
        SQL Profiler в случае таймаута: Lock:Timeout … 0 – LOCK … 13 – RangeS-S … 72057594143113216 1 – TRANSACTION 58 (SPID Петрова) … 7 – KEY

        Вижу разные режимы (типы) блокировок. В сессии Петрова в коде обработки нет никакой записи, только чтение в транзакции.

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


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

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


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

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

                Да, теперь все стало на свои места.
                В мониторе активности SQL в реальном времени можно увидеть оба типа блокировки (виновника и жертвы).
                В SQL Profiler мы видим информацию только по “жертве”.

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


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

  7. e.sholokh@efsol.ru

    Где то слышал что блокируются не записи что запрос возвращает, а все записи, которые запрос обрабатывает. Для управляемого режима это тоже так или только для автоматического?

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


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

  8. Gosha009

    Хотелось бы разобраться по решению задания 31. В решении первым способом решения указывается “Чтобы избежать ошибки нужно либо записывать документы с разными данными, либо включить разделитель итогов по регистру.”.
    Если со вторым способом вопросов нет, то что-то я не понимаю каким образом разные даты помогут избежать таймаута, и результаты практических опытов говорят об обратном, таймауты остаются как и раньше.

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


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

  9. Dmitry K

    День добрый.
    У меня такая проблема – некорректно работает тест центр. Делаю все по шагам как в видеоуроке. Запускаю тест, запускается ещё 2 клиента. Затем становится активным и сам закрывается сеанс из которого запущен тест. И остаются только 2 открытых тестовых сеанса.
    Вложением список ошибок после выполнения теста.

    Версия ТЦ 2.0.11.2. В настройках Тест-центра указан запуск клиента в режиме Толстый(Управляемое приложение).

    Что я делаю не так?

    Пробовал загрузить с нуля учебную базу и повторить действия в видео. Результат отрицательный.

    • shurik_shurik

      Думаю, нужно с каркасной конфигурации перенести с модуля сеанса процедуру “УстановкаПараметровСеанса”

      • Dmitry K

        Такая мысль у меня была. Только не обнаружил в каркасной конфигурации такой процедуры.
        Помогло в итоге следующее: Заново залил конфигурацию для курса и объединил с последней версией ТЦ 2.0.16.18. Последняя ТЦ сильно отличается от 2.0.11.2, и по структуре объектов и чуток по интерфейсу.

        Не получилось сделать взаимоблокировку по примеру из курса. Режим блокировок стоит автоматический. Блокировка получилась только когда явно сделал одинаковые параметры в продаже и в поступлении.

        Значит ли это что в первом случае данные не пересеклись даже с учетом захвата записей на границах диапазонов?

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


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

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

    Здравствуйте. Возник вопрос по тест центру – при задании количества пользователей (например 10) будет открыто 10 окон и начнётся проведение документа. Сколько будет использовано лицензий? По одной на каждую клиентскую сессию, т.е. 10?

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


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

  11. Александр

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

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


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

  12. yamarsel

    Вопрос немного не в тему, наверное, но все-таки.

    Почему методы, доступные только на сервере, в видеоуроках доступны и на клиенте? Это касается обработки, где выполняется запрос на клиенте, а также в видео, где создается простейший тест, используется метод Скопировать() объекта ДокументСсылка внутри процедуры с директивой компиляции на клиенте. В чем секрет?

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


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

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

    Есть несколько вопросов по 34 заданию:
    – почему при проведении «жертвы» накладывается U-блокировка, а не X?
    – S и U ведь совместимые блокировки, почему возникает ожидание?
    – почему в решении не упоминается переход на управляемые блокировки, это же должно помочь, ведь блокировка будет сниматься сразу после чтения или я не прав?

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

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


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

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

        По пункту 3 не совсем понял момент “при условии что это чтение в режиме Read Committed или Serialazible”, ведь БлокироватьДляИзменения только для управляемого режима, а в каком случае там может быть уровень Serialazible, там разве не RC или RC Snapshot?

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


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

  14. AveryanovAlexey

    Перепроведение без изменения документа не вызывает блокировок. Почему? Платформа как-то отслеживает и не выполняет методы “ОчиститьДвижения” и запись новых движений?

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


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

  15. AveryanovAlexey

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

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


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

  16. AveryanovAlexey

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

    Пытаюсь воспроизвести управляемую блокировку на учебной базе. Провожу два документа “Продажа” с одинаковыми данными (склад, товар). Режим конфигурации управляемый. Платформа 8.2. Ставлю точку останова в конце процедуры проведения. Провожу и останавливаю первый документ. Провожу второй – получаю блокировку и таймаут на уровне СУБД. Почему не на уровне 1С?

    Если вначале обработки проведения явно заблокировать данные с помощью “Блокировка = Новый БлокировкаДанных….”, то получается уже таймаут на уровне 1С.

    В первом случае ведь тоже при записи в регистр должна происходить неявная блокировка на уровне 1С? А происходит на уровне СУБД. Или я что-то не так понял?

    Спасибо.

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


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

      • AveryanovAlexey

        Точно! Именно сначала запрос. В уроке у вас по новой методике списание было организовано, поэтому вы блокировку на уровне 1С ловили.

  17. Asta0000

    Андрей, добрый день!
    Хотел посмотреть на SQL сервере, какие именно строки таблиц регистров блокируются в разных режимах работы 1С.
    В документации (technet) для просмотра блокировок предлагают динамическое административное представление sys.dm_tran_locks. Оно показывает блокировки, среди них есть с типом ресурса KEY (строка индекса). А можно ли как-то увидеть какой именно ключ индекса (диапазон ключей) был заблокирован блокировкой?
    Не нашел в документации…

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


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

  18. Asta0000

    Андрей, добрый день!
    Вы говорили об этом в лекциях, но может что уже изменилось.
    ЦУП (и ТС) не работают правильно с сервером 1С версии 8.3?
    Независимо от версии ЦУПа?

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


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

  19. pupermario

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

  20. pupermario

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

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


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

  21. Gostmair

    Конфигурация в управляемом режиме. Использую проведение документа “Продажа”. Ставлю точку останова после записи первого регистра накопления. Запускаю вторую сеанс и провожу документ с теми же данными. Должно возникнуть ожидания на управляемых блокировках 1С, а получаю ошибку по таймауту от MS SQL. Почему?

    В начале процедуры “ОбработкаПроведения” идет чтение через запрос (т.е. S блокировка сразу снимается) затем запись регистра накопления.

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

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


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

      • Gostmair

        Разделение итогов не включено. Я провожу документ процедура проведения (т.е. в транзакции), сначала идет чтение через запрос, потом запись. В первом сеансе я делаю остановку после записи в регистр. А потом запускаю второй документ с такими же реквизитами. Получается, что не может выполниться запрос и возникает ожидание именно в MS SQL (упр.режим).

        Получается, что если читать через запрос вне транзакции, то блокировок нет. А какой уровень изоляции используется при упр. режиме, чтение через запрос в транзакции раз возникает блокировка? Я думал, что должно быть Readcommited Snapshot (8.3 стоит и в СУБД настроен Snapshot) и так же отсутствие блокировок. А выходит, что как-то по другому?

        Еще вопрос про ЦУП. Он почему-то это событие обрабатывает ни как ожидание на блокировках, а просто как длительный запрос. Поэтому если анализировать ожидание ничего нет в ЦУПе, а если анализ длительных запросов, то есть. Почему в данном случае ЦУП ожидание на блокировка MS SQL не показывает в анализе ожидания на блокировках?

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


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

          • Gostmair

            Я выяснил причину проблемы. Хоть я и проверял на платформе 8.3, но стоял режим совместимости с 8.2. Из-за этого был уровень изоляции просто Readcommited, а не Readcommited snapshot. Поэтому возникала блокировка в MS SQL. Как только я снял совместимость сразу стала управляемая блокировка 1С, как и ожидалось.

            Но у меня остался главный вопрос. Когда я пытался все это выяснить, то пользовался ЦУПом. Он почему-то это событие обрабатывает ни как ожидание на блокировках, а просто как длительный запрос. Поэтому если анализировать ожидание ничего нет в ЦУПе, а если анализ длительных запросов, то есть. Почему в данном случае ЦУП ожидание на блокировка MS SQL не показывает в анализе ожидания на блокировках?

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


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

              • Gostmair

                Я пытался воспроизвести ожидания на блокировках. Делал это с помощью 2 последних в списке документов продажи (они содержат одинаковые реквизиты). Останов делал на 43 строке в модуле первого документа запускал его проведение, а затем проводил второй. Платформа 8.3.5.1517. ЦУП 2.0.13.10. Событие анализ ожидания на блокировках пустой, а длительных запросов показывает.
                База во вложении к сообщению не прошла, поэтому ссылка на яндекс диск: https://yadi.sk/d/cJdLDzmUh88Jy

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


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

                • Gostmair

                  Я ошибся в сообщении, что на 43 (когда несколько раз писал и терял текст сообщения немного накосячил с его содержимым), останов сразу после записи первого набора движений.

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


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

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

    Андрей, добрый день! Подскажите, пожалуйста, в автоматическом режиме блокировка при чтении сохраняется до конца транзакции благодаря блокировки U? Т.е. в запросе установлен признак “Для ИЗМЕНЕНИЯ”? Или это разные вещи?

    В автоматическом режиме конструкция вида :
    Документ.Ссылка.ПолучитьОбъект() тоже блокирует данные до конца транзакции? Тоже блокировка вида U?

    И еще есть вопрос, который касается контрольного задания №36. текст вопроса отправил Вам на почту

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


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

      • Гейдар Габриэлянц

        Тогда вопрос еще один, на сервере 1с в этом случае ставятся блокировки? Я так понимаю в автоматическом режиме нет, а какие будут блокировки на сервере 1с если будет управляемый режим, но в коде не будет использован объект “БлокировкаДанных”

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


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

          • Гейдар Габриэлянц

            НачатьТранзакцию();
            Об=НоменклатураС.ПолучитьОбъект();
            ЗафиксироватьТрнзакцию();

            Какие в этом случае ставятся блокировки для разных режимов на сервере 1с ?
            Насколько я понимаю на сервере 1с никаких блокировок ставиться не должно ставиться только на уровне СУБД. И она будет снята сразу после прочтения в управляемом режиме, а в автоматичеком будет держаться до конца транзакции .

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


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

              • savosin

                Вы выше писали:
                > Документ.Ссылка.ПолучитьОбъект() тоже блокирует данные до конца транзакции? Тоже блокировка вида U?
                — Да, но будет S блокировка до конца транзакции. Источник: ©Курсы-по-1С.рф

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

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


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

  23. t.gimadeev

    C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log
    здесь у меня какая-то системная трассировка и я не могу понять как это все дело отключить?
    что это за трассы?

    https://skynet.gilev.ru/latch – анализ управляемых блокировок и блокировок MS SQL Server
    установил и настроил . в итоге папка с ТЖ уже превысила гигабайт. в логах для отправки данных ничего нет! Отключил все это так как явно ошибка какая-то в сервисе. Пробовал запускать ручные обработки данных результата ноль. Отключил сервис он не рабочий.

      • t.gimadeev

        Запустил обработку, что дали и дождался больше часа. Логи растут так как это реальная боевая база. На выхлопе ничего.
        Система что-то делает, то-есть логи и трассы накапливаются. Но судя по логам отправки которых нет почему-то и даже таблица данных к отправке она тоже пуста. Я не понимаю, что происходит в данной ситуации.

        Аналогично не пашет сервис по взаимоблокировкам. ВСЕ 1 в 1!!!

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


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

          • t.gimadeev

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

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


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

  24. skeptik_m

    У меня при интеграции тест центра (2.0.13.10) в тестовую конфигурацию возникла следующая проблема: при попытке запуска агента взникало сообщение об ошибке:
    {ОбщийМодуль.ТЦСервер.Модуль(4 674)}: Ошибка при получении значения атрибута контекста (ТЦИдКлиентскогоПриложения)
    ТекущийСеанс = ПараметрыСеанса.ТЦИдКлиентскогоПриложения;
    Проблема была устранена путем копирования функции УстановкаПараметровСеанса из конфигурации ТестЦентра в тестовую. В лекции об этом не было сказано, вероятно в более ранних версиях тест-центра этого не требовалось. В общем, коллеги, имейте в виду, что такой дополнительный шаг может потребоваться.

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


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

    • Масленников Евгений

      Добрый день!

      Аналогичная ситуация на 2.0.14. Решается путем добавления в модуль сеанса:

      Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
      ТЦСервер.УстановитьПараметрыСеанса(Неопределено);
      КонецПроцедуры

  25. zels

    При подключении к сервису Гилёва для анализа блокировок появляется “Ошибка работы с Интернет: Удаленный узел не прошел проверку”
    при выполнении команды
    Прокси = ПолучитьПодключениеКБазе(СтруктураПараметров);

    Как ее обойти?

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


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

    • skeptik_m

      У меня такае сообщение об ошибке выскакивало при попытке запуска регламентного задания для отправки собранных данных сервису. Проблема решилась после того, как я заменил логин и пароль на указанные в документации к клиенту сервиса (в вордовском файле с документацией). Видимо по умолчанию ставится не то. Хотя, конечно может быть, что “после не значит вследвие”.

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


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

  26. bas

    Андрей, добрый день!
    При работе с аналитическим показателем ЦУП “Анализ ожиданий на блокировках” возник ряд вопросов:
    1. При нажатой кнопке “Различные” время ожидания по данному контексту составило примерно 6 сек (скриншот 1), однако если мы отжимаем кнопку и посчитаем сумму на калькуляторе, то получим 3 сек (скриншот 2). Куда делись 2 секунды?
    2. По какому алгоритму рассчитывается вес по каждой строке? (С “анализом запросов” было все просто: вес = количество вызовов контекста * время исполнения одного вызова.)
    3. Следствие вопросов 1 и 2 – в целом не очень понятно, как ЦУП распределяет ожидания по контекстам. Например, на скриншоте 3 видно, что у нас есть 2 разных контекста, в которых возникали ожидания на блокировках. Однако, на самом деле, это одна и та же блокировка, и если дважды щелкать по любому из 2-х контекстов, попадаем в одно и то же окно, в котором контекст определен верно (скриншот 4). Но ЦУП вместо одной строки почему-то выводит 2, независимо от кнопки “Различные”. Хотелось бы получить четкое понимание алгоритма ЦУП по распределению ожиданий по контекстам, иначе не понятно, как интерпретировать полученные данные?

    Правильно я понимаю, что:
    4. В колонке “Длительность” отображается время выполнения строки кода заблокированного контекста (скриншот 5)?
    5. Если заблокированный контекст не выполнится по таймауту, то он вообще не попадет в “анализ ожиданий на блокировках”?
    6. В поле “Время” отображается время окончания выполнения кода заблокированного контекста, а не его начала (скриншот 6)?

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


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

      • bas

        Высылаю выгрузку базы цуп версии 2.0.7.10, из которой сделаны скриншоты 3-6.

        Скриншоты 1,2 я делал в другой базе цуп (2.0.12.15), но аналогичную ситуацию я также воспроизвел и в выгруженной базе (скриншот 1).

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


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

  27. IvanSkrobot

    Андрей, добрый день!
    Вопрос по 15-му заданию. В ЦУПе вижу ожидание на блокировках, в протоколе Тест-центра – “Ошибка создания документа… Конфликт блокировок SQL”. В процессе выполнения сценария записывается только один документ. Т.е. я вместо ожиданий на блокировках, получаю взаимоблокировки SQL? Как добиться ожиданий на блокировках? Почему ЦУП не обрабатывает аналитические показатели (в мониторинге запись включаю, данные собираются)?
    P.S. в управляемом режиме управления блокировкой данных ЦУП отлавливает ожидания, но опять-таки не показывает взаимоблокировки SQL.

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


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

      • IvanSkrobot

        >На скрине этих показателей не видно.
        При сборе показателей, они были. После анализа -нет

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


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

          • IvanSkrobot

            При проведении двух одинаковых документов “Продажа” с небольшим кол-вом строк, получаю ожидания на блокировках, при большом кол-ве строк – взаимоблокировки MS SQL. Причем все строки с одним товаром.

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


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

  28. itsergey

    Андрей, по заданию 34 вопрос к ответу:
    “идет попытка установить несовместимые блокировки (S и X)”

    Комментарий:
    На скринах к заданию, в столбце “Режим” стоит значение U (при ответе я ориентировался на него).

    Цитата из тех. поддержки SQL
    Блокировки обновления (U) предотвращают возникновение распространенной формы взаимоблокировки. В сериализуемой транзакции или транзакции с повторяющимся чтением транзакция считывает данные, запрашивает совмещаемую (S) блокировку на ресурс (страницу или строку), затем выполняет изменение данных, что требует преобразование блокировки в монопольную (X).
    http://technet.microsoft.com/ru-ru/library/ms175519%28v=sql.105%29.aspx

    Вопрос: ошибка в сервисе или что-то другое? (Логичнее в столбце должно быть “X”)

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


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

      • kst

        Могу предположить, что отображается режим, установленный на момент начала конфликта блокировок, т.е. перед записью документа в той же транзакции его данные читались “для изменения”, была установлена U-блокировка, которая затем не смогла преобразоваться в X-блокировку из-за конфликта с S-блокировкой “виновника”.

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


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

  29. Sunhare

    Решение задания 24: “Чтобы избежать ошибки нужно записывать документы разными датами” – мне не удалось провести второе поступление другой датой (упр. режим, нет разделения итогов). Думаю блокируется запись в таблице итогов на 5999-11-01 и включение разделения единственный выход?

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


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

  30. dbuh2013

    В уроке 35 ответ преподавателя был такой:

    “При чтении в объектной технике необъектных сущностей (метод Прочитать()) блокировка будет
    наложена. Если код выполняется вне транзакции (по контексту видим, что это форма выбора и
    скорее всего явной транзакции там нет), то нужно реализовать чтение данных с помощью запроса.”

    Но виновник то методом Записать() наложил X блокировку, значит в любом случае чтение данных с помощью запроса ничего не решит. Или я что-то не понял?

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


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

      • dbuh2013

        Про версионирование понятно, но ведь X и S блокировки несовместимы. Как я понял из уроков, даже если запрос выполняется вне транзакции, то всё равно выполняется S блокировка на момент запроса. А данная таблица уже заблокирована X блокировкой.

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


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

          • dbuh2013

            Значит я где-то неправильно понял. Спасибо.

          • kapaceb.aa

            “Если код выполняется вне транзакции (по контексту видим, что это форма выбора и скорее всего явной транзакции там нет), то нужно реализовать чтение данных с помощью запроса.” Тогда не совсем понятно, в чем смысл реализовывать чтение с помощью запроса – ведь если мы вне транзакции, то и при использовании метода Прочитать() не будет блокировки? Или Прочитать() выполняется в неявной транзакции?

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


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

              • savosin

                “Дано”. Прочитать(). (Речь про набор записей?). Вне транзакции, но имеем неявную транзакцию.
                Что непонятно. По Вашей таблице видно, что в СУБД при 8.3 блокировки не будет – пустая клеточка.

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


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

  31. adelpieroff10

    Здравствуйте! В видео № 112 “Запись блокирует чтение”: в запросе виновника и в запросе жертвы блокировки используется уровень изоляции Repeatable Read. Хотел уточнить – это означает, что документ работает в автоматическом режиме управления блокировками?

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


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

  32. igor@kozlitin.net

    Андрей,

    В решении к заданию № 36 подразумевается, что по полю УникальныйНомер отсутствует индекс. Скажите, а не верно ли такое рассуждение, что если бы индекс отсутствовал, то оптимизатор использовал бы Clustered Index Scan? А если используется Index Scan, то индекс все-таки есть, но он не селективный? Может ли оптимизатор использовать Index Scan для индекса по совсем “левым” полям при при обращении к полю УникальныйНомер?

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


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

      • igor@kozlitin.net

        Андрей,

        Спасибо за Ваш ответ, но я все же хотел уточнить. Вот, допустим у нас есть такая ситуация. Есть составной некластерный индекс Индекс1 по полям Поле1+Поле2. В запросе у нас есть условие
        WHERE Поле2 = ?
        Тут могут быть такие пути рассуждения. Первый – оптимизатор видит, что индекс Индекс1 не может быть использован и решает использовать Clustered Index Scan. Второй – оптимизатор видит, что Поле2 все же входит в какой-то некластерный индекс (Индекс1) и решает сканировать его, т.е. делает Index Scan.
        Какой путь рассуждения правильный?

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


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

  33. crabzzy

    Андрей, добрый день.

    Пользуюсь latch сервисом для анализа блокировок на рабочей базе (ИБ на платформе 8.2.19.102, сервис на другом кластере, на 8.3.5.1119). ИБ – УТ10.3 с режимом совместимости 8.1 и режимом управления блокировками Автоматический.

    Сложность(проблема) в том, что файлы ТЖ в папках MSSQL большие, в среднем 40-60 Мб, достигают и 110 Мб.

    Выключил сейчас регламентные задания по включению журнала ТЖ и удалил строки latch из настроек logcfg.xml, настраивал 10 фоновых заданий. Сейчас 8 из них ещё работают.

    Как Вы в таких случаех используете сервис latch? Может быть нужны какие-то доп.условия в logcfg.xml на длительность блокировок СУБД или что-то подобное.

    Спасибо!!!

    PS> я подумал, что нужно регл.задание ВключениеТрассировок поставить почаще, не раз в 15 минут, а раз в 75 секунд (как и ВключениеЛоговТЖ), например, верно?

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


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

      • crabzzy

        Андрей, добрый день, да, тоже думал об этом, что необходимо перевести на упр.блокировки, потом уже исследовать наличие блокировок)
        Спасибо!

    • GilevSlava

      1. сервис latch МОЖЕТ НЕ СОБРАТЬ из ТЖ для баз с режимом совместимости с 8.1, в этом случае в ТЖ часть ключевой информации может не попасть
      во всяком случае такое поведение было раньше у платформы

      2. даже просто отключение режима совместимости с 8.1 (и обязательная последующая реструкторазиция через ТиИ) скорее всего поможет, так поменяется структура индексов и таблица с константами
      3. ваша догадка верна – Вам нужны управляемые блокировки

      только после этих работ есть смысл анализировать проблемы, если они действительно останутся как и сказал Андрей

  34. crabzzy

    пр.задание 34 – нет поля для ввода комментариев

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

      Добрый день!
      Спасибо, уже исправлено.

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