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

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

Страницы: 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. Сделайте тестирование и исправление ИБ с галками реструктуризации и упаковки таблиц.
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:
 
Пока только могу помочь советом по оптимизации запроса. Конечно, от запроса лучше избавиться, например, через хранение в кеше цен. В событии СписокПриПолученииДанных() выполнять каждый раз запрос очень не приветствуется.
Этот запрос немного по оптимальней и еще можно избавиться от лишних полей, без которых можно обойтись. Например поля "Наименование" и ЦеныСрезПоследних.ТипЦен можно использовать сразу при обходе результата запроса, а не помещать в запрос; от ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры можно отказаться в запросе есть заменитель.

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

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

P.S. 1) А не подскажите, пожалуйста, может где-то можно почитать про оптимизацию запросов и как правильно с точки зрения 1С их составлять?
2) все-таки не могу понять, почему 2 месяца работало без тормозов, а тут начались тормоза причем не в разы, а в десятки раз...?
Изменено: Александр Тугаенко - 05.02.2011 13:40:33
 
Кеш это глобальная переменная формы списка справочника, которая будет хранить таблицу значений, например с полями Номенклатура, Цена, Скидочная цена. В событии при получении данных будет поиск строк по номенклатуре (поэтому колонку "Номенклатура" таблицы кеша нужно проиндексировать), номенклатура, которая еще не присутствует в таблице кеша добавляется в отдельный массив если в массиве строк больше нуля, то выполняем запрос и заполняем таблицу кеша. Важно если для номенклатурной позиции нет данных все равно ее нужно добавить в таблицу кеша с нулевой ценой.

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

По написанию оптимальных запросов можно почитать статьи в ИТС. Неплохие статьи
Типичные причины неоптимальной работы запросов и методы оптимизации
Типичные причины неоптимальной работы запросов и методы оптимизации
Цитата
Александр Тугаенко пишет:
все-таки не могу понять, почему 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:

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

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

Возможно можно как-то указать при вызове отчета из заказа покупателя, чтобы он использовал стандартные настройки, как когда отчет генерируется ручками(в таком режиме вроде работает...)?
Изменено: Александр Тугаенко - 02.07.2011 02:29:43
 
Проблема ушла, после запуска тестирования и исправления из конфигуратора со всеми взведенными галочками.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С