|
Тормоза при формировании ведомость амортизации | ☑ | ||
---|---|---|---|---|
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 мин. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |