Изыскания на тему записи в регистр сведений

Публикация № 1486761 21.09.21

Администрирование - Производительность и оптимизация (HighLoad)

оптимизацияпроизводительности MSSQL profiler lowlevel

Уважаемые коллеги, здравствуйте! Сегодня хочу поделиться с Вами своими изысканиями на тему записи в регистр сведений в контексте оптимизации одной операции. Однажды мы столкнулись со следующей проблемой: поступили жалобы от разработчиков сайта, что наш веб-сервис очень медленно реагирует, точней, обработка запроса не укладывается в таймаут 5 секунд, и сайт получает ошибку 500. Стали разбираться, и вот что выяснили.

Предыстория Досталась задача на оптимизацию по незнакомому участку кода и структуре конфигурации

Краткое описание ключевой операции

  1. Получение запроса от сайта, обработка данных и выдача ответа
  2. Пометка в лог о взаимодействии с сайтом (фиксируем в регистр тело запроса и тело ответа) 

Первичный сбор данных MSSQL-профайлером, произведённый нашим системным администратором (вложение slow_query.trc), показал что узкое место - запись в регистр _InfoRg3656

 

 

Бросилось в глаза, что запись в регистр идёт с опцией WITH SERIALIZABLE, это означает, что блокируется вся таблица целиком. (Для MSSQL это неверно, SERIALIZABLE вызывает блокировку всей таблицы только у СУБД "версионников": PostgreSQL и Oracle)

Сложилось ощущение, что долгая запись идёт из-за ожидания на блокировках. Проверил режим блокировок - стоял Автоматический, а в этом режиме для необъектных сущностей (например, регистр сведений) уровень изоляции = SERIALIZABLE. Первым делом перевели конфигурацию в Управляемый режим блокировок.

 

 

Слева Автоматический режим блокировок, справа - Управляемый

Примечание: сравнение текстов проведено с помощью Notepad++ с помощью плагина Compare, подробней ЗДЕСЬ, этот механизм сравнения удобней встроенного в 1С тем, что не нужно предварительно сохранять тексты в файлы, а достаточно вставить тексты из буфера обмена на две разных закладки в Np++ , и нажать одну кнопку  

Итак, SERIALIZABLE ушёл. Но проблема не решилась. Стали копать глубже.

Что же может быть не так?

exec sp_executesql N'DELETE FROM T1
FROM dbo._InfoRg3656 T1
WHERE T1._Fld3658 = @P1 AND T1._Fld3659 = @P2',
N'@P1 nvarchar(4000),@P2 nvarchar(4000)',N'ЕстьЛиЧекиПоЗаказам',N'6d89de15-6bcb-43d4-8580-fbc0c093a612'

Посмотрим на план запроса. Перед этим небольшое отступление на случай, если с MSSQL Profiler-ом кто-то не знаком

 

Как читать трассировки

Записанные трассировки в Профайлере состоят из 2-х частей:

  1. Верхняя, где список событий
  2. И нижняя, где можно увидеть подробности выделенного сверху события.

 

Трассировки, приложенные к публикации в основном были собраны с фильтром на следующие 3 вида событий

  1. Showplan Statistics Profile = План выполнения запроса текстом
  2. Showplan XML Statistics Profile = План выполнения запроса графически
  3. RPC:Completed = Текст запроса 

ВАЖНО! Трассировки достаточно большие, поэтому чтоб найти интересующие нас события, связанные с проблемной операцией, через Ctrl+F делаем поиск по маске _InfoRg3656

Трассировка 1. Набор записей с замещением без отбора по дате (DELETE+SCAN).trc

Текст запроса

DELETE FROM T1
FROM dbo._InfoRg3656 T1
WHERE T1._Fld3658 = @P1 AND T1._Fld3659 = @P2


План выполнения запроса

 

 

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

Если внимательно посмотреть на номера таблиц/полей в нотации SQL - можно заметить что один порядковый номер пропущен. Что наводит на мысль о том, что отбор происходит по второму и третьему измерению, и они не индексированы.

 

Проверим в конфигураторе:

 

Проблемный участок кода, обратите внимание на поля, по которым ставится отбор

// ID и время для уникальности
УИДЗапроса = Строка(Новый УникальныйИдентификатор);
ВремяЗапроса = ТекущаяДата();

НаборЗаписей = РегистрыСведений.ЛогЗапросовОтСайта.СоздатьНаборЗаписей();
// Уникальный ID запроса, некое поле, искусственно созданное для дополнительной уникальности в рамках секунды
НаборЗаписей.Отбор.УидЗапроса.Установить(УИДЗапроса); // Отбор на третье измерение "УИДЗапроса"
// ИмяМетода - входящий строковый параметр, где может встречаться до 10 различных значений (иными словами, селективность низкая, но об этом позднее)
НаборЗаписей.Отбор.ТипЗапроса.Установить(ИмяМетода);  // Отбор на второе измерение "ИмяМетода"
        
Движение = НаборЗаписей.Добавить();
// измерения
Движение.ВремяЗапроса = ВремяЗапроса;
Движение.УидЗапроса = УИДЗапроса;
Движение.ТипЗапроса = ИмяМетода;
// ресурсы
Движение.ВходящийJSON = ТелоЗапроса;
Движение.ОтветныйJSON = ТелоОтвета;
// запись с замещением
НаборЗаписей.Записать();

Что мы видим? При установке отбора в наборе записей не ставится отбор на первое измерение "ВремяЗапроса".

Посмотрим, какие индексы есть на этом регистре?

И действительно, измерения явно не индексированы!

В конфигураторе на всех измерениях - Не индексировать

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

 

 

Таким образом, происходит вот что (А) набор происходит с замещением, поэтому перед записью выполняется DELETE в соответствии с установленным отбором, (Б) отбор при записи набора ставится на второе и третье измерение, первое в отборе не используется, посему система не может использовать существующий "системный" индекс по измерениям, и в итоге сваливается в скан. Решить эту проблему есть несколько способов. 

Способ первый: изменить порядок измерений регистра таким образом, чтоб отбор попадал в индекс, например неиспользуемое в отборе ВремяЗапроса поставить на третье место. Проделаем, обновим конфигурацию ИБ, и повторим замер.

 

 

Трассировка 2. Набор записей с замещением без отбора по дате, поменял порядок измерений в регистре (оптимальный DELETE).trc

 

 

Что видим:

  1. SCAN пропал
  2. Количество обработанных строк уменьшилось до одной
  3. Duration устремился к нулю

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

Рассмотрим другой способ, которым можно было бы воспользоваться в данном случае. Если мы обратим внимание на заполнение измерения УидЗапроса, мы увидим что оно заполняется значением Новый УникальныйИдентификатор, то есть по сути всегда уникальное, поэтому замещение можно и отключить. Попробуем. 

НаборЗаписей.Записать(Ложь);

Трассировка 3. Набор записей БЕЗ ЗАМЕЩЕНИЯ без отбора по дате, исходный порядок измерений (SELECT вместо DELETE, скана нет).trc

 

Что мы видим:

  1. DELETE исчез, вместо него явился SELECT
  2. SELECT (для контроля уникальности платформой 1С) при отборе использует все три измерения
  3. Таким образом, отбор попадает в существующий платформенный индекс по измерениям, и получается Clustered Index Seek вместо скана, всё оптимально.

Задача решена. Но не всегда можно отключить замещение. Какие ещё есть варианты? Можно ли оптимизировать запись в регистр в данном случае, не трогая структуру конфигурации вообще? Да. Чтоб платформа смогла задействовать существующий неявный индекс по измерениям - достаточно поставить отбор и на это поле тоже. Сделаем (Добавим одну строку кода, при этом конфигурацию откатим в первоначальное состояние)

// ID и время для уникальности
УИДЗапроса = Строка(Новый УникальныйИдентификатор);
ВремяЗапроса = ТекущаяДата();

НаборЗаписей = РегистрыСведений.ЛогЗапросовОтСайта.СоздатьНаборЗаписей();
// Уникальный ID запроса, некое поле, искусственно созданное для дополнительной уникальности в рамках секунды
НаборЗаписей.Отбор.УидЗапроса.Установить(УИДЗапроса); // Отбор на третье измерение "УИДЗапроса"
// ИмяМетода - входящий строковый параметр, где может встречаться до 10 различных значений (иными словами, селективность низкая, но об этом позднее)
НаборЗаписей.Отбор.ТипЗапроса.Установить(ИмяМетода);  // Отбор на второе измерение "ИмяМетода"
// ОПТИМИЗАЦИЯ ЗДЕСЬ! { 
// ВремяЗапроса - первое измерение, и именно его не хватало в отборе, чтоб был задействован индекс
НаборЗаписей.Отбор.ВремяЗапроса.Установить(ВремяЗапроса); 
// }
        
Движение = НаборЗаписей.Добавить();
// измерения
Движение.ВремяЗапроса = ВремяЗапроса;
Движение.УидЗапроса = УИДЗапроса;
Движение.ТипЗапроса = ИмяМетода;
// ресурсы
Движение.ВходящийJSON = ТелоЗапроса;
Движение.ОтветныйJSON = ТелоОтвета;
// запись с замещением
НаборЗаписей.Записать();

Трассировка 4. Набор записей с замещением с отбором по дате (DELETE без SCANа).trc

 

Что видим?

  1. Clustered Index Delete без скана
  2. В отборе используется все три поля, индекс задействован, всё оптимально
  3. В точки зрения плана запроса трассировка идентична той, когда мы меняли порядок измерений

Хорошо. Имеем 3 способа решить эту задачу.

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

 

 

Трассировка 5. Набор записей с замещением без отбора по дате (DELETE, поиск по диапазону индекса), проиндексировано второе измерение с низкой селективностью.trc

 

 

Ситуация в некотором смысле промежуточная:

  1. Индекс используется, но из-за низкой селективности отбирается по нему не 1 строка сразу, а 29тыс (напомню, всего в таблице 151тыс строк)
  2. А дальше уже по этому набору находятся нужная одна - и по ней идёт удаление
  3. Duration - не 0 как в других вариантах, но 6 миллисекунд - тоже замечательно 

Добро. Теперь сравним этот вариант с похожим. Что будет, если опять же CF оставить первозданным, но проиндексировать не второе измерение, а третье (УидЗапроса с уникальными значениями и, соответственно, с наивысшей селективностью)?

 

 

Трассировка 6. Набор записей с замещением без отбора по дате (DELETE, поиск по индексу), проиндексировано третье измерение с высокой селективностью.trc

7. Менеджер с замещением без отбора, измерения не индексированы, статистика после обновления не обновлена.trc

Данный вариант не совсем по теме регистров сведений, но тоже относится к оптимизации с точки зрения обслуживания баз на уровне СУБД, точнее обновления статистики. Явился он в процессе исследования еще одного способа решения исходной задачи. Через смену способа записи в регистр: что если использовать менеджер записи вместо набора записей? (СF изначальный)

ЗаписьВЛог = РегистрыСведений.ЛогЗапросовОтСайта.СоздатьМенеджерЗаписи();
// измерения
ЗаписьВЛог.ТипЗапроса = СтроковоеИмяМетода;
ЗаписьВЛог.УидЗапроса = УИДЗапроса;
ЗаписьВЛог.ВремяЗапроса = ТекущееВремя;
// ресурсы
ЗаписьВЛог.ВходящийJSON = ТелоЗапроса;
ЗаписьВЛог.ОтветныйJSON = ТелоОтвета;
// запись в базу
Замещать = Истина;
ЗаписьВЛог.Записать(Замещать);

 В трассировке наблюдаем странное: обычно запросы идут парами Showplan+RPC:Completed (ПланВыполненияЗапроса+ТекстСамогоЗапроса ), а тут перед запросом (RPC:Completed) аж 3 плана (Showplan), причём первые два с пометками "Предупреждение: Столбцы без статистики" 

 

 

 

Последний из 3х планов выглядит отлично, но время сравнительно медленное. Смею предположить, что оно было потрачено на построение 2х первых "неподходящих" планов, после чего был инициирован пересчёт статистик по связанным объектам, и поэтому... (см. trace 8)

8. Менеджер с замещением без отбора, измерения не индексированы, статистика после обновления не обновлена, второе выполнение, почему-то уже ОДИН план вместо 3х до DELETE.trc

 

 

Мораль сей басни

  1. Если не настроен регламентный достаточно частый пересчёт статистик, при надобности статистика пересчитается на лету, чем нагрузит базу данных в рабочее время, и незначительно будут замедлены запросы на построение не подходящих планов
  2. Запись в независимый регистр сведений (набора из одной строки) оптимальней делать через менеджер записи, а не набором записей(с точки зрения производительности ниже риск непопадания в индекс + изящней в коде)

Конечный вариант оптимизации на этой конкретной задаче

  1. Изменён порядок измерений, так как было известно, что это не помешает в других местах, а тратить место на дополнительный индекс не хотелось
  2. Запись в регистр переписана с набора записей на менеджер записи

Версия платформы, на которой проводились работы

8.3.16.1148, подозреваю, что на всех 8.3 будет аналогично.

Благодарности

  1. Моему уважаемому коллеге, который нечаянно создал сложившуюся неоптимальность, чем подарил мне возможность провернуть все эти эксперименты и собрать материал для статьи
  2. Дмитрию Юхтимовскому, за знания полученные на курсе и вообще 

Вместо эпилога

Всем добра, любви и процветания
Спасибо за внимание
До свидания! (с)

Что-нибудь жмите, что-нибудь пишите! (с)

Скачать файлы

Наименование Файл Версия Размер
Все трассировки

