Имя: Пароль:
1C
1С v8
Сервер 1C + Postgresql очень долго формируются бухгалтерские отчеты
0 kavjazz
 
20.11.19
09:41
Здравствуйте.

Есть сервер Dell PowerEdge C6220
Процессор Xeon E5-2620 0 @ 2.00GHz
На этом оборудовании, в виртуальной среде развернут CentOS 7, на котором установлены сервер 1С x64 8.3.14.1854 и Postgresql 9.6.11, сборка от PostgresPro
Виртуальной машине выделено 16 Gb оперативной памяти и 4 vCPU, дисковая подсистема достаточно производительная.
Развернута информационная база БП 3.0, типовая, очень небольшого размера, порядка 2.5 - 3Гб.

Проблема в следующем, когда заходим в базу, документы открываются и проводятся достаточно быстро, но стоит запустить формирование какого-нибудь бухгалтерского отчета, например ОСВ за месяц - все, этот процесс длится какое-то безумное время, ждал  30, минут отчет так и не сформировался. Пробовал устанавливать различные версии Postgres, 11.5 и 10, сервер 1С 8.3.15.1700. Ситуация не меняется, отчеты формируются вечно. Может, кто-то сможет подсказать, в чем может быть проблема. Спасибо.
1 bolero
 
20.11.19
09:49
ANALYZE
2 kavjazz
 
20.11.19
09:52
Делал vacuum full analyze к базе, результата не принесло
3 kavjazz
 
20.11.19
09:55
Сервер свежий, только настроили и решили протестировать работу, прежде чем переводить пользователей и наткнулись на описанную проблему
4 Fram
 
20.11.19
09:56
частота ядра выдающаяся, конечно.. как раз под 1С
5 mistеr
 
20.11.19
09:57
(0) >Пробовал устанавливать различные версии Postgres, 11.5 и 10

Попробуй рекомендуемую версию с патчами для 1С.
6 Fram
 
20.11.19
09:58
(3) свежий?!!! на платформе 7ми летней давности?
7 kavjazz
 
20.11.19
10:00
(4) Не подскажете, где-то есть рекомендации в которых как-то указано, что частота ядер должна быть не меньше такой-то величины, а то админ считает, что того, что есть достаточно
8 kavjazz
 
20.11.19
10:01
(6) В том плане, что только недавно все установили и сервер с базой еще не был в эксплуатации. А так да, оборудование не самое новое
9 cons24
 
20.11.19
10:03
(7) увы, их нет. Вернее то что есть на сайте 1с - скорее всего и будет 2Ггц. Но это как "минимальные" для игр: запустится но играть (зачеркнуто) работать невозможно.
С постгресом не знаком, но я бы сказал что у вас нет индексов. Ну мол при разворачивании они не создались. Если ьаза маленькая - запустить реиндексацию из конфигуратора.
10 kavjazz
 
20.11.19
10:03
(5) пробовал версию 10.10-1.1C  с сайта 1С, результата не принесло
11 cons24
 
20.11.19
10:04
Ну и вообще, на сколько помню, Postges встает опять-же с минимальными дефолтными настройками "запуститься но не более". Так что крутить настройки надо скорее всего.
12 strange2007
 
20.11.19
10:05
(4) Частота то при чём? Точнее от частоты такого зависона ну точно не может быть. Там дело в другом. А в каком (хехех) не скажу.

Не знаю почему так. Но я бы стал применять метод половинчатого деления:
1. Запустил бы постгре от 1С
2. Запустил бы постгре на винде.
3. Запустил бы сервере 1С на винде
4. Запустил бы клиента на винде
5. С криками "ааааааааааааааа!!!!" убежал бы в отпуск
13 kavjazz
 
20.11.19
10:05
(11) Настройки выставлял согласно рекомендациям на ИТС
14 strange2007
 
20.11.19
10:05
(11) Не правильно помнишь. Все разработки веду только на постгре (виндовом). А это весь спектр конфигураций, в т.ч. и бухия
15 cons24
 
