Имя: Пароль:
1C
Админ
СрезПоследних() на Postgre
0 milan
 
29.11.10
14:40
Тестирую разные базы данных для перевода текущей файловой конфы на сервер предприятия. В отчетах часто юзается СрезПоследних(), скорость выполнения удручает.
Может кто-то сталкивался и нашел решение проблемы тормозов ?
1 Никола_
Питерский
 
29.11.10
14:43
Постгри на чем ???
2 igork1966
 
29.11.10
14:45
(0) У постгресса серьезные проблемы оптимизации запросов в которых участвуют виртуальные таблицы. Соединения с ними просто ужасно тормозят.

Можно переделать
3 milan
 
29.11.10
14:46
(1) win64, памяти 16, постгри последний с сайта 1С.
4 igork1966
 
29.11.10
14:47
(2) +1

для оптимизации таких запросов заюзайте временные таблицы с индексом подходящими для соединения. Это будет значительно быстрее соединиее сразу в запросе с виртуальной таблицей
5 igork1966
 
29.11.10
14:48
(3) Почти 100% не поможет.  Этой проблеме сто лет в обед...
6 igork1966
 
29.11.10
14:51
Еще возможно можно подкрутить параметры оптимизации запросов в постгрессе... но стабильного результата врят-ли добъетесь.
7 milan
 
29.11.10
14:53
(2) Как-то не айс переделывать запросы...
Потестим дб2, может он будет адекватнее.
8 igork1966
 
29.11.10
14:53
(7) опыт показывает... что это не поможет.
9 igork1966
 
29.11.10
14:55
(8) аа... тфу ты про db2..  про него не знаю

PS. Но знаю что часть движка связанная с постгресоом, db2 и ораклом тестируется и оптимизируется явно хуже мелкосовтовскгого и собственного
10 milan
 
29.11.10
14:56
А что именно там тормозит ??? строится не оптимальный план выполнения ??? чей это косяк 1С или постгри ?
11 igork1966
 
29.11.10
15:01
(10) трудно сказать... скорее всего оба виноваты...
12 igork1966
 
29.11.10
15:02
(11) + у постгри хреновый оптимизатор... а 1С неудачно использует постгресс...
13 Fragster
 
гуру
29.11.10
15:04
(12) у постгре нормальный оптимизатор, просто 1с не умеет юзать версионники
14 igork1966
 
29.11.10
15:04
(10) любопытно что я читал рекомендации 1С по оптимизации запросов... там в том числе было неписано и то что я написал... причем без относительно к базе
15 igork1966
 
29.11.10
15:05
(13) ну примерно так я и сказал
16 Fragster
 
гуру
29.11.10
15:05
(14) потому что при хитрых объединениях анализатор может все равно накосячить с планом запроса
17 igork1966
 
29.11.10
15:07
(16) согласен... просто с постгри это проявляется явнее
18 mikecool
 
29.11.10
15:08
таки на постгри и сортировка по умолчанию отличается.. напоролся как то
19 Fragster
 
гуру
29.11.10
15:11
(18) да, и все это написано в тоненькой книжице "1с предприятие 8.1 клиент-сервер. особенности установки и использования". и про то, что полное соединение у постгре тупит, и про то, что сортировки значений NULL отличаются...
20 mikecool
 
29.11.10
15:12
(19) я на это напаролся в типовой конфиге упп, где ни с того ни с сего вместо среза последнего выбиралось промежуточное значение...
21 igork1966
 
29.11.10
15:14
(3) Кстати насчет 64бита...
32битный сервер предприятия при выполнении запроса, результат которого превышает ~ 1G уходит в даун.
На MS SQL не повторял... только на postgress
22 milan
 
29.11.10
15:16
(21) Сервер 1с 64 бит, а вот постгри 32, под винду на сайте 64 версии нет
23 igork1966
 
29.11.10
15:17
(22) я про сервер 1С..  он усиленно кушал память при обработке запроса....
24 DmitrO
 
29.11.10
15:35
Тут вообще-то не 1C виновата (имеется в виду платформа), проблема состоит в том, что оптимизатор postgre не умеет вносить условия связи в подзапросы, а mssql умеет.

1С виновата только в том что разрабатывая типовые конфигурации при разработке запросов почти нигде не учитывает эту проблему. Запрос можно переписать, это решит проблему но запрос будет ощутимо сложнее (больше кода - больше ошибок).
25 Fragster
 
гуру
29.11.10
16:44
(24) вынести запрос к вирутальной таблице во временную - это ощутимо сложнее?
26 Ненавижу 1С
 
гуру
29.11.10
16:46
у 1С серьезные проблемы с реализацией периодических РС, нет альтернативы реализации
27 DmitrO
 
29.11.10
20:23
(25) я вообще-то имел в виду не это решение (не вынос во временную), но и это решение ощутимо усложняет код запроса по сравнению с простым соединением со срезом последних.