.rar 431,97Kb
0
.rar 431,97Kb Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ManyakRus 420 21.09.21 09:55 Сейчас в теме
отлично разобрались :-)
Только можно было так догадаться сделать и без никаких измерений :-)
DrAku1a; buganov; +2 Ответить
2. Hatson 467 21.09.21 10:18 Сейчас в теме
Винрарная статья. Хорошая шпаргалка. Плюсую.
DrAku1a; METAL; +2 Ответить
23. Eremkin 23.09.21 09:34 Сейчас в теме
(2)Винрарная статья. Интересное определение ))
24. Hatson 467 23.09.21 09:55 Сейчас в теме
(23) Очень старый термин )). Означает, что материал не потеряет актуальность долгое время.
33. METAL 238 23.09.21 22:32 Сейчас в теме
45. Terve!R 27.09.21 09:30 Сейчас в теме
(24) древние вроде говорили "рарная", а Windows позже появился )
3. kser87 2168 21.09.21 11:11 Сейчас в теме
Поменять режим блокировок и не словить кучу багов это прямо фантастическое везение.
Garfild12; DrAku1a; Yashazz; nekit_rdx; buganov; msvd; sinichenko_alex; mysm; coollerinc; Ali1976; SerVer1C; +11 Ответить
55. METAL 238 28.09.21 19:02 Сейчас в теме
(3) Правильно ли понимаю, что под багами в данном случае понимаются проблемы, которые возникли из-за того, что в нужных местах не были наложены управляемые блокировки?
57. kser87 2168 28.09.21 22:09 Сейчас в теме
4. gybson 21.09.21 11:21 Сейчас в теме
Сначала ввели реквизит в добавок ко времени (уникальность внутри секунды), а потом перестали писать время.

И остается загадкой почему используют РС, а не справочник. В чем фишка-то генерить самому УИД и дописывать в конец? Просто 1С и сами так делают я смотрю
JohnyDeath; +1 Ответить
25. Hatson 467 23.09.21 10:00 Сейчас в теме
(4)
И остается загадкой почему используют РС, а не справочник.


Наверно в справочнике много лишнего: стандартные реквизиты, иерархия, контроль ссылочной целостности + справочник так же просто как РС не очистишь.
27. METAL 238 23.09.21 11:50 Сейчас в теме
(25) Ну да. Верно.
Иными словами, перечисленное Вами - следствия того, что справочник - объектная сущность. А любые логи - необъектная. Поэтому регистр сведений подходит больше. В качестве подтверждения этих слов хочется поинтересоваться у сторонников справочников для логов: кто когда видел любые логи в типовых на справочниках? Я не встречал.
Дмитрий74Чел; orfos; +2 Ответить
29. Yashazz 4086 23.09.21 22:23 Сейчас в теме
(27) Я делал логи на документах. Меньше служебных полей, проще индексация, и хорошо подходит для больших объёмов. Справочник это всё-таки условно-постоянная НСИ обычно.
32. METAL 238 23.09.21 22:31 Сейчас в теме
(29) Исходя из того, что замеры в БСП (в ряде наших баз отлично работают, в том числе нагруженных) - на регистрах сведений, думаю, они больше подходят для сбора и хранения подобной информации

А так - в некоторых случаях на короткое время (на период отладки какой-то области, например) журнал регистрации еще можно использовать..
37. Cyberhawk 129 24.09.21 17:46 Сейчас в теме
(29)
Меньше служебных полей
Справочник можно сделать без кода и наименования, и тогда из служебных останется сколько - одно - ПометкаУдаления? А у документа помимо пометки всегда будет еще и дата, по которой к тому же еще строится безусловный дополнительный индекс. Чем же документ предпочтительнее справочника?
46. gybson 27.09.21 19:46 Сейчас в теме
(27) необъектным сущностям УИД не присваивают обычно. У "Битрикс 24" логи синхронизации в РС, но отображаются в виде дерева. Справочник с кодом неплохо подходит еще и тем, что порядок записей однозначный даже без метки времени. Думаю в него просто дольше запись происходит, проверять лень =)
26. METAL 238 23.09.21 11:46 Сейчас в теме
(4)
а потом перестали писать время

Нет же, с чего Вы взяли? Период фиксировать не перестали, но отбор по нему при записи набора - первоначально не ставился, это другое
5. the1 918 21.09.21 11:31 Сейчас в теме
Почему я не удивлён?
Прикрепленные файлы:
kare; Terve!R; DrAku1a; Dach; Yashazz; Hatson; +6 Ответить
28. Hatson 467 23.09.21 13:08 Сейчас в теме
(5) Среднестатистический программист 1С не знает ничего про индексы, транзакции, блокировки и т.д. с отговоркой "А зачем мне это?".
В итоге: любой пользователь (даже тот, кто никогда не работал в 1С) знает, что 1С - самая медленная и тупая система - >
В итоге: репутация специалистов в отрасли, скажем так, не на самом высоком уровне ->
В итоге: "они не тру программисты", а значит их ЗП не может быть как у например Java разработчиков
AneJIbcuH; kare; CheBurator; orfos; +4 Ответить
6. brr 180 21.09.21 13:03 Сейчас в теме
Бросилось в глаза, что запись в регистр идёт с опцией WITH SERIALIZABLE, это означает, что блокируется вся таблица целиком.


Не означает.
Dach; mitia.mackarevich; CSiER; pm74; +4 Ответить
10. METAL 238 21.09.21 21:44 Сейчас в теме
(6) Заинтриговали. А что же это означает, по-вашему?
12. brr 180 22.09.21 09:03 Сейчас в теме
(10) Уровень изоляции транзакции.
14. METAL 238 22.09.21 13:03 Сейчас в теме
(12) И что означает уровень SERIALIZABLE ?
19. brr 180 22.09.21 16:55 Сейчас в теме
(14) SERIALIZABLE
Указывает следующее.

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

Другие транзакции не могут изменять данные, считываемые текущей транзакцией, до ее завершения.

Другие транзакции не могут вставлять новые строки со значениями ключа, которые входят в диапазон ключей, считываемых инструкциями текущей транзакции, до ее завершения.

Блокировка диапазона устанавливается в диапазоне значений ключа, соответствующих условиям поиска любой инструкции, выполненной во время транзакции. Обновление и вставка строк, удовлетворяющих инструкциям текущей транзакции, блокируется для других транзакций. Это гарантирует, что если какая-либо инструкция транзакции выполняется повторно, она будет считывать тот же самый набор строк. Блокировки диапазона сохраняются до завершения транзакции. Это самый строгий уровень изоляции, поскольку он блокирует целые диапазоны ключей и сохраняет блокировку до завершения транзакции. Из-за низкого параллелизма этот параметр рекомендуется использовать только при необходимости. Этот параметр действует так же, как и настройка HOLDLOCK всех таблиц во всех инструкциях SELECT в транзакции.

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15
kare; Dach; METAL; CSiER; +4 Ответить
20. пользователь 22.09.21 18:16
Сообщение было скрыто модератором.
...
22. METAL 238 22.09.21 19:51 Сейчас в теме
(19) Да, Вы абсолютно правы, для MSSQL это неверно, SERIALIZABLE вызывает блокировку всей таблицы только у СУБД "версионников": PostgreSQL и Oracle, подправил
kare; Merkalov; brr; +3 Ответить
7. zarankony 273 21.09.21 13:07 Сейчас в теме
Всегда думал что менеджер записи - это просто другая обертка для набора записей потому что он так же ловится событиями из модуля набора записей. А оказалось что нет. П.С. Эпилог прочитал голосом Юрия профессионала.
G_116547965820392844911; Jestery; METAL; d4rkmesa; +4 Ответить
13. mitia.mackarevich 28 22.09.21 09:51 Сейчас в теме
(7)
это просто другая обертка для набора записей потому что он так же ловится событиями из модуля набора записей. А оказалось что нет. П.С. Эпилог прочитал голосом Юрия профессионала.

