17 июля 2025
1C-RarusTechDay 2025
8-я открытая техническая конференция для специалистов 1С
Зарегистрироваться
1C-RarusTechDay 2025 — 8‑я открытая техническая конференция для специалистов 1С

Медленная работа спр. Номенклатура и Ошибка в логах БД

Декоративное изображение

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

Интересующийся
RSS
Добрый день!
т.к. юзаю АА то обращаюсь в эту ветку.
с утра БД при открытии номеклатуры начала капитально тормозить - несколько минут.
1) в Логах на сервере (Ubuntu 10.04+ postgresql) - на сегодня было больше 20ГБ, файл разрастается прямо на глазах и процесс postmaster (postgresql) грузит проц на 100% постоянно.


2) на самом компьютере иногда вылазит


3) пробовал комментировать в настройках Postgresql escape_string_warning = off, на клиенте начало вылазить


пробовал загружать копии БД "несколькодневней" давности - работает вроде нормально, но логи также пестрят сообщениями из п.1
при загрузке dt файла в локальную версию - проблем не замечено. Но последние 2 дня - ни в какую. ВСе восстановления БД перепробовал как из 1с так и из самой Postgresl/

Подскажите, кто сталкивался хоть с чем-то подобным - как его побороть?

З.Ы. 1) Почему-то проблемы именно со справочником Номенклатуры
2)Работа стоит, работает тока 1 машина, скоро меня повесят...

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

Сотрудник 1С-Рарус
1. Сделайте тестирование и исправление ИБ с галками реструктуризации и упаковки таблиц.
2. В отладке при открытии Номенклатуры сделать замер производительности для нахождения медленной операции.
3. Можно воспользоваться технологическим журналом
Несколько статей по использованию технологического журнала
1
2

В прикреплении обработка по настройке технологического журнала.

Прикрепленные файлы

Ответить

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

Интересующийся
Большое спасибо за содействие, а то вчера совсем грустно было  :cry:
Сначала , что есть на сегодня:
проблемы в логах PostgreSQL решаются установкой в postgresql.conf  escape_string_warning = off и перезапуском сервера.

Симптомы торможения лечатся так:
Взял бекап на 31.01 - работает нормально, загрузил на сервак
Взял последнюю БД на вчера(2.02) выгрузил все документы через обработку "ВыгрузкаЗагрузкаДанныхXML81.epf", а потом загрузил этой же обработкой в работающую БД от 31.01... Вроде работает. По-крайней мере уже не повесят...  :D
----------------------------------------------------------------------------------------------------------------------
Однако, проблема есть и непонятно почему. Если попробовать выгрузить в dt, загрузить на локальную машину, выгрузить с локалки и загрузить на сервак - опять та же проблема с тормозом номенклатуры... На локалке никаких проблем...
Хочу разобраться почему, чтобы такого не было в каком-то другом месте - т.к. проблема возникла на ровном месте - в БД ничего особенного не менял в эти дни. Вечером сделал восстановление, а утром уже БД в ауте...

1. Тестирование и исправление со всеми галками - не помогает. Также не помогает все доступные средства починки СУБД из 1С и самой СУБД. Также пробовал загрузиться с зеркальной копии диска на момент запуска конфигурации, после загрузки последней БД - такие же проблемы.
2. Да, сделал. тормозит в этом куске кода (СписокПриПолученииДанных), а именно на последнем операторе "Запрос.Выполнить().Выбрать();"
Код
Запрос = Новый Запрос("ВЫБРАТЬ
   |   ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
   |   ЦеныСрезПоследних.ТипЦен.Ссылка,
   |   ЦеныСрезПоследних.Номенклатура.ТипНоменклатуры КАК ТипНом,
   |   ЕСТЬNULL(ЦеныСрезПоследних.Цена + ЦеныСрезПоследних.Цена / 100 * 0, 0) КАК Цена,
   |   ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры,
   |   ТипыЦенПроцентыСкидкиНаценки.ПроцентСкидкиНаценки,
   |   ЕСТЬNULL(ЦеныСрезПоследних.Цена + ЦеныСрезПоследних.Цена / 100 * ТипыЦенПроцентыСкидкиНаценки.ПроцентСкидкиНаценки, 0) КАК СкидочнаяЦена,
   |   ТипыЦенПроцентыСкидкиНаценки.Ссылка.Наименование
   |ИЗ
   |   РегистрСведений.Цены.СрезПоследних(
   |         ,
   |         ТипЦен = &ТипЦен
   |            И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
   |            И ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)) КАК ЦеныСрезПоследних
   |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТипыЦен.ПроцентыСкидкиНаценки КАК ТипыЦенПроцентыСкидкиНаценки
   |      ПО ЦеныСрезПоследних.Номенклатура.ТипНоменклатуры = ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры
   |ГДЕ
   |   ЦеныСрезПоследних.Номенклатура В (&МассивТоваров)
   |   И ТипыЦенПроцентыСкидкиНаценки.Ссылка.Наименование = &Наименование");
   МассивНоменклатуры = Новый Массив;   // для передачи в параметр запроса
   Соответствие = Новый Соответствие;   // для заполнения цен в строках табличного поля
   Для Каждого Строка из ОформленияСтрок Цикл
      МассивНоменклатуры.Добавить(Строка.ДанныеСтроки.Ссылка);
      Соответствие.Вставить(Строка.ДанныеСтроки.Ссылка, Строка);
   КонецЦикла;
   Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦен.НайтиПоНаименованию("Розница"));
   Запрос.УстановитьПараметр("Наименование", "Поощрительная");
   Запрос.УстановитьПараметр("МассивТоваров", МассивНоменклатуры);
   Выборка = Запрос.Выполнить().Выбрать();

