Частые вопросы по производительности «1С:Документооборота»
Приведем ответы на частые вопросы, связанные с производительностью «1С:Документооборота».
Вопрос 1
Есть ли в «1С:Документообороте» оценка производительности?
В «1С:Документообороте» версии КОРП и ДГУ есть встроенная оценка производительности. Рекомендуется включить ее перед началом работы пользователей в программе: Настройка и администрирование — Настройка программы — Общие настройки — Выполнять замеры производительности.
После этого программа автоматически будет замерять время выполнения ключевых операций: создание документа, запуск процесса, открытие и создание файла, выполнение задачи и другие. Эталонное время ключевых операций приведено здесь. На основе полученных данных удобно вовремя обнаружить снижение производительности программы и провести первичный анализ.
Чтобы увидеть средние показатели за определенный период, выполните команду Время выполнения ключевых операций в меню раздела Настройка и администрирование.
Анализ и контроль производительности можно также вести по методике APDEX — команда Оценка производительности в меню раздела Настройка и администрирование.
Вопрос 2
С чего начать проверку при замедлении работы программы?
При замедлении работы программы рекомендуется проверить формат журнала регистрации. Также эту проверку рекомендуется проводить после обновления платформы «1С:Предприятия» на версию 8.3.7 или после создания информационной базы с нуля.
Если в каталоге 1Cv8Log есть файл 1Cv8.lgd, то нужно изменить формат журнала регистрации. Порядок замены:
- остановите сервер «1С:Предприятия»;
- удалите все файлы в каталоге 1Cv8Log. По умолчанию каталог расположен C:\Users\USR1CV8\AppData\Local\1C\1Cv82\reg_1541\;
- создайте в папке 1Cv8Log пустой файл 1Cv8.lgf;
- снова запустите сервер «1С:Предприятия».
Вопрос 3
Что делать, если у рядовых пользователей ключевые операции выполняются более 15 секунд? По прошествии этого времени операции выполняются без ошибок. При входе в программу под Администратором задержек нет. Все рекомендованные настройки СУБД и сервера «1С:Предприятие» выполнены.
Во-первых, проверьте версию конфигурации. Если установлена версия 1.4.xx, необходимо перейти на версию 2.0, куда включено много доработок по быстродействию.
Если проблема воспроизводится в 100% случаев:
- Запустите сервер «1С:Предприятия» с ключом debug. Обратите внимание: при этом работа сервера значительно замедлится, поэтому такой запуск рекомендуется проводить только в нерабочее время.
- В конфигураторе включите замер производительности.
- Выполните операцию под тем пользователем, у которого зафиксирована проблема.
- В замерах производительности посмотрите, на что ушло основное время;
- Сохраните замер в файл .pff и пришлите его на линию тех поддержки «Фирмы 1С».
Дополнительно к данным, которые запрашивает тех поддержка «Фирмы 1С», необходимо прислать подробное описание проблемной ситуации и информацию о том, типовая ли конфигурация или доработанная. Например, «16 марта 2016 года с 12:00 у пользователя Иванов И.И. карточка внутреннего документа открывается 30 секунд. Конфигурация на поддержке».
Если проблема воспроизводится не в 100% случаев:
- Настройте технологический журнал на сервере «1С:Предприятие» (скачать готовые настройки logcfg.xml).
Если технологический журнал уже настроен, то к уже имеющимся настройкам нужно добавить новые из скачанного файла. Файл logcfg.xml обычно распроложен тут: C:\Program Files (x86)\1cv8\conf (для 32-битного сервера «1С:Предприятие»); C:\Program Files\1cv8\conf (для 64-битного сервера «1С:Предприятие»). - Дождитесь повторного воспроизведения проблемы.
- Пришлите данные технологического журнала на линию тех поддержки «Фирмы 1С».
Дополнительно к запрашиваемым данным нужно подробно описать один! конкретный случай воспроизведения с точным временем: Например, «У пользователя Петров И.В. карточка внутреннего документа открывалась 30 секунд. Время: 16 марта 2016 г. в 14:45:50.
Вопрос 4
Что делать, если зафиксированы периодические замедления работы, например, раз в минуту?
Проверьте версию конфигурации. Если это версия 2.0.9 — 2.0.13 включительно, то обновитесь на более свежую или отключите автоматическую проверку контрагентов по ЕГРН (Настройка и администрирование — Настройки программы — Контрагенты — Автоматически проверять контрагентов по ЕГРН).
Вопрос 5
Что делать, если операция длится более 20 секунд, после чего выдает ошибку «Превышено максимальное время ожидания предоставления блокировки»? Как правило, ошибка проявляется у всех пользователей.
- В консоли администратора откройте список Сеансы. Установите сортировку по колонке Захвачено СУБД.
- Самый большой показатель будет на первом месте. Если он превышает значение 20 секунд, запишите номер сеанса из соответствующей колонки. Это понадобится для дальнейшего анализа.
- Отключите проблемный сеанс с помощью команды контекстного меню Del.
- Найдите в журнале регистрации первую запись, соответствующую этому сеансу. Если это регламентное задание, запишите его название. Оно потребуется для отправки на линию технической поддержки при регулярном воспроизведении проблемы.
Если проблема регулярно повторяется выполните следующие действия:
- Настройте технологический журнал на сервере «1С:Предприятие» (скачать готовые настройки logcfg.xml).
Если технологический журнал уже настроен, то к уже имеющимся настройкам нужно добавить новые из скачанного файла. Файл logcfg.xml обычно распроложен тут: C:\Program Files (x86)\1cv8\conf (для 32-битного сервера «1С:Предприятие»); C:\Program Files\1cv8\conf (для 64-битного сервера «1С:Предприятие»). - Дождитесь повторного воспроизведения проблемы.
- Пришлите данные технологического журнала на линию тех поддержки «Фирмы 1С».
Дополнительно к запрашиваемым данным нужно собрать данные на момент ошибки и за час до нее, подробно описать один конкретный пример ошибки с точным временем его воспроизведения. Например, «Пользователю Смирнову П.Р. не удается записать карточку внутреннего документа. 22 апреля, в 11:25:40».
1с захвачено субд в чем измеряется
Заметил неприятный баг у консоли запросов в инструментах разработчика (все равно спасибо автору). Если выполнить любой запрос, то начинает расти показатель захвачено СУБД.
Вроде, как и объекты не блокируются, но принято считать, что показатель захвачено субд отражает кто из пользователей больше грузит сервак (админы по нему выгоняют пользователей, чтобы дали другим работать).
Вопрос в том, что показывает показатель «захвачено субд», как интерпритировать его значения.
Вообще-то он показывает длительность транзакции в секундах, но учитывая, что блокировки в течении транзакции накапливаются, то максимально длительная транзакция предположительно больше блокировок держит
(0) запросник вроде держит временную таблицу, по опыту никакой нагрузки это не оказывает
кстати такой баг можно использовать для просмотра плана запросов в профайлере в рабочей базе, т.к. в этом случае SPID не будет меняться и по нему можно указать фильтр
(3) возможно это не баг, а фича (удобняк же)
(0) Серьезно просаживало производительность.
Результат — запрет на использование не типовых консолей в боевых базах.
(5) все говорят, что происходит падение производительности, но за счет чего не могут объяснить. Понятно, если выполнение большего запроса, но если запрос выполнился и просто висит МВТ, то что на блокирует?
Какой ресурс забирает у сервера захвачено субд?
Пример, для моделирования
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = новый МенеджерВременныхТаблиц;
Запрос.Текст =
«ВЫБРАТЬ ПЕРВЫЕ 1
| РеализацияТоваровУслуг.Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг»;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
мвт = Запрос.МенеджерВременныхТаблиц;
КонецПроцедуры
(6) Полгода назад интересовался. v8: Посоветуйте консоль запросов.
Потом забил. Т.к. действительно редко нужно что-то отлаживать на боевой базе.
Длительность захвата соединения с базой данных текущим сеансом с момента захвата по текущий момент. Отображается только если соединение с СУБД захвачено сеансом.
http://its.1c.ru/db/v83doc#bookmark:cs:TI000000173
Само по себе соединение не оказывает влияния на производительность.
(8) что значит захват соединения? Будто у сервера 10 соединения, а я 1 забрал и один пользователь не сможет подключиться
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
Программирование в 1с
Вопрос 6.1. Документ РеализацияТоваров осуществляет движения по регистру ОстаткиНаСкладах, а именно списывает реализованное количество товаров со склада. В обработчике проведения документа выполняется проверка превышения лимитов — минимального допустимого остатка товара на складе и максимально допустимого размера отгрузки со склада. Запрос выглядит следующим образом:
Ответ:
Запрос.Текст font-family: Verdana, sans-serif; font-size: x-small;»>| ДЛЯ ИЗМЕНЕНИЯ»;
1) После ДЛЯ ИЗМЕНЕНИЯ не указаны таблицы. В случае если после предложения ДЛЯ ИЗМЕНЕНИЯ отсутствуют имена таблиц, блокироваться будут данные из всех таблиц, задействованных в запросе. Что приведет к избыточным блокировкам.
Следует блокировать для изменения только таблицу остатков товара.
2) Проверку лимитов нужно делать в самом запросе.
3) Подзапрос следует заменить на ВТ.
Вопрос 6.2. Имеется реально работающая многопользовательская система. Необходимо решить следующие задачи:
1) Определить пользователей, которые в данный момент выполняют длительные запросы к базе данных.
2) Определить пользователей, которые заблокировали других пользователей.
На оба вопроса можно ответить с помощью консоли кластера.
В колонке «захвачено СУБД» отображается время выполнения запроса.
В колонке «заблокировано упр.» отображается номер сеанса которым заблокирован текущий сеанс. Номер сеанса можно увидеть и
через монитор активности.
Вопрос 6.3. В метаданных конфигурации описан регистр накопления (остатков) ОстаткиНаСкладах, имеющий измерения «Склад» и «Товар». Информационная база работает в режиме клиент-сервер с использованием СУБД PostgreSQL.
Будут ли перечисленные пары операций выполнятся параллельно из разных сессий? Все операции выполняются при проведении документа.
Программирование в 1с
В конфигурации определены следующие объекты метаданных:
Справочник «Контрагенты». Структура:
ДоговорСКонтрагентом (тип Документы.ДоговораСКонтрагентами.Ссылка)
ДоговорАннулирован (тип Булево)
ФотокопияДоговора (тип ХранилищеЗначений)
Регистр накопления «ВзаиморасчетыСКонтрагентом». Структура:
Сделка (составной тип из 28 видов документов).
Проанализируйте следующий код из вложенного файла и укажите на неоптимальные решения.
Предложите более оптимальный способ решить эту задачу.
Запрос = Новый Запрос;
Запрос.Текст ;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сделка = Выборка.Сделка;
Контрагент = Сделка.Контрагент;
Если (Контрагент.ДоговорАнулирован) Тогда
Сообщить(«Договор с » + Контрагент.Наименование + » анулирован!»);
КонецЕсли;
КонецЦикла;
1) Т ак как поле «Сделка» составного типа, то нужно использовать функцию «Выразить».
2) В запросе отбираются лишние данные, нужно отбирать в запросе сразу задать условие где «ДоговорАнулирован = Истина».
3) В цикле идет обращение через точку, следовательно, получаются запросы в цикле. Необходимо получать наименование контрагента сразу в запросе.
Вопрос 11.2
Что такое блокировка и для чего она нужна? Кто и когда устанавливает блокировку? Кто и когда снимает блокировку? Что такое ожидание на блокировке и когда оно происходит.
1) Что такое блокировка и для чего она нужна? Блокировка это информация о том, что некоторый ресурс заблокирован.
2) Кто и когда устанавливает блокировку? Блокировка устанавливается явно и неявно.
Явно устанавливает разработчик с помощью конструктора встроенного языка Новый БлокировкаДанных.
Неявно блокировка устанавливается платформой при записи(удалении) объектов, в обработке проведения и др.
3) Ожидание на блокировке это ситуация когда транзакция не может установить свою блокировку так как ресурс уже заблокирован другой транзакцией.
Вопрос 11.3
Конфигурация системы содержит документ, имеющий сложную функциональность. При проведении документа выполняется большое количество строк кода из различных модулей, выполняющихся как на клиенте так и на сервере 1С: Предприятия. По результатам тестирования производительность документа в однопользовательском режиме признана неудовлетворительной. Перед Вами поставлена задача повысить скорость проведения документа. Предложите план конкретных действий, направленных на решение этой задачи.
1)Если даже в однопользовательском режиме операция выполняется медленно значит есть неоптимальные запросы.
С помощью замера производительности в отладчике определить самые «тяжелые» запросы и их оптимизировать.
2) «Разгрузить» обработку проведения. Возможно некоторую часть функционала можно вынести из обработки проведения и вызывать их отдельными командами.
1С: Эксперт. Решение билета №10.
Вопрос 10.1
Регистр накопления имеет следующую структуру: Измерения: Склад Ресурсы: Товар , Остаток Документ имеет следующую структуру: Реквизиты: Организация , Контрагент Табличная часть «Товары»: Товар , Склад , Количество Документ проводится по регистру и реквизиты табличной части переносятся в измерения и ресурсы регистра по следующей схеме:
Возможно ли реализовать такую структуру данных?
Если да, то оптимальна ли такая структура?
Возможно ли реализовать такую структуру данных? Нет так ресурс может быть только числом.
Если да, то оптимальна ли такая структура? Скорее всего нет, так как обычно склад один и то же поэтому его следует перенести в шапку.
Вопрос 10.2. Что такое уровень изоляции. Какие УИ поддерживает 1С Предпритие 8. Чем они отличаются с практической точки зрения?
Как говорит википедия » Уровень изолированности транзакций — значение, определяющее уровень, при котором в транзакции допускаются несогласованные данные, то есть степень изолированности одной транзакции от другой. Более высокий уровень изолированности повышает точность данных, но при этом может снижаться количество параллельно выполняемых транзакций. С другой стороны, более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных.»
В 1С поддерживаются следующие уровни изоляции:
- Read uncommitted
- Read committed
- READ COMMITTED SNAPSHOT
- Repeatable read
- Serializable
Вопрос 10.3
В результате анализа проблемы взаимоблокировки в реально работающей системе на платформе 1с 8 была обнаружена ее причина: Запрос в транзакции без опции «Для изменения» и затем запись прочитанных данных. Почему в этом случае возникает взаимоблокировка? Как и почему изменится ситуация, если использовать опцию «для изменения».
Причина описанной взаимоблокировки называется «повышение уровня изоляции транзакции». В автоматическом режиме при чтении запросом без опции «для изменения» устанавливается S блокировка до конца транзакции.
При записи данных устанавливается X блокировка также до конца транзакции.
Если 2 параллельные транзакции выполняют эти действия параллельно, то возможна следующая ситуация: Обе смогут выполнить запрос, так как S блокировки совместимы. Дальше первая транзакция не сможет наложить свою X блокировку так как на ресурс наложена S блокировка второй транзакции, и вторая транзакция не сможет наложить свою X блокировку так как на ресурс наложена S блокировка первой транзакции, что и приведет к дедлоку.
Если же запрос выполнять с опцией «для изменения», то будет наложена U блокировка, а U блокировки между собой не совместимы и одна из транзакций станет в очередь и будет дожидаться завершения первой транзакции .
среда, 28 октября 2015 г.
1С: Эксперт. Решение билета №9
Вопрос 09.1
В конфигурации определен регистр накопления «ОстаткиТоваровНаСкладах», который имеет следующий набор измерений:
Измерения регистра не проиндексированы.
Пользователь А выполняет в транзакции запрос следующего вида:
Запрос.Текст = “ВЫБРАТЬ
| Остатки.Склад КАК Склад,
| Остатки.Товар КАК Товар,
| Остатки. КоличествоОстаток КАК Остаток
| РегистрНакопления.ТоварыНаСкладах.Остатки(,Товар=&Товар) КАК Остатки”;
Запрос.УстановитьПараметр(“Товар”, Справочники.Товары.НайтиПоКоду(“00001”));
Пользователь Б выполняет в запись следующего набора записей регистра ТоварыНаСкладах:
ОсновнойСклад
Телевизор SHARP
ОптовыйСклад
Телевизор SHARP
Смогут ли два этих действия выполнится параллельно? Обоснуйте свой ответ. Как измениться ситуация, если Пользователь А укажет условие по складу «Резервный склад». Почему?
В первом случае скорее всего будет выполнен запрос со сканированием и на весь регистр во время выполнения запроса будет наложена S блокировка.
Соответственно вторая транзакция не сможет наложить свою X блокировку при записи.
Если Пользователь А укажет условие по складу «Резервный склад» то сможет использоваться поиск по кластерному индексу при выполнении запроса и транзакции смогут выполнится параллельно.
Вопрос 09.2
Код конфигурации содержит следующий фрагмент:
НачатьТранзакцию();
Процедура1();
НачатьТранзакцию();
Процедура2();
НачатьТранзакцию();
Процедура3();
ОтменитьТранзакцию();
Какие действия будут отменены в результате выполнения функции ОтменитьТранзакцию() в 7 строке.
Будут отменены все действия, так как вложенные транзакции не поддерживаются.
Вопрос 09.3
Для работы системы используется сетевой ключ на 50 пользователей, который установлен на сервере предприятия. Во время работы системы у различных пользователей периодически возникает ошибка «Не обнаружен ключ защиты программы». Укажите возможные причины возникновения ошибки и предложите способы их устранения.
1) Скорее всего сервер не успевает выдавать лицензии, поэтому требуется настроить файл nethasp.ini.
2) Проверить используемый протокол. Если используется ipv6, то следует перейти на протокол ipv4 так как HASP License Manager работает только с IPv4.
3) Установка HASP License Manager на терминальный сервер
4) Возможно сам ключ поврежден.
Как установить заголовок приложения(системы)
Надумал я немножко «попиарится». На одном известном форуме люди выкладывают свои решения экзаменационных задач к экзамену 1с специалист, но в подписи нельзя просто указать адрес сайта. Но всегда есть минимум 2 выхода). Решил эту задачу тем что адрес блога будет выводится в заголовке клиентского приложения. Таким образом если человек скачает решение он узнает и о блоге. (Есть конечно невнимательные люди могут и не увидеть) ).
Как это можно сделать.
1) В общем модуле «Общиймодуль1» с включенным признаком «ВызовСервера» прописываем функцию
Функция ПолучитьСиноним() Экспорт;
ТекСиноним = Метаданные.Синоним;
Возврат ТекСиноним;
КонецФункции
2) В модуле управляемого приложения вставляем код
Процедура ПриНачалеРаботыСистемы()
ТекЗаголовок = «learning1c.blogspot.com » ;
ТекСиноним= ОбщийМодуль1.ПолучитьСиноним();
НовЗаголовок = ТекЗаголовок+ТекСиноним+ИмяПользователя() ;
УстановитьЗаголовокКлиентскогоПриложения(НовЗаголовок);
КонецПроцедуры
3) Устанавливаем сам заголовок в свойствах конфигурации.
Получаем требуемую картину