откройте СП и вы увидете что это так и есть, это обертка
"При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи."
Вывод про менеджер очень странный, ясно ведь написано, что "Предназначен для интерактивной работы с записью регистра сведений. "
и вывод по эффективности субъективно - неверен.
47. gybson 27.09.21 19:49 Сейчас в теме
(13)записав пустой набор можно очистить весь регистр, а вод с менеджером записи такого казуса не выйдет. Набор это же коллекция записей + отбор
8. СергейК 51 21.09.21 14:29 Сейчас в теме
9. starik-2005 2397 21.09.21 15:16 Сейчас в теме
Отлично, когда опыты превращаются в статью. Автор научился и закрепил научение через выражение в методический материал. Такое образование самое качественное (как парное).
Merkalov; kare; nekit_rdx; Kovekh; Алексей_mir2mb; fancy; METAL; cleaner_it; +8 Ответить
11. t278 45 22.09.21 03:26 Сейчас в теме
Всем добра, любви и процветания
Спасибо за внимание
До свидания! (с)

Где-то я это слышал ))).
Спасибо за статью
METAL; Алексей_mir2mb; +2 Ответить
15. zabaluev 443 22.09.21 13:54 Сейчас в теме
Непонятно, зачем использовать регистр сведений для хранения логов. Есть же более простой и быстрый объект, "Справочник".
Запись в справочники менее трудоемкая операция. Индекс всего один, "Наименование".
30. Yashazz 4086 23.09.21 22:27 Сейчас в теме
(15) А при нулевой длине наименования?))
16. Tavalik 2612 22.09.21 14:09 Сейчас в теме
В целом, можно было догадаться о проблеме уже вглядываясь в код.
Но статья получилась очень хорошая, наглядная и легко читается. Спасибо.
Правда остался лишь слегка затронут переход с автоматических на управляемые блокировки. Раз и перешли, так просто? )
Dach; orfos; METAL; +3 Ответить
21. METAL 238 22.09.21 18:43 Сейчас в теме
(16) Спасибо за спасибо! )
По поводу перехода - повезло с конфигурацией, после беглого анализа мест для прописывания управляемых блокировок не нашёл, поэтому да, "раз - и перешли", за 2.5 месяца проблем не выявлено
31. Yashazz 4086 23.09.21 22:27 Сейчас в теме
(21)
"раз - и перешли", за 2.5 месяца проблем не выявлено
Везёт некоторым. Завидую белой завистью.
17. Fedos 22.09.21 15:37 Сейчас в теме
Спасибо, неплохая статья про анализ производительности и поиск проблемных мест.
Но, лучше всего она показывает, сколько времени можно потратить, криво спроектировав структуру данных.
Если уж решили использовать РС, то зачем ВремяЗапроса и ТипЗапроса пихать в измерения? Там же УИДа достаточно. И проблемы бы не возникло.
Vlad_2008; kare; zabaluev; orfos; +4 Ответить
18. m_aster 100 22.09.21 15:38 Сейчас в теме
Отлично, интересно, спасибо, и Вам добра!
Вспомнилась статья на ИТС из стандартов разработки о важности соответствия следования(порядка измерений) и их выборки в запросе.
Merkalov; muskul; +2 Ответить
34. logarifm 1100 24.09.21 10:56 Сейчас в теме
Проблема была ясна вначале но мне зашло, что автор разобрал разные вариации и сравнил все методы решения, а не выбрал какой-то один и все. Однозеачно автору +
35. Dach 317 24.09.21 13:12 Сейчас в теме
(0) за разбор проблемы однозначно плюс

Но выводы:

"Если не настроен регламентный достаточно частый пересчёт статистик, при надобности статистика пересчитается на лету, чем нагрузит базу данных в рабочее время, и незначительно будут замедлены запросы на построение не подходящих планов
Запись в независимый регистр сведений (набора из одной строки) оптимальней делать через менеджер записи, а не набором записей(с точки зрения производительности ниже риск непопадания в индекс + изящней в коде)"

не столь однозначны и не совсем верны.

1. Единственный на сегодня вариант пересчета статистик "на лету" для MS SQL - это включить их асинхронное автообновление + флаг трассировки 2371 (который управляет порогом "устаревания"). Данное действие может привести к своим собственным проблемам - ожиданиям на блокировках схемы. На одном из IS Event (2019 год) от компании SoftPoint был подробный доклад на эту тему.

2. Запись набором и менеджером с точки зрения СУБД ничем не отличается, набор удобнее тем, что можно самому в коде управлять отборами. Для записи одной конкретной строки - конечно, менеджер подходит лучше (просто меньше кода писать).

Судя по тому, что у вас 8.3.16.1148 и автоматический режим управления блокировками был изменен на управляемый - в базе в итоге стал режим изоляции RCSI. Несмотря на это, операторы DELETE и UPDATE в этом режиме по прежнему использует для защиты вычитываемых данных U-блокировку (см.: https://sqlperformance.com/2014/05/t-sql-queries/data-modifications-under-rcsi ), а не хранилище версий строк (как это делается при чтении внутри транзакции). Таким образом, если вдруг в процессе DELETE мы будем вычитывать весь какой-то индекс по какому-то измерению (даже если индекс есть, мы все равно можем его сканить из-за протухшей на нем статистики) - ну и из-за скана мы можем его заблокировать. И тут возможны не только ожидания на U-блокировке других сессий, но и дедлоки. Как раз такой недавно был пойман, вот его дедлок-репорт: https://pastebin.com/s0behUrt

В моем примере индекс по независимому непериодическому РС был, отбор при записи на него накладывался, но все равно произошел его скан, несмотря на весьма неплохую селективность по накладываемому отбору. Как выяснилось - из-за протухшей статистики. Протухала более быстрыми темпами она только в самые загруженные дни - в дни закрытия периода. Проблему решили ее более частым пересчетом в эти дни.

Так что одна из основных обязанностей админа СУБД - борьба за актуальные статистики.
Ну а забота программиста - стараться попадать в индексы при написании запросов.
Вот эти выводы, хоть и банальны, но всегда будут актуальны)))
54. METAL 238 28.09.21 18:42 Сейчас в теме
(35) Спасибо за такой развёрнутый комментарий и опыт!

Единственный на сегодня вариант пересчета статистик "на лету" для MS SQL - это включить их асинхронное автообновление + флаг трассировки 2371 (который управляет порогом "устаревания").

На нашей базе эти параметры по-умолчанию, см скрин, а именно
1. Автоматическое обновление статистики (AUTO_UPDATE_STATISTICS): ВКЛЮЧЕНО (Делать или нет?)
2. Асинхронное автоматическое обновление статистики (AUTO_UPDATE_STATISTICS_ASYNC): ВЫКЛЮЧЕНО (Как именно делать, синхронно или нет?)

Согласно http://www.gilev.ru/updatestat/ данные настройки означают, что статистика таки будет пересчитана автоматически ("на лету"), если она окажется устаревшей, и только после этого будет выполнен запрос, что я и наблюдал в трассировках 7 и 8. Если же включить ASYNC, то оптимизатор плана не будет дожидаться обновления статистики, "согласится" на неактуальную статистику и возможно неоптимальный план запроса, а параллельно (асинхронно) будет запущено обновление статистики (для будущих запросов).
Прикрепленные файлы:
58. Dach 317 29.09.21 17:26 Сейчас в теме
(54)