Код не оптимальный и не из стандартной поставки - обсуждался в другой теме - Вывод колонок с ценами в списке номенклатуры.
При этом, в ПН код работает без тормозов, а ВТ уже с тормозами(только на сервере)... Почему?
Протрейсить запрос как-то можно? (СУБД PostgreSQL)

3. До технологического журнала вчера дошел, но ещё не знал как его использовать, читаю.

P.S. прошу не забрасывать тему, а все-таки выяснить причину, т.к. снял тока симптомы... Очень напрягает отсутствие явной ошибки...
Ответить

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

Интересующийся
Новые подробности:
Кажись нашёл из-за чего все началось.

Сегодня был запущен конфигуратор и предприятие, подключенные к тестовой серверной БД.
Игрался с сетевыми подключениями(пытался в винде сделать мост виртуальной сетевушки и реальной) - оборвалась сеть. Понятное дело соединение с серваком оборвалось.
Попробовал сразу переподключиться конфигуратором - говорит, уже есть подключение...
Попробовал загрузить предприятие и открыть Номеклатуру - опа! - появился тормоз! :-)

Осталось выяснить:
1) почему начинает тормозить выборка
2) как это лечить.


P.S. Кстати, загрузка нормального cf-файла с работающей конфой несколькими днями раньше в текущую БД с глюком - результата не дает. Т.е. получается, что глюк возникает в структуре БД, причем такой, что доступными средствами не находится и не исправляется... :cry:
Ответить

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

Сотрудник 1С-Рарус
Пока только могу помочь советом по оптимизации запроса. Конечно, от запроса лучше избавиться, например, через хранение в кеше цен. В событии СписокПриПолученииДанных() выполнять каждый раз запрос очень не приветствуется.
Этот запрос немного по оптимальней и еще можно избавиться от лишних полей, без которых можно обойтись. Например поля "Наименование" и ЦеныСрезПоследних.ТипЦен можно использовать сразу при обходе результата запроса, а не помещать в запрос; от ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры можно отказаться в запросе есть заменитель.