20.11.19
10:06
И скажите админу, что 1С - это не почтовый сервер. Это OLTP - система, тут транзакции, расчеты и запись на диски на порядки больше чем в привычных ему микросервисах и т.п.
16 Fram
 
20.11.19
10:08
(0) > дисковая подсистема достаточно производительная

а можно поподробнее?
17 kavjazz
 
20.11.19
10:15
(16) dd выдает следующий результат скопировано 1073741824 байта (1,1 GB), 45,7431 c, 23,5 MB/c
18 Fram
 
20.11.19
10:19
(17) я так понимаю, это последовательное чтение/запись?.. а есть возможность еще случайное запись/чтение по 4К прогнать?
19 Йохохо
 
20.11.19
10:22
(17) 23 ржака, 23.5 точная ржака
20 Fram
 
20.11.19
10:23
(19) погоди.. еще случайные чтение/запись не видели )
21 strange2007
 
20.11.19
10:33
(19) IDE-33
Вообще, над чужим горем смеяться не культурно))))))
22 Fram
 
20.11.19
10:40
я понял.. они пыточную для юзеров настраивают
23 kavjazz
 
20.11.19
10:40
Прошу прощения, сейчас нет возможности проверить листовую систему. Позже протестируем и выложу результат.
24 mistеr
 
20.11.19
10:41
(17) К производительности базы эти цифры отношения практически не имеют.
25 kavjazz
 
20.11.19
10:41
*дисковую :)
26 mistеr
 
20.11.19
10:42
(23) Ты хотя бы опиши, какие диски, контроллер, как собраны, ФС, есть ли LVM и т.д.
27 Пузан
 
20.11.19
10:42
Я вот недавно ветку создавал в том числе и с тормозами столкнулись. Поставили базу PG на SSD и все шустро начало летать. Это к слову о продвинутой дисковой системе, все эти рейды 10-ые и прочие не дают нормальной скорости произвольного доступа.
28 mistеr
 
20.11.19
10:43
О, я виртуальную среду проглядел. В ней может быть дело.
29 strange2007
 
20.11.19
10:45
(27) Попробуй диск в памяти развернуть. Вообще обалдеешь от скорости
30 Fram
 
20.11.19
10:45
(24) понаблюдай как нибудь за темп папкой 1с сервера во время формирования отчетов
31 Провинциальный 1сник
 
20.11.19
10:52
(17) dd надеюсь с bs=64k запускали? А то по умолчанию он будет 512-байтными блоками читать, с соответствующим результатом.
32 Провинциальный 1сник
 
20.11.19
10:56
А по сути вопроса, многоминутные тормоза постгреса при выполнении запросов ПРАКТИЧЕСКИ ВСЕГДА означает одно и то же. Значит при выполнении джойна с подзапросом постгрес применил метод nested loop, хотя не надо было этого делать. Почему-то постгрес при формировании плана выполнения запроса предполагает, что подзапросы всегда возвращают небольшой набор данных, и их проще соединять вложенными циклами. А в характерных для 1с соединениях с виртуальными таблицами это не так - подзапросы огромны, и соединять надо другими методами.
Можно в настройках постгреса задать enable_nestloop=off - это уберет зависания, но может слегка замедлить другие запросы.
33 Йохохо
 
20.11.19
10:59
(32) плюсую, когда пг тормозит на флешке юсб 1.1 только подтверждает это правило, в топку нестед луп!! =)
34 Bro
 
20.11.19
11:05
(32) [enable_nestloop=off]
Вы серьезно такие советы давать? Чтобы у автора все колом встало? Вы же понимаете, что это использование по сути всех индексов может отключить, когда у вас join маленькой временной таблицы с большой будет по всей большой таблице ВСЕГДА бегать.

У PostgreSQL есть проблема с отсутствием JPPD (проталкиванием условий внутрь подзапросов):
https://habr.com/ru/company/lsfusion/blog/463095/#commjppd
Но рекомендации 1С не join'ить с подзапросами вообще и они им следуют.