Все верно, статья на их сайте повторяет официальную документацию MS. Только вот и там и там скромно умалчивают о том, что "соглашается" с неоптимальной статистикой только текущий запрос, который и вызвал ее пересчет. Все остальные запросы ("будущие") - если они придут в тот момент, когда статистика перестраивается, - они все как раз НЕ соглашаются и встанют в очередь на блокировке схемы. Так что "асинхронность" - она только для запроса, проинициировавшего пересчет.

Я ловил такую ситуацию, есть и другие подтверждения. Если не верите - напишите в личку, скину ссылку на доклад от SoftPoint

Лично я рекомендую выключить оба флага. И спокойно обслуживать стату в регламентное окно.

Если же у вас высокая olp-нагрузка и стата устаревает очень быстро, то подумайте о внедрении адаптивного обновления статистик.
Dorosh; METAL; +2 Ответить
36. Cyberhawk 129 24.09.21 17:43 Сейчас в теме
Запись в независимый регистр сведений (набора из одной строки) оптимальней делать через менеджер записи, а не набором записей
Так и не понял, из какой части статьи был сделан (на чем основан) этот вывод...
38. METAL 238 25.09.21 12:17 Сейчас в теме
(36) Из того, что если бы изначально запись в регистр шла через менеджер - данной статьи бы не было :)
Vlad_2008; kare; +2 Ответить
39. Cyberhawk 129 25.09.21 12:45 Сейчас в теме
(38) Но ведь в начале статьи описывается запись через НЗ одной записи, но без отбора по одному из измерений. Это логически другая операция, нежели запись через МЗ.
Если в НЗ поставить все отборы (как это неявно происходит при записи через МЗ), то какие остаются у МЗ преимущества? Кажется, что кроме более краткого кода - никаких, а поэтому так и не ясно, и какой оптимальности МЗ перед НЗ шла речь...
52. METAL 238 28.09.21 18:04 Сейчас в теме
(39) Как показали трассировки, запись в регистр через МЗ и НЗ (с отбором на все измерения) - идентичны, и с этой точки зрения разницы нет.

Но по факту и на практике - менеджер (как Вы сами уже упомянули) неявно поставит все необходимые отборы, а через НЗ - надо об этом позаботиться самостоятельно, и как показывает практика (хотя бы данный кейс) - случается "пропущенный отбор", отчего в итоге просадка производительности, причём критическая. Поэтому вывод - при записи одной строки в независимый РС изящней в коде и надёжней с точки зрения шансов просадки производительности отдать на откуп платформе установку необходимых отборов через запись в РС посредством МЗ.

Иными словами, я хотел сказать, что при правильном коде - разницы нет. Но запись через менеджер снижает человеческий фактор и уменьшает риски не попасть в индекс из-за недоработки программиста.
Cyberhawk; +1 Ответить
40. shininvest 26.09.21 09:53 Сейчас в теме
А разве ни у кого не возник вопрос о структуре регистра сведений ?
Он ведь изначально спроектирован неверно.
В измерениях регистра должно остаться только УидЗапроса, а всё остальное точно там присутствовать не должно !
При правильной проектировке регистров сведений они прям отображаются на таблицы базы данных с нужными индексами.
И среднестатистический 1Сник не столкнется с такими проблемами в принципе.
kare; triviumfan; +2 Ответить
41. Cyberhawk 129 26.09.21 10:21 Сейчас в теме
(40)
В измерениях регистра должно остаться только УидЗапроса, а всё остальное точно там присутствовать не должно !
Почему?
42. shininvest 26.09.21 11:41 Сейчас в теме
(41) Да тут даже вопросов на эту тему быть не должно.
В измерениях необходимо писать КЛЮЧИ - именно то, что уникально идентифицирует запись.
По этим ключам в базе данных и будут созданы индексы
43. Cyberhawk 129 26.09.21 11:57 Сейчас в теме
(42)
В измерениях необходимо писать КЛЮЧИ - именно то, что уникально идентифицирует запись
Разве ключ "УИД + время + тип" не позволяет это делать?
44. shininvest 26.09.21 14:41 Сейчас в теме
(43) Очень забавно это читать. Почему же тогда автор не использует все эти свои измерения. У него проблема то от того и возникла, что он оперирует УИДомЗапроса, а этот прицеп - это просто реквизиты.
Читайте теорию баз данных начального уровня.
А иначе все что угодно можно приплести к ключам.

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

А если уже в качестве ключа использовать "УИД + время + тип" - да без проблем, используйте.
Но тогда и оперируйте этим ключем в полном составе, а не отдельными полями, удивляясь странностям со стороны сервера.

И вдогонку. Автору достаточно чуть чуть поправить своей регистр. А именно измерение УИДЗапроса сделать первым.
Даже такое неправильное проектирование регистра сервер простит. И все будет просто летать.
AneJIbcuH; kare; triviumfan; alexpvs; IgorS; +5 Ответить
49. kare 21 28.09.21 14:06 Сейчас в теме
(44)
Автору достаточно чуть чуть поправить своей регистр. А именно измерение УИДЗапроса сделать первым.
Даже такое неправильное проектирование регистра сервер простит. И все будет просто летать.

+++
50. METAL 238 28.09.21 14:37 Сейчас в теме
(44)
Автору достаточно чуть чуть поправить своей регистр. А именно измерение УИДЗапроса сделать первым.

1. Автору статьи или автору кода?
2. Если бы Вы внимательно читали статью, Вы бы заметили данное решение среди прочих вариантов
48. buganov 183 28.09.21 08:38 Сейчас в теме
(43) я соглашусь с (42), что в измерениях достаточно УИД, если он уникален
51. METAL 238 28.09.21 14:43 Сейчас в теме
(48) А он уникален? Есть гарантия, что за 100 миллионов выполнений
Новый УникальныйИдентификатор

результат ни разу не повторится?
56. buganov 183 28.09.21 20:13 Сейчас в теме
(51) в рамках одной базы не повторится
53. METAL 238 28.09.21 18:12 Сейчас в теме
(40) Вы, безусловно, правы, что правильная структура данных - залог здоровья, но целью данной статьи была другая тема, а именно - поделиться решением оптимизационной задачи (то есть нам УЖЕ достался регистр в каком-то виде и состоянии, и не всегда мы можем кардинально менять его структуру), попутно разобрать запись в регистр сведений со всех сторон и рассмотреть разные варианты.
Оставьте свое сообщение

См. также

Многопоточная обработка данных Промо

Производительность и оптимизация (HighLoad) Администрирование данных 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

Конфигурация "Универсальные механизмы: пакеты данных". Набор инструментов для быстрой организации отказоустойчивой многопоточной обработки данных.

1 стартмани

23.11.2018    29838    109    _ASZ_    17    

Сравнение замеров производительности

Производительность и оптимизация (HighLoad) v8 1cv8.cf Абонемент ($m)

Бывают ситуации, когда необходимо быстро определить, в чем разница при выполнении, например, проведения документа. Я обычно для решения данной задачи использовал два замера и сравнивал в коде. Это помогало при небольшом количестве строк кода, но, когда их тысячи, или сотни тысяч, проще воспользоваться обработкой, которая позволяет находить различия в замерах производительности.