Запрос = Новый Запрос("ВЫБРАТЬ
  | ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
  | ЦеныСрезПоследних.ТипЦен,
  | ЦеныСрезПоследних.Номенклатура.ТипНоменклатуры КАК ТипНом,
  | ЦеныСрезПоследних.Цена КАК Цена,
  | ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры,
  | ТипыЦенПроцентыСкидкиНаценки.ПроцентСкидкиНаценки,
  | ЦеныСрезПоследних.Цена + ЦеныСрезПоследних.Цена * ЕСТЬNULL(ТипыЦенПроцентыСкидкиНаценки.ПроцентСкидкиНаценки/100, 1) КАК СкидочнаяЦена,
  | &ПоощрительнаяНаименование КАК Наименование
  |ИЗ
  | РегистрСведений.Цены.СрезПоследних(
  | ,
  | ТипЦен = &ТипЦен И
  | ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) И
  | ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка) И
  | Номенклатура В (&МассивТоваров)) КАК ЦеныСрезПоследних
  |ЛЕВОЕ СОЕДИНЕНИЕ
  | Справочник.ТипыЦен.ПроцентыСкидкиНаценки КАК ТипыЦенПроцентыСкидкиНаценки
  |ПО
  | ТипыЦенПроцентыСкидкиНаценки.Ссылка = &Поощрительная И
  | ЦеныСрезПоследних.Номенклатура.ТипНоменклатуры = ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры
  |");
  МассивНоменклатуры = Новый Массив;   // для передачи в параметр запроса
  Соответствие = Новый Соответствие;   // для заполнения цен в строках табличного поля
  Для Каждого Строка из ОформленияСтрок Цикл
     МассивНоменклатуры.Добавить(Строка.ДанныеСтроки.Ссылка);
     Соответствие.Вставить(Строка.ДанныеСтроки.Ссылка, Строка);
 КонецЦикла;
  Поощрительная = Справочники.ТипыЦен.НайтиПоНаименованию("Поощрительная");
  Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦен.НайтиПоНаименованию("Розница"));
  Запрос.УстановитьПараметр("Поощрительная", Поощрительная);
  Запрос.УстановитьПараметр("ПоощрительнаяНаименование", Поощрительная.Наименование);
  Запрос.УстановитьПараметр("МассивТоваров", МассивНоменклатуры);
  Выборка = Запрос.Выполнить().Выбрать();
Ответить

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

Интересующийся
Виктор Радько,
Приймите, пожалуйста, мое полное признание Вас как специалиста 1С!!! (хотя я 1с и не люблю :-))
Таки заработало с данным запросом без тормозов!!!
Огромное спасибо!

А относительно кеша что имелось ввиду? Создать массив и в него запихивать цены, а потом по номенклатуре искать в нем?

P.S. 1) А не подскажите, пожалуйста, может где-то можно почитать про оптимизацию запросов и как правильно с точки зрения 1С их составлять?
2) все-таки не могу понять, почему 2 месяца работало без тормозов, а тут начались тормоза причем не в разы, а в десятки раз...?
Ответить

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

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

Грубое описание здесь

По написанию оптимальных запросов можно почитать статьи в ИТС. Неплохие статьи
Типичные причины неоптимальной работы запросов и методы оптимизации
Типичные причины неоптимальной работы запросов и методы оптимизации
Цитата
Александр Тугаенко пишет:
все-таки не могу понять, почему 2 месяца работало без тормозов, а тут начались тормоза причем не в разы, а в десятки раз...?
Из-за определнных условий оптимизатор запроса Postgre начал формировать неоптимальный план запроса. Один из вариантов как побороть обновить статистики.

Статьи:
Настройка конфигурационных файлов PostgreSQL для работы с 1С Предприятие 8.1
PostgreSQL для 1С:Предприятие 8.1
Ответить

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

Интересующийся
Виктор Радько,
Спасибо ещё раз!
Потопал учить матчасть  :D.
Ответить

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

Интересующийся
Добрый день!
Подниму тему, т.к. опять что-то похожее вылезло
----------------------------------------------------------------------------
Предистория:
при переносе БД на новый сервер опять возникла похожая проблема, но в другом ракурсе.
Логи БД пестрят надписями из первого сообщения и разрастаются.
Номенклатура, спасибо Виктору, не тормозит  :D
Для прекращения замусоривания логов postgres достаточно добавить в postgresql.conf строчку "escape_string_warning=off"
:idea:  строку "standard_conforming_strings=on", как пишут в некоторых источниках, добавлять не нужно - вызывает ошибки при запуске и работе конфигурации...
----------------------------------------------------------------------------
:!:  Сама проблема: попытка из заказа покупателя вызвать отчет "Состояние заказа покупателя" - вызывает подвисание системы, а именно БД загружает CPU на 100%, клиентская часть не отвечает ни на какие действия и так может висеть 15-20минут... потом БД прекращает грузить процессор, но клиентская часть не "отмерзает"...
Прогнал в дебаге - дошел до отОтчеты:Модуль зфСформироватьТабличныйДокумент - уходит в эту процедуру и тишина... - процедура закрытая, так что посмотреть, что там происходит нет возможности  :cry:

Если вызывать данный отчет отдельно и подставлять тот же самый заказ - все отрабатывает без проблем.

:?: Подскажите, пожалуйста, в чем может быть проблема?

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

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

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

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

Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С