Медленная работа спр. Номенклатура и Ошибка в логах БД
Читают тему
Вход в личный кабинет
Для получения доступа к форуму необходимо
авторизоваться
или
зарегистрироваться
на сайте.
{{ formTitle ? formTitle : 'Заказ обратного звонка' }}
{{ formDescription }}
Сообщить об ошибке
т.к. юзаю АА то обращаюсь в эту ветку.
с утра БД при открытии номеклатуры начала капитально тормозить - несколько минут.
1) в Логах на сервере (Ubuntu 10.04+ postgresql) - на сегодня было больше 20ГБ, файл разрастается прямо на глазах и процесс postmaster (postgresql) грузит проц на 100% постоянно.
2) на самом компьютере иногда вылазит
3) пробовал комментировать в настройках Postgresql escape_string_warning = off, на клиенте начало вылазить
пробовал загружать копии БД "несколькодневней" давности - работает вроде нормально, но логи также пестрят сообщениями из п.1
при загрузке dt файла в локальную версию - проблем не замечено. Но последние 2 дня - ни в какую. ВСе восстановления БД перепробовал как из 1с так и из самой Postgresl/
Подскажите, кто сталкивался хоть с чем-то подобным - как его побороть?
З.Ы. 1) Почему-то проблемы именно со справочником Номенклатуры
2)Работа стоит, работает тока 1 машина, скоро меня повесят...
2. В отладке при открытии Номенклатуры сделать замер производительности для нахождения медленной операции.
3. Можно воспользоваться технологическим журналом
Несколько статей по использованию технологического журнала
В прикреплении обработка по настройке технологического журнала.
Прикрепленные файлы
Сначала , что есть на сегодня:
проблемы в логах PostgreSQL решаются установкой в postgresql.conf escape_string_warning = off и перезапуском сервера.
Симптомы торможения лечатся так:
Взял бекап на 31.01 - работает нормально, загрузил на сервак
Взял последнюю БД на вчера(2.02) выгрузил все документы через обработку "ВыгрузкаЗагрузкаДанныхXML81.epf", а потом загрузил этой же обработкой в работающую БД от 31.01... Вроде работает. По-крайней мере уже не повесят...
----------------------------------------------------------------------------------------------------------------------
Однако, проблема есть и непонятно почему. Если попробовать выгрузить в dt, загрузить на локальную машину, выгрузить с локалки и загрузить на сервак - опять та же проблема с тормозом номенклатуры... На локалке никаких проблем...
Хочу разобраться почему, чтобы такого не было в каком-то другом месте - т.к. проблема возникла на ровном месте - в БД ничего особенного не менял в эти дни. Вечером сделал восстановление, а утром уже БД в ауте...
1. Тестирование и исправление со всеми галками - не помогает. Также не помогает все доступные средства починки СУБД из 1С и самой СУБД. Также пробовал загрузиться с зеркальной копии диска на момент запуска конфигурации, после загрузки последней БД - такие же проблемы.
2. Да, сделал. тормозит в этом куске кода (СписокПриПолученииДанных), а именно на последнем операторе "Запрос.Выполнить().Выбрать();"
Код не оптимальный и не из стандартной поставки - обсуждался в другой теме - Вывод колонок с ценами в списке номенклатуры.
При этом, в ПН код работает без тормозов, а ВТ уже с тормозами(только на сервере)... Почему?
Протрейсить запрос как-то можно? (СУБД PostgreSQL)
3. До технологического журнала вчера дошел, но ещё не знал как его использовать, читаю.
P.S. прошу не забрасывать тему, а все-таки выяснить причину, т.к. снял тока симптомы... Очень напрягает отсутствие явной ошибки...
Кажись нашёл из-за чего все началось.
Сегодня был запущен конфигуратор и предприятие, подключенные к тестовой серверной БД.
Игрался с сетевыми подключениями(пытался в винде сделать мост виртуальной сетевушки и реальной) - оборвалась сеть. Понятное дело соединение с серваком оборвалось.
Попробовал сразу переподключиться конфигуратором - говорит, уже есть подключение...
Попробовал загрузить предприятие и открыть Номеклатуру - опа! - появился тормоз!
Осталось выяснить:
1) почему начинает тормозить выборка
2) как это лечить.
P.S. Кстати, загрузка нормального cf-файла с работающей конфой несколькими днями раньше в текущую БД с глюком - результата не дает. Т.е. получается, что глюк возникает в структуре БД, причем такой, что доступными средствами не находится и не исправляется...
Этот запрос немного по оптимальней и еще можно избавиться от лишних полей, без которых можно обойтись. Например поля "Наименование" и ЦеныСрезПоследних.ТипЦен можно использовать сразу при обходе результата запроса, а не помещать в запрос; от ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры можно отказаться в запросе есть заменитель.
Запрос = Новый Запрос("ВЫБРАТЬ
| ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныСрезПоследних.ТипЦен,
| ЦеныСрезПоследних.Номенклатура.ТипНоменклатуры КАК ТипНом,
| ЦеныСрезПоследних.Цена КАК Цена,
| ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры,
| ТипыЦенПроцентыСкидкиНаценки.ПроцентСкидкиНаценки,
| ЦеныСрезПоследних.Цена + ЦеныСрезПоследних.Цена * ЕСТЬNULL(ТипыЦенПроцентыСкидкиНаценки.ПроцентСкидкиНаценки/100, 1) КАК СкидочнаяЦена,
| &ПоощрительнаяНаименование КАК Наименование
|ИЗ
| РегистрСведений.Цены.СрезПоследних(
| ,
| ТипЦен = &ТипЦен И
| ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) И
| ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка) И
| Номенклатура В (&МассивТоваров)) КАК ЦеныСрезПоследних
|ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ТипыЦен.ПроцентыСкидкиНаценки КАК ТипыЦенПроцентыСкидкиНаценки
|ПО
| ТипыЦенПроцентыСкидкиНаценки.Ссылка = &Поощрительная И
| ЦеныСрезПоследних.Номенклатура.ТипНоменклатуры = ТипыЦенПроцентыСкидкиНаценки.ТипНоменклатуры
|");
МассивНоменклатуры = Новый Массив; // для передачи в параметр запроса
Соответствие = Новый Соответствие; // для заполнения цен в строках табличного поля
Для Каждого Строка из ОформленияСтрок Цикл
МассивНоменклатуры.Добавить(Строка.ДанныеСтроки.Ссылка);
Соответствие.Вставить(Строка.ДанныеСтроки.Ссылка, Строка);
КонецЦикла;
Поощрительная = Справочники.ТипыЦен.НайтиПоНаименованию("Поощрительная");
Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦен.НайтиПоНаименованию("Розница"));
Запрос.УстановитьПараметр("Поощрительная", Поощрительная);
Запрос.УстановитьПараметр("ПоощрительнаяНаименование", Поощрительная.Наименование);
Запрос.УстановитьПараметр("МассивТоваров", МассивНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Приймите, пожалуйста, мое полное признание Вас как специалиста 1С!!! (хотя я 1с и не люблю
Таки заработало с данным запросом без тормозов!!!
Огромное спасибо!
А относительно кеша что имелось ввиду? Создать массив и в него запихивать цены, а потом по номенклатуре искать в нем?
P.S. 1) А не подскажите, пожалуйста, может где-то можно почитать про оптимизацию запросов и как правильно с точки зрения 1С их составлять?
2) все-таки не могу понять, почему 2 месяца работало без тормозов, а тут начались тормоза причем не в разы, а в десятки раз...?
Грубое описание
По написанию оптимальных запросов можно почитать статьи в ИТС. Неплохие статьи
все-таки не могу понять, почему 2 месяца работало без тормозов, а тут начались тормоза причем не в разы, а в десятки раз...?
Статьи:
Спасибо ещё раз!
Потопал учить матчасть
Подниму тему, т.к. опять что-то похожее вылезло
----------------------------------------------------------------------------
Предистория:
при переносе БД на новый сервер опять возникла похожая проблема, но в другом ракурсе.
Логи БД пестрят надписями из первого сообщения и разрастаются.
Номенклатура, спасибо Виктору, не тормозит
Для прекращения замусоривания логов postgres достаточно добавить в postgresql.conf строчку "escape_string_warning=off"
----------------------------------------------------------------------------
Прогнал в дебаге - дошел до отОтчеты:Модуль зфСформироватьТабличныйДокумент - уходит в эту процедуру и тишина... - процедура закрытая, так что посмотреть, что там происходит нет возможности
Если вызывать данный отчет отдельно и подставлять тот же самый заказ - все отрабатывает без проблем.
Возможно можно как-то указать при вызове отчета из заказа покупателя, чтобы он использовал стандартные настройки, как когда отчет генерируется ручками(в таком режиме вроде работает...)?