2 стартмани

06.09.2021    683    1    17808849    4    

Где баланс между производительностью и возможностями программы ? Исправление автоподбора контрагента в УНФ

Рефакторинг и качество кода Производительность и оптимизация (HighLoad) Адаптация типовых решений v8 УНФ Россия УУ Абонемент ($m)

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

1 стартмани

27.08.2021    923    0    con-men    0    

Просмотр файлов технологических журналов 1С (WinAPI)

Производительность и оптимизация (HighLoad) Технологический журнал v8 Россия Абонемент ($m)

Программа просмотра файлов технологических журналов 1С (WinAPI). Работает с большими файлами. Минимальное потребление памяти при индексировании данных, просмотре. Анализ управляемых взаимоблокировок, таймаутов, ожиданий. Фильтры по событиям, периоду, пользователям, соединениям, сеансам.

1 стартмани

24.08.2021    1406    8    sdf1979    2    

Автоматизация анализа файлов технологического журнала Промо

Технологический журнал v8 Россия Абонемент ($m)

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

1 стартмани

14.02.2012    34214    77    Aleksey.Bochkov    18    

Как 1С всю оперативную память съел...

Производительность и оптимизация (HighLoad) Практика программирования Расчетные механизмы v8 ЗУП3.x Россия Абонемент ($m)

В данной статье рассматривается обход (средствами встроенного языка) ошибки: "Превышен максимальный расход памяти сервера за один вызов" при рассылке расчетных листков в ЗУП 3.1 250+ сотрудникам.

1 стартмани

17.06.2021    2730    3    iD1n    0    

Powershell: Анализ технологического журнала. Топ-25 вызовов.

Технологический журнал v8 Абонемент ($m)

Использование Powershell для анализа технологического журнала 1с. Пример получения топ-25 вызовов

1 стартмани

16.06.2021    4014    1    Dimashiro    15    

Однопальцевое преобразование "одинэсного" запроса в запрос на SQL

Производительность и оптимизация (HighLoad) Прочие инструменты разработчика v8 v8::Запросы 1cv8.cf Абонемент ($m)

Обработка предназначена для преобразования "одинэсных" запросов в запросы на SQL средствами встроенного языка. Разработка не претендует на то, чтобы на 100% повторить то, что разработчики видят при трассировке запросов в инструментах вроде Profiler. Но во многих случаях результат преобразования можно будет без дополнительной ручной обработки выполнить, например, в Managment studio. Актуальные ограничения и проблемы преобразователя описаны в статье. Работает с версией платформы не ниже 8.3.10.

2 стартмани

17.04.2021    3238    8    kser87    12    

Версионирование объектов. Сжатие регистра "ВерсииОбъектов" Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Абонемент ($m)

Cжимаем версии объектов в регистре сведений "ВерсииОбъектов". Экономия занимаемого версиями объектов объема более 50% !!!

1 стартмани

30.12.2014    30060    43    ZLENKO    14    

Оперативный мониторинг управляемых блокировок и серверных вызовов кластера 1С (windows сервис BETA расширения функционала конфигурации "Центр Контроля Качества")

Технологический журнал ЦКК v8 v8::blocking Абонемент ($m)

Windows сервис расширения функционала счетчиков производительности конфигурации "Центр Контроля Качества". Собирает и агрегирует информацию из технологического журнала об управляемых блокировках (TLOCK, TDEADLOCK, TTIMEOUT), а так же серверных вызовов (CALL в разрезе p:processName для процессов rphost и в разрезе IName для процессов ragent и rmngr). Агрегированная информация каждую минуту отправляется по http в конфигурацию ЦКК и там представлена в виде счетчиков производительности.

1 стартмани

29.03.2021    2091    1    sdf1979    0    

ЦУП 2.1.6 Исправленная обработка выгрузки метаданных для платформы 8.2

Структура метаданных ЦУП v8 1cv8.cf Абонемент ($m)

Обработка предназначена для ЦУП 2.1.6. Исправленная типовая обработка для выгрузки метаданных для конфигурацию, работающих на платформе 8.2 (в т.ч. в режиме совместимости).

1 стартмани

04.03.2021    1550    0    SpecRam    0    

Парсер технологического журнала (golang + redis + elasticsearch)

Технологический журнал v8 1cv8.cf Абонемент ($m)

На просторах интернета, в том числе на данном ресурсе содержится разнообразное количество инструментов, позволяющих читать, трансформировать логи технологического журнала. Инструмент, который я описываю в данной статье, - является альтернативным вариантом, реализованным на стеке технологий Goroutines (golang) + Redis + Elasticsearch.

1 стартмани

07.01.2021    6642    3    Shmell    14    

Многопоточное тестирование производительности сервера 1С - СУБД Промо

Сервисные утилиты Статистика базы данных Производительность и оптимизация (HighLoad) v8 1cv8.cf Абонемент ($m)

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

1 стартмани

12.02.2013    93966    730    Fragster    186    

Параллельные вычисления для http-сервиса

Практика программирования Производительность и оптимизация (HighLoad) v8 Абонемент ($m)

Процесс, поток, нить - в различных операционных системах и языках программирования это наименьшая единица программы. В платформе существует аналог: фоновое задание. Посмотрим, как его можно использовать для распараллеливания вычислений http-сервиса.

1 стартмани

19.11.2020    4177    4    Lars Ulrich    11    

Мастер создания копии информационной базы для отчетности

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 1cv8.cf Абонемент ($m)

Прототип инструмента для подготовки реплики в режиме только для чтения к использованию. Позволяет использовать "read-only" реплики как обычные информационные базы 1С.

10 стартмани

28.08.2020    9045    5    YPermitin    12    

Оптимизация пакетной печати из 1С в MS Word

Пакетная печать Производительность и оптимизация (HighLoad) MS Office БСП (Библиотека стандартных подсистем) v8 ЗУП3.x Абонемент ($m)

Опыт оптимизации пакетной печати из 1С ЗУП 3.1 в MS Word. Об осторожности использования БСП. Внешние обработки: до и после оптимизации.

1 стартмани

14.08.2020    5043    1    info1i    5    

Многопоточный МикроСервер для файловой базы управляемого приложения 1c Промо

Сервисные утилиты Производительность и оптимизация (HighLoad) v8 1cv8.cf Абонемент ($m)

МикроСервер УПФ - это промежуточный сервер, который принимает запросы от тонких клиентов и веб-клиентов управляемого приложения 1с и распределяет их между автоматически созданными процессами веб-сервера. Решение позволяет решить проблему однопоточности файловой компоненты модуля веб-сервера 1с и повысить скорость многопользовательской работы.

1 стартмани

19.12.2013    42263    86    Chai Nic    56    

Простая параллельная обработка данных

Производительность и оптимизация (HighLoad) Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Предлагаю способ быстрой параллельной обработки "неких" данных. Методика проста как дважды два. Предварительно подготовленная обработка запускается вручную в нескольких сеансах, и каждый сеанс занимается обработкой своей части (случайного диапазона). Может пригодиться для ускоренной обработки данных. К примеру, необходимо заполнить реквизит большого справочника, заполнение в один поток идёт долго, а сроки поджимают.

1 стартмани