И вторая да, то что вы написали, что в PostgreSQL нет адаптивной оптимизации и при этом он жуткий оптимист (там реально есть константа, что если он не знает selectivity считает ее равной 0.3 и тупо перемножает ее если условий соединений много) :
https://habr.com/ru/company/lsfusion/blog/463095/#ao
Лечится только материализацией подзапросов во времянки. Но 1С как платформа этого делать не умеет, поэтому придется ручками оптимизировать (хотя в типовых они так и делают)
35 Провинциальный 1сник
 
20.11.19
11:09
(34) Вы не поняли, эта опция как раз отключает вложенные циклы в пользу других методов соединения. Тем не менее, если без вложенных циклов обойтись нельзя - они будут использоваться. Опция только дает директиву, что при возможности использовать другие методы соединения, имеющих более высокое быстродействие на больших выборках, такие как слияние и хэширование.
36 Провинциальный 1сник
 
20.11.19
11:11
+(34) И кстати это одна из официальных рекомендаций от 1с..
37 ansh15
 
20.11.19
11:13
(34) До 2013-2014 годов конфигурации бухгалтерии(БП, БГУ, особенно ранних редакций) только с отключенным nestloop и работали. Иначе - именно что колом.
38 ansh15
 
20.11.19
11:27
На последней версии БГУ 1.0 опять ведомости ОС и НМА стали формироваться медленнее раз в 10(с enable_nestloop=on), чем на предшествующей. Версия PostgreSQL 9.6.7 от 1C и платформа 8.3.11.3034, работает с момента выхода версии платформы без нареканий. А на 11.5 и на 15-16-х платформах стало даже быстрее, причем ощутимо.
Сейчас в раздумьях, обновлять или нет...
(0) Версия БП какая?
39 Cyberhawk
 
20.11.19
11:33
"дисковая подсистема достаточно производительная" из (0) + "23,5 MB/c" из (17) = ржака
40 Bro
 
20.11.19
11:34
(35) Это как?
Вот идет SELECT FROM temptable JOIN sku ON temptable.id = sku.id;
Здесь можно и nested loop join по temptable и index scan по sku по индексу по id делать?
А можно hash и merger join 'ом но тогда придется по всем sku в любом случае пробежать. С такой опцией знаете что она сделает? Собственно навскидку nested loop join неизбежен только в LATERAL join'ах ЕМНИП.
(36) Ну такую рекомендацию можно давать либо если у вас база очень небольшая (и вся в память влазит), либо локально для отдельной операции. Целиком на базу ее включать это вилы будут.
41 Затейник
 
20.11.19
11:40
Вот вам набор тест кейсов:
1) Установить разные версии посгри.
2) Поменять линкус, виртуалку, на виндус.
3) Поменять посгри на SQL экспресс, воспроизведется ли ошибка.
4) В файлом варианте как работает?
5) Поменять компьютер. Ошибка воспроизводится только на указанном сервере?
42 Провинциальный 1сник
 
20.11.19
11:42
(40) Вы не в теме. По факту, база может полностью умещаться в память, но со включенным enable_nestloop дико тормозить по процессору, потому что быстродействие O(n*m), в отличие от например соединения слиянием, где О(n+m). Практика показывает, что с отключенным enable_nestloop база работает без зависаний, но в целом реактивность системы снижается. И каждый выбирает сам, что ему важнее.
43 Провинциальный 1сник
 
20.11.19
11:45
(40) В новых версиях постгреса сделали онлайн-статистику для временных таблиц, и при соединении со временными таблицами он теперь не тормозит. А вот с подзапросами всё те же вилы, статистику для них не считают, учитывая только статистику исходных таблиц.
Я уже писал, что лучше бы в постгресе сделали исполнение запросов "снизу вверх", чтобы на каждом уровне была полная статистика о данных, подлежащих соединению. Вот только когда это сделают, потому что там похоже надо весь движок с нуля переписывать.
44 kavjazz
 
20.11.19
11:52
Действительно тесты показывают удивительно маленькую скорость чтения/записи дисков. К сожалению доступа к гипервизору сейчас нет и посмотреть какие диски физически на нем установлены не могу. Так что для меня тоже вопрос, как были услышаны слова о том что нужно обратить внимание на скорость работы дисковой системы при выборе оборудования для настройки сервера. Хотя iotop при формировании отчетов какой-то запредельной нагрузки на диски не показывает. с этим вопросом будем разбираться.
45 kavjazz
 
