Имя: Пароль:
1C
1С v8
Тормоза при формировании ведомость амортизации
0 Kreont
 
28.11.11
11:32
Сервер постгрес, rphost при формировании загружает проц на 100% и висит
долго, очень долго...

Как и чем кто лечил, нашел похожую тему:
v8: PostgreSQL, документы с большим количество проводок и ведомость амортизации
но не помогает все равно даже при
shared_buffers = 1024MB

А может все таки дело в "кривом" запросе в отчете написанном?
1 Axel2009
 
28.11.11
11:36
сколько ОС?
2 Kreont
 
28.11.11
11:38
+(0)Сервер на Fedora 64х, postgres64x, 1C 8.2.13.219 32x
8ГБ оперативка.
Конфигурация УТП Украина 1.2.4.2
3 Kreont
 
28.11.11
11:42
(1) Где то 9 тысяч
4 Kreont
 
28.11.11
12:05
Даже поставил фильтр в отчете = одному ОС, все равно загрузка 100% и висит...уже 3 мин.
Для сравнения ОСВ по всем ОС по 10 или 13 счету формируется за 2-3 сек.
5 Axel2009
 
28.11.11
12:09
значит в запросе
6 DrShad
 
28.11.11
12:20
(4) ОСВ и ведомость амортизации разные вещи
7 Kreont
 
28.11.11
12:26
(5,6) Ага вижу, но там такой запрос большой, хз как к нему подобраться :)
Может попробую для начала через explain постгреса посмотреть где криво написан.

Хотя чувствую что дело закончится аналогично до:
v8: Увеличилось время выполнения стандартных отчетов.

Проверил в рус.конфигур. отчет ведомость амортизации уже переписан,
а "наше" Абби пока думает :)))
8 DrShad
 
28.11.11
12:28
(7) используй ИР от ТормозаИТ для войны с большими запросами
9 Kreont
 
28.11.11
12:35
Не понял:)
ИР?
ТормозаИТ?

П.С. "Тормозилки" игру знаю только (вроде от 1С даже) :)
10 DrShad
 
28.11.11
12:39
11 Kreont
 
29.11.11
15:59
Начал анализировать запрос по кускам, вытянул для начала такой запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПервоначальныеСведения.ОсновноеСредство КАК ОсновноеСредство,
   НачислениеАмортизации.НачислятьАмортизацию
ИЗ
РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&КонГраница, ОсновноеСредство = &ОС) КАК ПервоначальныеСведения
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НачислениеАмортизацииОСБухгалтерскийУчет.СрезПоследних(&КонГраница, ОсновноеСредство = &ОС) КАК НачислениеАмортизации
       ПО ПервоначальныеСведения.ОсновноеСредство = НачислениеАмортизации.ОсновноеСредство

Время выполнения секунды для одного ОСа
Но если убрать условие и по всех сделать:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПервоначальныеСведения.ОсновноеСредство КАК ОсновноеСредство,
   НачислениеАмортизации.НачислятьАмортизацию
ИЗ
РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&КонГраница, ) КАК ПервоначальныеСведения
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НачислениеАмортизацииОСБухгалтерскийУчет.СрезПоследних(&КонГраница, ) КАК НачислениеАмортизации
       ПО ПервоначальныеСведения.ОсновноеСредство = НачислениеАмортизации.ОсновноеСредство

То опять тормоза, так на 20-40 мин. где то выполняется.
Чета я непонимаю, разве соединить две таблицы (9000 строк) по индексированному полю ОС,
должно так долго обрабатываться?
12 Kreont
 
29.11.11
16:52
Кто в курсе: виртуальная таблица ".СрезПоследних" -> это аналог view ?
Если да, то вюшки ведь не используют индексы, и делать соединения
двух вьюшек (регистров сведений например используя .СрезПоследних) всегда будет неоптимально.

Для теста переписал запрос так:
ВЫБРАТЬ
   ПервоначальныеСведенияОСБухгалтерскийУчет.ОсновноеСредство КАК ОсновноеСредство,
   НачислениеАмортизацииОСБухгалтерскийУчет.НачислятьАмортизацию
ИЗ
   РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК ПервоначальныеСведенияОСБухгалтерскийУчет
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НачислениеАмортизацииОСБухгалтерскийУчет КАК НачислениеАмортизацииОСБухгалтерскийУчет
       ПО ПервоначальныеСведенияОСБухгалтерскийУчет.ОсновноеСредство = НачислениеАмортизацииОСБухгалтерскийУчет.ОсновноеСредство

Время выполнения доли секунды! (результат конешно полный, 11тис. записей, а не только последние)
13 Axel2009
 
29.11.11
17:01
а если 2 записи будет по одному основному средству?
14 Kreont
 
29.11.11
17:02
И в результате имеем КУЧА ошибок кривого кода (неоптимального по скорости) во всех стандартных конфигурациях (только что проверил), :) то ведь полный дурдом, или я неправ?
15 Kreont
 
29.11.11
17:04
(13) То понятно что в результат попадут две записи, но в таком случае уже лучше обработать или доп. условиями в запросах, или програмно выводить и обрабатывать результат.
Но не соединять таблицы по неиндексному полю ведь :(
16 Axel2009
 
29.11.11
17:16
(15) учите матчасть на тему индексов.
17 Kreont
 
29.11.11
17:18
(16) а что учить то, в постах (11)(12) результат виден сразу.
18 Axel2009
 
29.11.11
17:20
(17) сформируй каждый из запросов отдельно по срезу последних. и замерь производительность
19 Kreont
 
29.11.11
17:39
Добавил условия, получил только последние для запроса из (12), все равно <1 сек.
А если соединять две таблицы через .СрезПоследних то > 20 мин.