10.02.2020    6748    1    Amadeus007    8    

Длина ключа индекса превышает максимально допустимую. Решение с использованием технологического журнала

Тестирование и исправление Технологический журнал v8 1cv8.cf Россия Абонемент ($m)

При разработке конфигурации в клиент-серверном варианте могут возникнуть проблемы при загрузке конфигурации в файловый вариант. В статье описан один из вариантов решения проблемы.

1 стартмани

28.01.2020    6343    3    newtraveller    0    

Транслятор запросов 1С в SQL

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 v8::Запросы 1cv8.cf Абонемент ($m)

Инструмент для трансляции запросов платформы 1С в SQL, а также их диагностики.

10 стартмани

07.01.2020    26954    208    YPermitin    89    

Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3 Промо

Производительность и оптимизация (HighLoad) Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Каждый программист 1С хотя бы раз задумывался над тем, как уменьшить в разы трудозатраты на обновления переписанных конфигураций. Как не забыть добавить некий код, команду, кнопку в форму типовой конфигурации, изменить стандартный обработчик события формы – этот список можно продолжать до бесконечности. В этой статье изложен метод для управляемых форм, который позволяет реализовать эту возможность.

1 стартмани

10.02.2013    58434    115    pbazeliuk    40    

Работа с базами данных 1С в SQL Server Management Studio (Расширение для SSMS)

Администрирование СУБД Производительность и оптимизация (HighLoad) Администрирование данных 1С Структура метаданных v8 Абонемент ($m)

Расширение позволяет просматривать связи объектов метаданных и таблиц БД, сгруппированные данные (по группам метаданных) об используемом дисковом пространстве и выполнять трансляцию SQL текста запроса в термины 1С. И бонусом - при наведении курсора мыши на таблицу или поле показывает назначение объекта в терминах 1С.

10 стартмани

27.11.2019    16653    45    akpaevj    46    

Мониторинг количества использованных программных лицензий, выданных выделенным сервером лицензирования

Zabbix v8 Абонемент ($m)

Следим за утилизацией программных клиентских лицензий на выделенном сервере лицензирования в разрезе кластеров 1С Предприятия, в состав которых включен данный сервер лицензирования

1 стартмани

22.11.2019    8695    8    Sloth    4    

Быстрая реструктуризация базы данных

Производительность и оптимизация (HighLoad) Конфигурирование 1С v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Внешняя обработка для быстрой реструктуризации клиент-серверной базы данных. Способ ускорения реструктуризации - замена таблиц большого объема пустыми копиями перед проведением обновления БД и возврат к исходным таблицам после обновления с предварительной корректировкой их структуры. Полностью автоматизировано создание и выполнение всех требуемых скриптов SQL. Представлены версии обработки для обычных форм (1С:Предприятие 8.2 (8.2.19.130)) и управляемого приложения (1С:Предприятие 8.3 (8.3.9.1818)).

1 стартмани

05.11.2019    22347    101    dmitrydemenew    39    

И снова о скорости работы 1с 8.х + тест от Гилева (конфигурация TPС_1C_GILV_A) + как Выбрать сервер для 1С 8.х Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Абонемент ($m)

Предыстория: Есть в конторе, где я работаю, пара практически ОДИНАКОВЫХ по железу сервера... так вот заметили что на одном из них 1С 8.2 работает значительно быстрей что в Клиент-Серверном, что в файловом варианте... и что именно удивило так это что медленней работал сервер с большим количеством Оперативной памяти + RAID10 на SSD. Проводили много тестов на работу дисковой системы + различные тесты SQL - ВЫВОД: ничего непонятно где тормоза. И вот попала ко мне конфигурация 1С для оценки производительности 1С от Гилева http://infostart.ru/public/57204/ Подробности в Описании...

2 стартмани

13.08.2012    613622    649    sanfoto    2561    

Влияние БСП на производительность базы 1С с добавленными метаданными

Производительность и оптимизация (HighLoad) Адаптация типовых решений БСП (Библиотека стандартных подсистем) v8 УТ11 Абонемент ($m)

Повод для статьи — заметное снижение быстродействия при переводе учета с УТ 11.1 на 11.4 по «нашим» не стандартным метаданным (регламенты работы с массовым заполнением/проведением документов/регистров). Предварительно причину увидел во влиянии БСП. Была создана тестовая подсистема, быстродействие которой оцениваем в демобазе "Управление торговлей". С включенными и выключенными подписками БСП.

5 стартмани

04.11.2019    9461    3    VsHome    1    

Оптимизация прав ролей

Производительность и оптимизация (HighLoad) Роли и права v8::УФ v8::Права 1cv8.cf Россия Абонемент ($m)

Решение вопроса по неоптимальной настройке (избыточной) ролей, влияющей на производительность системы (потребление оперативной памяти). Алгоритм работы следующий: Выгрузка конфигурации в файлы - Обработка (изменение) файлов прав ролей - Загрузка измененных прав в конфигурацию. Проверено на платформе начиная с 8.3.12.

1 стартмани

09.09.2019    34515    10    toxilamer    11    

Мониторинг количества использованных клиентских лицензий, выданных сервером 1С Предприятия, работающим на платформе GNU/Linux

Zabbix v8 Абонемент ($m)

Еще один вариант реализации слежения за программными лицензиями посредством Zabbix. Отображает: количество доступных программных лицензий сервера; общее количество сеансов кластера в который включен данный сервер; количество уникальных пользователей среди общего количества сеансов; количество использованных программных лицензий, выданных сервером.

1 стартмани

27.08.2019    13563    1    Sloth    14    

Чтение логов технологического журнала Промо

Технологический журнал v8 Россия Абонемент ($m)

Обработка позволяет читать логи технологического журнала и формировать на основании данных отчет.

1 стартмани

24.04.2009    42542    2137    Широкий    127    

Количество баз 1С как счетчик в Zabbix

Статистика базы данных Zabbix v8 1cv8.cf Абонемент ($m)

Делаем счётчик баз 1С в Zabbix.

1 стартмани

26.08.2019    9221    0    MrWonder    8    

Бухгалтерия 3.0: медленная работа при загрузке данных контрагента по ИНН

Производительность и оптимизация (HighLoad) v8 v8::БУ БП3.0 Россия Абонемент ($m)

Поиск и исправление медленной загрузки контрагентов по ИНН в Бухгалтерия 3.0.71.75.

1 стартмани

10.07.2019    7028    3    MaxxiMiliSan    4    

Исправление долгого запуска БП 3.0.70 по причине большого количества платежек

Производительность и оптимизация (HighLoad) v8 v8::БУ БП3.0 Россия Абонемент ($m)

Обработка исправления долгого запуска БП 3.0.70 по причине большого количества платежек.

1 стартмани

18.04.2019    7350    8    a_v_u    1    

Автоформатирование кода Промо

Сервисные утилиты Обработки Чистка базы Справки Производительность и оптимизация (HighLoad) Инструментарий разработчика Практика программирования Универсальные обработки Решение задач на 1С:Специалист Математика и алгоритмы Администрирование данных 1С Разработка Тестирование и исправление Стартеры 1С v8 1cv8.cf Абонемент ($m)