20.11.19
11:56
(41) разные версии постгрес пробовал, разные версии платформы пробовал, на другом оборудовании проблем с базой нет ни в файловом режиме ни в клиент-серверном варианте. На этом оборудовании проблема наблюдается даже на демо-базе бухгалтерии 3.0. enable_nestloop=off тоже пробовал, результата не дало.
46 kavjazz
 
20.11.19
11:58
Пока основные подозрения на работу оборудования, частота процессора, скорость работы дисков и настройка виртуальной машины. Если есть предположения, что еще может быть причиной такой работы базы, буду рад проверить.
47 ssh2006
 
20.11.19
12:00
(46) может в конфиге pg conf что наворочено?
48 piter3
 
20.11.19
12:00
Может не телепатить,а вернуть оборудование где нет проблем
49 ssh2006
 
20.11.19
12:01
(47) и на стандартном конфиге все работать должно
50 kavjazz
 
20.11.19
12:08
(47) Проверял работу на другом сервере, не виртуальном, с теми же настройками pgconf, проблема не воспроизводится. Но там операционные системы не идентичны проблемному серверу и сервер 1С и Postgres разнесены.
51 Йохохо
 
20.11.19
12:10
(46) очередь дисков и померить iops, это прям до основных подозрений
52 ssh2006
 
20.11.19
12:40
(50) в Centos можно посмотреть текущий профиль производительность
tuned-adm list

и воткнуть максимальный

tuned-adm profile throughput-performance

Но имхо это виртуальная среда виновник
53 Затейник
 
20.11.19
12:50
(45) ну тогда перебросить задачу Админам. При смене физического компьютера ошибка не воспроизводится. 1С работает корректно, проблема на стороне админов.
54 Bro
 
20.11.19
12:56
(42) Я с PostgreSQL очень много времени работал и работаю. Вы по ссылке заходили там все разжевано? Да O(nm) - это самая жесткая ошибка, но отключив enable_nested loop вы фактически всегда O(n+m) получите, в том числе там где было O(n * logm) где m очень большое (это использование индекса в nested loop). То есть на таблицах с 100к записей вместо 10мс, условную секунду. А если запросов будет много все заклинит.
(43) Онлайн статистика для временных таблиц это не критичная штука, так как отлично ANALYZE'ом после ее заполнения решалась.
55 Провинциальный 1сник
 
20.11.19
12:57
(54) "Онлайн статистика для временных таблиц это не критичная штука, так как отлично ANALYZE'ом после ее заполнения решалась."
Вот только 1с не делает анализе при выполнении пакетных запросов с временными таблицами)
56 Bro
 
20.11.19
13:14
(55) Ок не критичная не для 1с :) Хотя емнип они это как раз патчили в постгрес.
57 kavjazz
 
21.11.19
10:24
Попросил админа покрутить настройки виртуальной машины. Ситуация со скоростью дисков исправлена, но отчеты все равно не формируются. Через оснастку администрирования сервера 1С заметил странную вещь, если в базе просто открывать проводить документы, то рабочий процесс сервера стабильно работает, если запустить формирование отчета рабочие процессы начинают отключаться и создаваться вновь, что видно по меняющемуся значению PID, при этом настройки кластера и рабочего сервера в оснастке выставлены по умолчанию, сервер 1C Предприятие 64 разрядный и память, судя по htop, на Centos особо не нагружена.
58 kavjazz
 
21.11.19
11:48
При этом в лог 1С сыпятся такие ошибки:
%
.30:52.856000-0,SYSTEM,3,process=rphost,p:processName=test,t:clientID=4,t:applicationName=1CV8C,t:computerName=Rahat-PC,t:connectID=24,SessionID=1,Usr=АбрамовГС (директор),AppID=1CV8C,level=ERROR,component=backend,class=ContainerAssembly
ChildAccess,line=105,file=./src/MetadataChildAccess.cpp,threadId=140426457655040,func=getMDChildCount,childClassID=274bf899-db0e-4df6-8ab5-67bf6371ec0b,Context='Форма.Вызов : Отчет.ОборотноСальдоваяВедомость.Форма.ФормаОтчета.Модуль.Сфор
мироватьОтчетНаСервере
Отчет.ОборотноСальдоваяВедомость.Форма.ФормаОтчета.Форма : 884 : ИнициализацияКомпоновщикаНастроек();
        Отчет.ОборотноСальдоваяВедомость.Форма.ФормаОтчета.Форма : 1302 : БухгалтерскиеОтчетыВызовСервера.ИнициализацияКомпоновщикаНастроек(ЭтаФорма, Истина);
                ОбщийМодуль.БухгалтерскиеОтчетыВызовСервера.Модуль : 36 : Форма.Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Форма.СхемаКомпоновкиДанных));'
Вот чего ему не хватает?
59 ksenod
 
21.11.19
12:29
(58) Была такая шляпа один раз при добавлении доп базы к кластетру,сыпаться начали вообще все, убрал её и подцепил на выходных, подцепилась без проблем.
Не читал всю тему, но попробуйте все ядра которые идут на виртуалку перевести в режим всегда максимальной тактовой частоты, нам это сильно ускорило работы системы, тоже сервер на виртуалке.
60 kavjazz
 
21.11.19
13:12
(59) Админ сказал, что выставил этой виртульной машине максимальный приоритет. Может, кто-то знает, может ли такое поведение быть связано с тем, что частота процессора сервера всего 2ГГц? В руководсве от 1С в разделе аппаратные требования к серверу кластера указано, что для сервера X32 процессор не ниже Pentium/Xeon 2,4 ГГц, а для сервера X64 такого указания нет, просто: Процессор с архитектурой x86-64 (Intel с поддержкой Intel 64, AMD с поддержкой AMD64).
61 shuhard
 
21.11.19
13:32
(57)[при этом настройки кластера и рабочего сервера в оснастке выставлены по умолчанию]
это не меняет очевидного факта перезапуска rphost по объёму занятой памяти
62 shuhard
 
21.11.19
13:33
(60)[может ли такое поведение быть связано с тем, что частота процессора сервера всего 2ГГц] нет
63 vbus
 
21.11.19
13:34
Покажите, пожалуйста, atop при формировании долгого отчета.
64 kavjazz
 
21.11.19
13:56
(61) До перезапуска процесса он потребляет совсем немного памяти, т.е. объем памяти, который процесс потребляет при входе в базу, при загрузке базы из dt, при проведении документа, может быть выше, и при этом процесс не перезапускается.Сервер 1С x64, в настройках кластера ограничения на размер памяти для рабочих процессов не выставлены, памяти на сервере досточно, какими еще настройками по памяти может вызываться завершение rphost? Подскажите, я проверю.
65 kavjazz
 
21.11.19
14:00
(63) Сейчас нет к сожалению возможности запустить формирование отчета. Проблема наблюдается вообще при формировании всех отчетов, например, ОСВ за день. При запуске htop показывает нагрузку на ядро со стороны процесса сервера 1С до 100%, потом загрузка падает, затем начинает грузиться следующее ядро, и т.д., после удаления сеанса с сервера, нагрузка на процессор падает.
66 kavjazz
 
22.11.19
19:35
Взял компьютер, установил на нем такую же ОС, как и на виртуальной машине, CentOS 7.7, установил postgres и сервер 1С, на выходе получил ту же самую ошибку. Все снес, установил 18.04.3 LTS установил те же самые версии postgres и сервера 1С, ошибки нет, все отчеты формируются.
67 kavjazz
 
22.11.19
19:36
* Ubuntu Server 18.04.3 LTS
68 ansh15
 
23.11.19
01:43
(66) CentOS 7.7 после установки обновлялся, yum update? С момента выхода 1908 ядро несколько раз уже обновлялось и еще куча всего. В /var/log/messages на предмет segmetation fault что-нибудь пишется, когда новые рабочие процессы создаются?
У нас на 1908 и бухгалтерия и зарплата, ничего не тормозит и не виснет.