Как часто приходится работать в режиме аврала, когда на оформление кода не хватает времени? И как лениво порой бывает, возвращаться к уже рабочему коду, что бы отформатировать его и привести в порядок. Данная обработка позволяет автоматически форматировать текст кода, в соответствии с настройками пользователя. Это позволит привести ваш код, как уже написанный так и будущий к единому оформлению.

1 стартмани

19.12.2012    44964    182    Sibars    57    

Взаимодействие при редактировании одних и тех же данных [Расширение] УТ11

Производительность и оптимизация (HighLoad) v8 УТ11 Россия Абонемент ($m)

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

2 стартмани

14.04.2019    8025    4    noprogrammer    1    

Методика оптимизации программного кода 1С: проведение документов

Обработка документов Производительность и оптимизация (HighLoad) Инструментарий разработчика v8 v8::УФ Абонемент ($m)

Описание простого метода анализа производительности программного кода 1С, способов его оптимизации и оценки результатов в виде числовых показателей прироста производительности. Не требует сторонних программных продуктов, используются только типовые возможности платформ 1С. Методика проверена на линейке платформ начиная с 1С:Предприятие 8.2 (обычные формы, управляемые формы). Позволяет ускорить проведение проблемных документов в 3 и более раз, провести проверку корректности формирования проводок оптимизированным кодом и подтвердить результаты оптимизации реальными замерами производительности в режиме предприятия. К публикации приложены демонстрационные базы для режимов обычного и управляемого приложения на платформе 1С:Предприятие 8.3 (8.3.9.2033).

1 стартмани

19.03.2019    31348    21    dmitrydemenew    85    

Исправление ЦУП 2.1.2

Производительность и оптимизация (HighLoad) ЦУП v8 1cv8.cf Абонемент ($m)

Расширение для конфигурации Центр управления производительностью, редакция 2.1 (2.1.2.11), которое позволяет настроить регламентный мониторинг. Работает на платформе 1С:Предприятие 8.3 (8.3.13.1644).

2 стартмани

21.01.2019    7733    6    Neco    0    

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

Производительность и оптимизация (HighLoad) APDEX v8 1cv8.cf Абонемент ($m)

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

10 стартмани

09.01.2019    11848    20    capitan    29    

Решение проблемы быстродействия в ERP на рабочем примере

Производительность и оптимизация (HighLoad) v8 ERP2 Абонемент ($m)

Рассмотрим практический пример оптимизации, определим последовательность действий и воспользуемся специализированными инструментами.

3 стартмани

18.12.2018    24764    180    ivanov660    24    

Мониторинг показателей систем 1С 8.3 с помощью Zabbix

Внешние источники данных Zabbix v8 1cv8.cf Абонемент ($m)

Опишу свой опыт мониторинга наших систем 1С с помощью Zabbix и ту пользу, которую можно извлечь из этого.

1 стартмани

05.10.2018    55749    70    akimych    49    

Очистка и обновление индекса полнотекстового поиска (регламентное задание)

Производительность и оптимизация (HighLoad) v8 УНФ ДО БП3.0 УТ11 УХ ЗУП3.x Россия Абонемент ($m)

Обработка-регламентное задание позволяет в автоматическом режиме очищать и обновлять индекс полнотекстового поиска. Это необходимо делать для устранения проблем производительности на крупных базах. Подключаем в доп.обработках, задаем расписание выполнения на выходные и радуемся :)

2 стартмани

14.09.2018    29309    85    Kyrales    8    

Монитор блокировок пользователей

Производительность и оптимизация (HighLoad) v8 v8::blocking 1cv8.cf Россия Абонемент ($m)

Анализ и автоматическое удаление блокировок

1 стартмани

17.08.2018    9378    21    Re:аниматор    7    

Ускорение отчета 'Контроль передвижений агентов (онлайн-карты)' от AgentPlus v1.5.2

Производительность и оптимизация (HighLoad) Рабочее место v8 1cv8.cf Украина Абонемент ($m)

У пользователей системы AgentPlus (Агент Плюс) отчет 'Контроль передвижений агентов (онлайн-карты)' v1.5.2 вызывает восторг и разочарование одновременно. Восторг – потому, что позволяет увидеть маршрут передвижения пользователя системы с привязкой к карте и дорогам, разочарование – от длительности построения отчета. Отчет по 45 точкам маршрута у меня строится больше минуты. Тестировалось на "Управление торговым Предприятием" 1.2.45.2.

1 стартмани

03.05.2018    8311    3    DiegoLidabo    0    

V8 Log Scanner - утилита для быстрого парсинга логов ТЖ

Сервисные утилиты Технологический журнал v8 Россия Абонемент ($m)

Как можно быстро настраивать logcfg.xml и парсить логи технологического журнала с помощью самописной open-source утилиты V8LogScanner. Без необходимости погружаться в регулярные выражения.

1 стартмани

07.11.2017    24456    5    ripreal1    27    

Обработки  для проведения сценарного нагрузочного тестирования на примере конфигурации ЗУП версии 3.1.1.91

Нагрузочное тестирование v8 1cv8.cf Украина Абонемент ($m)

Обработки предназначены  для проведения сценарного нагрузочного тестирования, включая  пример описанного  сценария  с обработками (epf) -  ГлавныйРасчетчик, Кадровик, Расчетчик, Табельщик. Обработка будет полезна прежде всего тому, кто внедряет решение на базе конфигурации 1С "Зарплата и Управления персоналом" с необходимостью воспроизвести определенный сценарий с заданным количеством пользователей для расчета, а также возможность посмотреть, какая будет при этом нагрузка на ваше оборудование и скорость выполнения операций с учетом блокировок СУБД. Также это будет интересно тем, кто хочет прощупать, как на практике пользоваться конфигурацией "Тест Центр", входящий в состав пакета 1С:КИП.

2 стартмани

15.09.2017    11642    27    podorojnii_ayu    1    

Графический план выполнения запроса 1С

Производительность и оптимизация (HighLoad) Инструментарий разработчика Универсальные обработки v8 1cv8.cf Абонемент ($m)

Просмотр графического отображения плана выполнения для запросов 1С. Для информационных баз на MS SQL Server.

1 стартмани

24.06.2017    18756    62    berezdetsky    28    

Перерасчет итогов регистра бухгалтерии в 1С

Производительность и оптимизация (HighLoad) v8::БУ БП1.6 Россия БУ Абонемент ($m)

Вариант перерасчета итогов частями (помесячно), если при типовом пересчете 1С зависает.

1 стартмани

30.05.2017    18363    30    MarcoPolo3    7    

Просмотр заблокированных строк в 1С

Производительность и оптимизация (HighLoad) v8 1cv8.cf Абонемент ($m)

Ввиду своей деятельности, мне часто приходится рассказывать про различные аспекты оптимизации и в том числе про блокировки. Очень часто слушатели задают следующие вопросы: Как посмотреть в реальном времени, какие именно данные сейчас заблокированы? Как понять, что сейчас заблокировано в терминах 1С? Если гранулярность блокировки страница, как увидеть, какие данные в ней находятся? Раньше приходилось отвечать, что инструмента, который показывает все вышеописанное, сейчас просто нет. Но потом мне это надоело, и я решил сделать собственный инструмент, который позволяет ответить на все вышеописанные вопросы.

1 стартмани

25.10.2016    46878    840    Andreynikus    68