Как стать автором
Обновить

Postgres как предчувствие. Вычисляем процент импортозамещения в режиме Highload от 1С

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров9.6K
Всего голосов 13: ↑11 и ↓2+10
Комментарии36

Комментарии 36

Платформа 1С - это криворукое поделие, которое не умеет работать в RDP-сессии (единственной) на машине с Windows 10. Типа работаем только в /console, а остальное нарушение лицензии (WTF?). Т.е бухгалтер не может через связку VPN+RDP подключиться к своему рабочему компьютеру из дома и работать. И это в эпоху удаленной работы. На машинах с почившим WinVista, емнип, еще можно было извратиться и подключаться к сеансу /console в RDP, но вот такой трэш - это еще один гвоздь в копилку гроба 1С. Это я еще не вспоминаю конец прошлого года, когда легальным пользователям положили тайм-бомбу от разработчика, недавние обновления конфигураций за февраль-март с некорректными расчетами налогов (НДФЛ в том числе) и прочее, прочее прочее...

Прежде чем делать такие громкие заявления нужно разобраться в себе. Во первых 1С в режиме RDP прекрасно работает в корпоративной среде, где куплены сетевые лицензии (RDP,1C) (сам пользуюсь постоянно). Если ставить ее как Published application будет расходоваться одна лицензия на RDP + лицензия на сеанс 1С для каждого запуска . Это реальность Windows RDP. Если у Бухгалтера однопользовательская лицензия, единственная сессия RDP сессия Win10 и он не закрывает 1С при переходе на удаленку , возможно система считает что лицензия уже потрачена.

У 1С для однопользовательской работы есть масса вариантов

1) Поставьте бесплатный anydesk для доступа к десктопу либо аналоги и забудьте о проблемах

2) 1С Fresh - много партнеров предлагают, очень удобно доступ отовсюду и за бэкапом следить не нужно

Как я понимаю, Вы представляете компанию 1С. Объясните пожалуйста здесь и сейчас - почему программа некорректно выполняла расчёты в январе 2023 года? И вообще почему в программе за такие деньги постоянно какие-то сбои? И предыдущий комментатор Вам правильно про тайм-бомбу написал - что это было? В технических деталях пожалуйста. Думаю, всем очень интересно. Потому что денег было потрачено, особенно малыми предприятиями - по их меркам - очень много. Всего лишь из за того, что 1С не делает вовремя и качественно свою работу, за которую регулярно и стабильно собирает очень не маленькие деньги.

Я не работаю в 1С или во франчайзи. Могу только посочуствовать, что у Вас Business continuity plan не сработал (если конечно в курсе как он создается). Представители 1С официально присутствуют в телеграм t.me/e1c_community можете там прямо задать эти вопросы. У нас конечно общество потребления и "клиент всегда прав" хотя никто из производителей ПО не возмещает убытки от некорретной эксплуатации. А 1С стоит очень дешево поверьте. За одну лицензию SAP вы отдадите около 4000 евро, за Sun account чуть меньше при этом функционала будет в 10 раз меньше и еще за право позвонить будете отстегивать 5% * Общую стоимость лицензий.

А 1С стоит очень дешево поверьте.

А раз стоит дешево, то можно и не стараться.

А раз стоит дешево, то можно и не стараться.

за дорого тоже никто не старается, более того за дорого вас еще быстрее на три буквы пошлют

Чтобы не плодить комментарии, отвечу сразу @DMGarikk и @1CUnlimited . Дело в том, что не все живут в Москве, или хотя бы в городе с населением 50 тысяч. В РФ есть очень не мало регионов, где хороший программист, нейросетей например, или спец по C++, получает 9 тысяч рублей в месяц. И ещё дополнительно неофициально зарабатывает 6 тысяч рублей в месяц. Всё, это весь доход. Это реалии регионов, откуда людям не вырваться. По совершенно разным причинам, обсуждение которых сильно выходит за рамки комментария. (И фриланс с удалёнкой - не выход, уж поверьте). Но в таких населённых пунктах людям тоже нужно делать бизнес, не ИТ-шный разумеется, им здесь тоже нужно вести учёт, и им здесь тоже нужна 1С. И поверьте, заплатить 40 тысяч рублей в год за программу для них - дорого. Купить консультацию - можно сказать что неподъёмно.

Я понимаю, что сейчас принято платить минималку а зарплату носить в конвертах, или что можно возразить, мол, скачайте с торрентов, раз для вас дорого. Но. Не у всех и не везде так.

Не везде бизнес крупный. Не у всех обороты большие, есть люди у которых оборот до 15 тысяч в месяц, и всего три сотрудника.

1С не обеднела бы, если бы для клиентов с оборотом до 30 тысяч рублей в месяц или до 80 тысяч в год программа была бы бесплатной. Но нееет, нужно из всех выбить по максимуму. Поэтому да - стараются плохо, обязанности не выполняют, кидают клиентов и мошенничают. По чёрному.

А главное - не учитывают реалии честного бизнеса в РФ.

В РФ есть очень не мало регионов, где хороший программист, нейросетей например, или спец по C++, получает 9 тысяч рублей в месяц. И ещё дополнительно неофициально зарабатывает 6 тысяч рублей в месяц. Всё, это весь доход

если гдето хороший программист получает 9+6 тысяч рублей, то у меня большие сомнения что он именно что хороший, он гдето в клетке сидит или к батарее прикован и у него доступа к интернету нет? зачем хорошему, действительно хорошему, программисту работать за копейки если интернет разрывается от предложений работы с ценником на миддла от 100тыр? (если программер хороший то он явно не джун)


(И фриланс с удалёнкой — не выход, уж поверьте)

почему??? я работал в штатовской компании где люди были из РФ, РБ, Украины, Шриланки, Индии, Португалии и далеко не из столичных городов в этих странах
В чем проблема удаленки то??
Я последние 4 года работаю на удаленке, моим работодателям вообще плевать где территориально я нахожусь (сейчас я в РФ, но работодатель не против если я даже в Парагвай уеду, главное задачи закрывать и командой эффективно рулить)


им здесь тоже нужно вести учёт, и им здесь тоже нужна 1С.

За державу чтоли обидно?
я вот 4 года в РЖД отработал за 15 тыр в месяц, спасибо, хватит. уже 20 лет с тех пор прошло, а поезда как ездят так и ездят… ща погуглил, там зарплата на мою должность прошлую, 35тыр ;) без меня поезда под откос не пошли почемуто. почему комуто надо ради идеи чёто там бороть и превознемогать?


И поверьте, заплатить 40 тысяч рублей в год за программу для них — дорого.

если дорого, то бизнес это не для них
Я чтобы это понять, 7 лет в своем бизнесе промучился, до сих пор проснусь иногда ночью и радуюсь что мне не надо думать о том где бабло на зарплату достать… и это всё при гораздо ГОРААЗДО большем моём личном заработке (как перестал чужой труд себе присваивать так бабки появились… антикапитализм какойто)


Я понимаю, что сейчас принято платить минималку а зарплату носить в конвертах
Не у всех обороты большие, есть люди у которых оборот до 15 тысяч в месяц, и всего три сотрудника.

ну и зачем тогда упарываться? слабо осознать что не умеете в бизнес? ИТ это дорого, это реалии и реалии не только РФ, во всем мире так, рынок таков что зарплата джуна — 100тыр, и по этому софт стоит так дорого… и ради какихто ИП Васильев Василий Василич из Сургута никто не будет работать бесплатно просто потомучто.


А главное — не учитывают реалии честного бизнеса в РФ.

вот я работал 7 лет в сфере оффлайн рекламы, хотите сказать мне надо было бесплатно рекламу делать чтобы бизнес малый продвигать? знаете сколько раз мне клиенты тыкали что аренда биллборда в 15тыр в месяц это страшно дорого и я охренел и бабки рублю? А миллионером я так и не стал, и деньги начал зарабатывать только уйдя в ИТ

я работал в штатовской компании

Вы безусловно большой молодец, никто не спорит. Но удалёнка дело такое - нужно и видеособеседование проходить, и на работе быть от стольки до стольки, и всякие абсолютно дурацкие правила про подтверждение личности вроде фото с паспортом, и прочее и прочее. Без этого с Вами работать никто не будет. И если фото с паспортом (да или просто фото) ещё можно списать на хотелки человека (хотя как по мне, в современном мире любая попытка деанона должна караться очень жёстко, никак не мягче распиаренных тем про харассмент и домогательства), то видеосозвон можно просто не пройти потому что да, интернета нормального нет - он есть только три дня в неделю. И работать от стольки до стольки у людей может не быть возможности, потому что "скотину нужно идти управлять", ну т.е. сельское хозяйство требует присутствия в определённых местах в конкретное время, и подстраиваться под "эту странную девку" никто не будет. И помимо всего прочего, любые контакты с фото/видео для человека могут быть недопустимы по разным причинам.

если гдето хороший программист

ну например человек реализовал оценку состояния коров в стаде по установленной над входом в загон камере видеонаблюдения. конечно на самом деле там довольно простой пайплайн - помимо очевидного - собрать видеопоток, выполнить детекцию движения, смапить шкуру отдельно взятой коровы на плоскость, прочитать написанный на ней штрихкод, оценить состояние этой шкуры, оценить движения животного, оценить дыхание, скорость шагов там, взаимодействия отдельной особи с другими, скорость реакции там, и т.д. - потом проанализировать это во времени и выдавать данные - "а вот эта сегодня себя иначе ведёт, может беременна, может заболела, а может овода покусали и нужно срочно шкуру обработать", и т.д. потом управление калиткой - чтобы корова пошла либо в общий загон, либо в специальный профилактический. дальше - маркеры с gps на коровах, самодельные, на stm32. да, паяли люди сами, платы - ЛУТ. различная автоматизация работы систем переработки навоза - с программной точки зрения это двадцать насосов, сто спектрографов (это лампа накаливания или светодиод, один или два светофильтра, и фотодиод, электроника - включение лампы и АЦП после фотодиода, + stm32), около десяти уровнемеров, ну и по мелочи разные кнопки и т.д. отказоустойчивая система спускания воды через плотину тонкими струйками в зависимости от давления, уровня, и т.д. - там нельзя чтобы из за зависания компьютера что-то сломалось - но компьютер быть должен. опять же, сеть под всё под это. эпично - это когда тебе говорят - денег на модемы нет и не будет, делать через самодельную телефонную линию ненадёжно. вот провод, вон там пара мёртвых телевизоров. сделай что нибудь через RS-232 так, чтобы работало. схемы потом мне принесёшь, мы проверим. определение марок и номеров проезжающих где-то машин и детекция людей выходящих из них и садящихся обратно, при помощи единственной камеры. да вообще компьютерное зрение всего и вся что только можно придумать. это когда у вас хотя бы видеокарточки есть - это всё простым кажется. кому то же это всё на core 2 duo как то делать приходится. хотя в конце, когда всё заработало - нам привезли три сервера с двумя E5440/16GB каждый - на них всё заметно шустрее закрутилось, пропусков стало меньше. в 2019 году появилась первая GTX 580, а в 2022 привезли RTX 2060 SUPER - все были страшно рады. В 2022-м кстати руководителю захотелось в трейдиг, так как "кризис - это возможности и нужно срочно вкладываться в акции" - и программисту пришлось за два месяца написать сносно работающий терминал под коннектор одного из брокеров, на C++ (VS2008), с возможностью исполнения собственных стратегий. на самом деле примитивнейшего уровня - но скриптовый язык вроде паскаля реализовать пришлось. почему не готовый терминал - потому что "злые брокеры украдут мои гениальные инвестиционные идеи". в общем об этом можно рассказывать бесконечно - но поверьте, не только в москвах хорошие программисты сидят. да, описанное выше - это лишь малая часть того, что делает один человек с 8 классами школы, потому что 9, 10 и 11 класса здесь нет - да и время на самом деле давно упущено.

 там зарплата на мою должность прошлую, 35тыр

ну так это РЖД ))) а есть места где нет РЖД, а работать где-то надо.

если дорого, то бизнес это не для них

вопрос спорный. всем надо как то жить. пофилософствовать на тему первопричин конечно можно - но я не буду. тем более тут за это карают.

никто не будет работать бесплатно просто потомучто

А вы не допускаете, что в силу окружения в раннем возрасте не у всех хватает "мировоззрения" чтоли, "знаний об окружающем мире" там, чтобы понять, когда нужно срочно что-то менять? При этом человек может вполне понимать что такое трансформеры (архитектура нейросетей), потому что читал большинство всех этих статей с arXiv'а и щупал сначала паскаль, потом си, а потом tensorflow, решать задачки по теоретической физике из книжек Кронин/Гринберг или Белоусов/Бурмистров - потому что хотел разобраться в квантовых компьютерах - а стараний пока хватило только на половину томов ландау лившица, и писать вполне сносный софт вроде собственного торрент клиента под windows "потому что интересно", или систем computer vision - но при этом понять что нужно бы всех кого ты знаешь послать далеко и желательно навсегда - это действие немного другого порядка? Тут я молчу о том, что в "регионах" принято делать людей должными по умолчанию - тебе в школу отходить помогли - тебя кормили? Всё, ты - должен. Да, это дико. Это несправедливо. И этим людям никто не поможет - потому что помочь им можно только одним способом - это дать денег чтобы они тупо заткнули ими рот всем тем, кто их окружает, и уехали подальше. Но этого никто не сделает по нормальному - например потому что у тех, кто понимает ситуацию и знает как помочь и что сказать - у самих денег нет. А все эти удалёнки - это конечно может быть и круто, но это не для всех. Никто не хочет за сделанную работу деньги платить и не задавать при этом кучу вопросов. Проверяли, пробовали, знаем.

Но удалёнка дело такое — нужно и видеособеседование проходить, и на работе быть от стольки до стольки, и всякие абсолютно дурацкие правила про подтверждение личности вроде фото с паспортом, и прочее и прочее.

стоп стоп, а на обычной работе тоже надо оффлайн собеседование проходить и документы свои в отдел кадров отдавать
А я вообще документы через ЭДО отправлял, без всяких фоток с паспортом


хотя как по мне, в современном мире любая попытка деанона должна караться очень жёстко

Ааа, что? вы хотите работать на работе анонимно? мы вообще о чем говорим?


то видеосозвон можно просто не пройти потому что да, интернета нормального нет — он есть только три дня в неделю.

мы сейчас обсуждаем проблемы деревни, где в оффлайн работе есть интернет, а в домах нет? это блин тундра?


И работать от стольки до стольки у людей может не быть возможности, потому что "скотину нужно идти управлять",
аааааа… это какойто сюр, а как вы на оффлайн работе работаете? что это вообще такое?

И помимо всего прочего, любые контакты с фото/видео для человека могут быть недопустимы по разным причинам.

еще раз, а оффлайн работа почему по этим-же критериям вам подходит?
вы вообще приводите какието сюрреалистичные пограничные примеры, которые актуальны дайбог 1 на 1000


ну например человек реализовал оценку состояния коров в стаде по установленной над входом в загон камере видеонаблюдения.

Без интернета, без доступа к технологиями, не общаясь с другими людьми, сидя посреди тундры.


чтоа?
Хороший программист — это тот кто может работать в комманде и помогать создавать продукт, а не rs-232 в ЛУТе распаивать.


А вы не допускаете, что в силу окружения в раннем возрасте не у всех хватает "мировоззрения" чтоли, "знаний об окружающем мире" там, чтобы понять, когда нужно срочно что-то менять?

Если человек программист, и у него интернет есть, хотябы раз в неделю, как у меня когдато в староглинянные времена, то он вполне способен узнать что происходит в окружающем мире.
Я, при отстутсвии интернета в 2000 году, в фидо ходил через одолженный у друга модем, чтобы потрепаться.


помочь им можно только одним способом — это дать денег чтобы они тупо заткнули ими рот всем тем, кто их окружает, и уехали подальше.

дать денег — самая плохая помощь

вообще какойто несвязный поток сознания, извините уж, я не знаю как адекватно вам отвечать

1С не обеднела бы, если бы для клиентов с оборотом до 30 тысяч рублей в месяц или до 80 тысяч в год программа была бы бесплатной

Вы работаете бесплатно на организации с оборотом до 30 т.р. в месяц? Почему бизнес что то должен делать бесплатно? Я не видел, что бы в поселке/городе всем, у кого зп небольшие, выдавали хлеб бесплатно например.

В России есть много аналогов 1с по разным ценам, есть наверное и бесплатные. Пользуйтесь ими или пишите свою учетную систему.

в программе за такие деньги постоянно какие-то сбои?

за какие деньги?
Я админил программы которые стоят по десятку тысяч баксов за рабочее место и за серверные лицензии по миллиону… и оно так глючит что 1С в сторонке отдыхает. (слабо положить онлайн банковский на 12 часов? дазапросто)
то что вы считаете что вам чтото за эти деньги недодают, то это вы просто не знаете реалий, недодают всем, это в некотором роде норма в отрасли. Кулаками махать удобно, но бежать вам некуда ;))
была давняя шутка во времена популярности Сап
дословно уже не помню
1С — 'ололо!!! ваша программа неправильно считает, ваш программист чето поправил требует денег платить не будем… исправляйте ололо, так уж и быть за такую доработку доплатим 50$ если норм заработает… но вы сволочи!!! а еще сделайте мне печатную форму такуюто!'
САП — наш аналитик посмотрел что вы хотите, доработка будет стоить 10000$, за анализ вашего вопроса с вас 500$… спасибо, мы это в экселе посчитаем, а форму Галя в ворде сделает, вопрос закрыт


итог
САП — ничего дорабатывать не надо все отлично!
1С — всё глючит, программисты постоянно все допиливают!

Может быть речь про клиентскую лицензию через usb ключ? В таком случае да если подключиться к компу по rdp, лицензия не будет найдена 1ской. Первое решение - программная лицензия. Раньше можно было пропатчить 1с чтобы она таки видела локальный ключ, сейчас это наверное проблематично.

Да, речь именно о данной ситуации.

Что касается SAP. SAP все-таки решение для крупного бизнеса, сиречь уровня корпораций. Ценник соответствующий. Кроме этого, вряд ли SAP намеренно закладывает тайм-бомбы в программное обеспечение легальных пользователей - за подобный подход можно нехило огрести в судах нормальных стран, плюс получить репутационные потери.

Если бы 1с делал продукт для корпораций и малый бизнес им бы не пользовался - никаких проблем. Тем не менее, локальные лицензии они выпускают, в т.ч и для малого бизнеса. И если за них платят деньги - хочу заметить, платят запрошенную цену, которую устанавливает 1с, т.е ровно столько, сколько 1с посчитала нужным запросить за свой продукт - хотелось бы получать работающее ПО, без намеренных зловредов внутри, которое корректно работает (хотя бы считает налоги, т.к это критично, можно попасть на штрафы). Если все за ПО придется проверять и считать руками - зачем такое ПО вообще нужно?

Тем не менее, факт остаётся фактом - программа, за которую платятся деньги - работает через пень-колоду, считает с ошибками и в любой момент может намеренно угробить базу данных и себя по прихоти разработчиков.

Не держите в себе, напишите статью на Хабр что нибудь яркое "1С к ответу за вредительство!" . Но тут пожалуйста по теме.

P S Помните только две вещи

Цитаты типа "без намеренных зловредов внутри, " - это может расцениваться как клевета (а в РФ это уже статья УК заметьте даже не КОАП где штрафом отделаетесь)

вряд ли SAP намеренно закладывает тайм-бомбы в программное обеспечение легальных пользователей - за подобный подход можно нехило огрести в судах нормальных стран, плюс получить репутационные потери

Поверьте на западе все в AS IS так прикрыто, что деловая репутация не пострадает. Главное чтобы не пострадала капитализация, вычисляемая из котировок на бирже, да такое бывает - гуглите.

А с деловую репутацию можно класть в НМА (Гудвилл) Обесценение гудвилла (finotchet.ru) амортизировать и т.д. Поэтому когда пишите про то как оно там смотрите глубже несмотря на то что "это другое"

а у вас случаем многопоточная обработка запросов не включена, а то если да то выключите
ALTER SYSTEM SET max_parallel_workers_per_gather TO 1;
ALTER SYSTEM SET max_parallel_workers TO 1;
ALTER SYSTEM SET max_parallel_maintenance_workers TO 1;
ALTER SYSTEM SET autovacuum_max_workers TO 2;

ALTER SYSTEM SET ssl TO off;

ALTER SYSTEM SET online_analyze.enable TO off;
SELECT pg_reload_conf();

а если не поможет то
ALTER SYSTEM SET cpu_operator_cost TO 0.0001; -- поднять стоимость процессорного ресурса

Судя по всему включена

Все результаты команды show all я опубликовал тут

https://docs.google.com/spreadsheets/d/1Y3sS1N7wzEuhZPmQlQKWogM_lGUHy7RSpUasxAFKMQE/edit?usp=sharing

Причем online_analyze.enable = on специально включено в дистрибутиве рекомендованном для 1С .

В любом случае спасибо попробую

не увидел без подсказки закладки снизу
но лишь утвердился в причинах, ну так то и на скуле можно параллелизм задрать
вообщем идея лишний параллелизм выключить исключительно для оценки влияния на общую утилизацию процессоров
то что рекомендованно 1с должно быть прежде всего осмысленно ПОЧЕМУ
в данном случае  online_analyze.enable = on включает СИНХРОННУЮ статистику
может она в данном конкретном случае и не сыграет роли, но она удлиняет транзакции, помоему проще проверить, чем спорить
еще для третьте волны экспериментов
ALTER SYSTEM SET geqo_threshold TO 8;
ALTER SYSTEM SET join_collapse_limit TO 8;
на сложных запросах раньше будут будет срабатывать более быстрая генерация плана запроса, но менее точная
на запросах меньшим числом таблиц это не скажется ни как
при чем играться тут можно в обе стороны, дефолтовое 12

Вячеслав - попробовал эти параметры, они никак не повлияли (кластер Postgres перегружал) замерял два раза

 если да то выключите
ALTER SYSTEM SET max_parallel_workers_per_gather TO 1;
ALTER SYSTEM SET max_parallel_workers TO 1;
ALTER SYSTEM SET max_parallel_maintenance_workers TO 1;
ALTER SYSTEM SET autovacuum_max_workers TO 2;

ALTER SYSTEM SET ssl TO off;

ALTER SYSTEM SET online_analyze.enable TO off;
SELECT pg_reload_conf();

И результаты прогона суммарные 1536 orm записей в секунду, с 50 потоков тоже показывают что влияния никакого

Меня в данной ситуации больше вопрос волнует - как посмотреть на что тратится процессорное время, кроме как на запросы приложения? Случай с включением лога показателен - его активность нигде не была видна кроме загрузки backend процессов. Тут повидимому такая же ситуация , кто-то еще ест ресурсы.

Возможно активация pg_stat_statements или подобных влияет

he pg_stat_statements module provides a means for tracking planning and execution statistics of all SQL statements executed by a server.

The module must be loaded by adding pg_stat_statements to shared_preload_libraries in postgresql.conf

Если бы была возможность посмотреть эту активность гдето , не пришлось бы гадать

активность снаружи в windows можно посмотреть через процесс монитор марка русновича

раз вы говорите что статистика временных таблиц много съедает, то

1. давайте поставим 8.3.12, там платформа этого еще делать не умела
вот и выясним верность гипотезы
а со стороны субд уменьшим количество выборки за проход

ALTER SYSTEM SET default_statistics_target TO 20;

2.
-- в отличии от скуля мы можем сказать оптимизатору запросов, что процессор дорогой
ALTER SYSTEM SET cpu_operator_cost TO 0.0001; 
--а диски дешевые чтобы попробовать сместить планы запросов
ALTER SYSTEM SET  seq_page_cost TO 0.1;
ALTER SYSTEM SET  random_page_cost TO 0.4;

3.
--отключим синхронность записи
ALTER SYSTEM SET  bgwriter_delay TO 200; 

ALTER SYSTEM SET  synchronous_commit TO off;

ALTER SYSTEM SET  full_page_writes TO off;

ALTER SYSTEM SET  fsync TO off;

ALTER SYSTEM SET checkpoint_segments TO 200;
ALTER SYSTEM SET checkpoint_timeout TO 1800;

ALTER SYSTEM SET autovacuum_naptime TO 200;

ALTER SYSTEM SET commit_delay TO 10000;
--увеличим размер лога
ALTER SYSTEM SET max_wal_size TO '1024 MB';
--уберем лишние модули
ALTER SYSTEM SET shared_preload_libraries TO 'plantuner';

и рестарт постгреса

Интересно, я попробую эти параметры.

Единственно по поводу 8.3.12 - мне проще прогнать скрипты трейсов с параметрами MS SQL vs Postgres и посмотреть время на DML . Я гоняю тест на резервном кластере без виртуализации, и там у меня определенная политика администрирования.

Асинхронный коммин отключен у обоих СУБД, иначе бы у MS SQL и Postgres были бы неравные условия

Вы же в статье пишите, что платформа сама дёргает аналайс каждый раз после вставки во временную таблицу. Делать его ещё раз автоматически нет необходимости. Просто более ранняя версия платформы не делали это. Видимо рекомендация с тех времён.

Я протрассировал один вариант .Запись() в регистре накопления что там в метаданных (документы, регистры сведений и т.д.) я не смотрел естественно - возможно в 1С тоже не уверены и включают online_analyze.enable = on .

Вопрос - может ли Postgres жить на правильных индексах но без статистики пока открыт :)

Тест не объективный, родная среда для Postgres это *nix, поставь на linux и там не будет такой нагрузки по CPU....

Будет, всё будет.

Ставьте на linux , и ещё используйте pgbouncer, лучше бы что он коннектился к pg через socket.

Я про connection pooling сразу подумал когда увидел список процессов Postgres в Windows , У меня есть подозрение что Postgres с affinity не работает и все зависит от ОС .

Но из описания pgbouncer PgBouncer features он выглядит как обычный Pooling для сохранения контекста сессии и не предоставляет возможности распределения обработки операторов DML в режиме shared server process как у Oracle Managing Processes (oracle.com) .

Т.е. pgbouncer решает некую проблему с избыточным созданием backend process нежели распределение нагрузки по обработке операторов DML? Разве не так?

pgbouncer при работе 1С не поможет

То что разработчики 1C в Postgres  делают при каждом вызове .Записать() ANALYZE pg_temp.tt* так себе решение , хотя оно чем то обосновано?

Обосновано тем, что если Вы не сделаете ANALYZE после записи во временную, то PostgreSQL будет считать, что там столько же записей, сколько и было со времени последнего ANALYZE. В итоге PostgreSQL легко выберет вам в плане Nested Loop, ожидая, что там будет 1 запись, а по факту там будет 10.000. И привет зависший запрос, насилующий процессор и диск, пока его не снимут.

Почему FASTTRUNCATE не такой уж и fast?

Потому что в PostgreSQL временный таблицы не сильно отличаются от обычных, а TRUNCATE временной таблицы мало, чем отличается от TRUNCATE обычной таблицы (FASTTRUNC быстрее, так как он просто очищает файл, не изменяя pg_class, relationid и сам файл данных, соответственно, не транзакционен). Однако все равно, это достаточно "тяжелая" процедура, так как это вам не переменную добавить/удалить, а практически изменить структуры базы данных.

Да, в PostgreSQL все не очень хорошо со временными таблицами. Но глобальная проблема 1С кроется в том, что он все делает посредством ORM. Мы с lsFusion также сталкиваемся с теми же самими проблемами (когда много времени занимает ANALYZE и TRUNCATE временных таблиц), однако у нас обработка всегда идет не по каждой записи императивно, а большими блоками и SQL-запросами. За счет этого значительно снижается количество таких операций работы со временными таблицами и повышается производительность. 1Су нужно уходить от ORM, чтобы нормально работать с PostgreSQL, но как это сделать, сохранив обратную совместимость - не очень понятно.

И в добавок немного лирики, почему в PostgreSQL все именно так. Дело в том, что в DML и DDL у вас участвуют как обычные, так и временные таблицы. Если вы будете по другому относиться ко временным таблицам, то вам в коде придется везде делать сложные алгоритмы и разные ветки для временных / не временных, хотя логически в этом нет смысла (какая разница делать Hash Join с временной и обычной таблицей ?). А учитывая то, что с ООП в исходниках СУБД тяжело (так как очень важна производительность), то это все привело бы к огромному усложнению кода.

Да, Oracle так и делает. Там похоже толпы индусов пишут миллионы разных эвристик (судя по многим их ограничениям). Но чтобы так делать вам нужно просто огромное количество денег для того, чтобы это все как-то не глючило и работало нормально по скорости (на проектирование/разработку/тестирование). А в open-source проекте, как вы понимаете, не все так просто. MSSQL, кстати, тут что-то среднее между PostgreSQL и Oracle - там меньше эвристик, но и ограничений меньше.

Но look at the bright side. За счет более простого кода, и в PostgreSQL много обрабатывается гораздо быстрее. У нас запрос в миллион строк когда PostgreSQL местами планировал за сотню миллисекунд, когда у Oracle на это может уходить и секунды (хоть он и спланирует их гораздо качественнее). Но писать запросы к PostgreSQL надо гораздо более аккуратно и правильно. За вас он работу не сделает.

Да, Oracle так и делает. Там похоже толпы индусов пишут миллионы разных эвристик (судя по многим их ограничениям). Но чтобы так делать вам нужно просто огромное количество денег для того, чтобы это все как-то не глючило и работало нормально по скорости (на проектирование/разработку/тестирование). 

А что подразумевается под "многим их ограничениям" у Oracle? Там вроде сначала пытается построить план на существующих индексах а уже потом более сложные варианты. Да они убрали варианты оптимизатора CHOOSE и RULE c 11 версии ALTER SESSION SET OPTIMIZER_MODE - Oracle Forums , но там много других вариантов Influencing the Optimizer (oracle.com) .

Я подобного у MS SQL не встречал, кроме вариантов управления статистикой. А Postgres как понимаю ориентируется в основном на статистику, а хинты вообще не признает в отличии от Oracle и MS SQL .

А что подразумевается под "многим их ограничениям" у Oracle? Там вроде сначала пытается построить план на существующих индексах а уже потом более сложные варианты.

Я имел ввиду не алгоритм по построению плана. Там ограничений особо быть не может, так как любой запрос так или иначе все равно выполнится. И в PostgreSQL все строится на эвристиках, просто в Oracle они гораздо сложнее.

Об ограничениях речь в частности шла, например, про опцию Fast Refresh в Materialized Views . Там вся статья в разных ограничениях на это, что явно свидетельствуют об эвристичном коде. Тот же lsFusion поддерживает это все в общем случае без ограничений за счет реализации алгоритма в общем случае.

В целом одна из главных преимуществ Oracle в планировании, что если в ходе выполнения запроса выяснилось, что где-то в середине количество записей не совпадает с запланированным, то идет перепланирование. PostgreSQL же продолжает выполнение по первоначальному плану несмотря ни на что, считая, что все цели будут выполнены несмотря ни на что :) Причем снаружи автоматически определить, что пошло не так - невозможно.

Мы в lsFusion просто оцениваем сложность запроса, ставим для него таймаут, и если запрос превысил его, то считаем, что PostgreSQL ошибся (хотя точно не знаем где). После этого автоматически эвристично разбиваем запрос на несколько с временными таблицам (когда часть пишется сначала во временную, а потом она уже используется - так PostgreSQL уже будет знать точную статистику после ANALYZE этой временной таблицы). При этом это разбиение запоминается и последующие запросы выполняются уже так.

Спасибо за проясняющий комментарий, жаль кармы не хватает плюсовать но надеюсь другие ++.

Обосновано тем, что если Вы не сделаете ANALYZE после записи во временную, то PostgreSQL будет считать, что там столько же записей, сколько и было со времени последнего ANALYZE. В итоге PostgreSQL легко выберет вам в плане Nested Loop, ожидая, что там будет 1 запись, а по факту там будет 10.000. И привет зависший запрос, насилующий процессор и диск, пока его не снимут.

Я предложил саппорту 1С выдавать Analyze в зависимости от размера набора записей (он известен на кластере 1С) - возможно реализуют или свой вариант.

Мы с lsFusion также сталкиваемся с теми же самими проблемами (когда много времени занимает ANALYZE и TRUNCATE временных таблиц), однако у нас обработка всегда идет не по каждой записи императивно, а большими блоками и SQL-запросами. За счет этого значительно снижается количество таких операций работы со временными таблицами и повышается производительность. 1Су нужно уходить от ORM, чтобы нормально работать с PostgreSQL, но как это сделать, сохранив обратную совместимость - не очень понятно.

Пора и мне посмотреть архитектуру IsFusion, как там решаются вопросы с Highload. Есть надежда, что это все можно решить в 1С укрупнением DML (не Batchig) и существующие методы в ORM 1С можно даже сохранить, доработав язык Концепция ORM как двигатель прогресса — выдержит ли ее ваша СУБД? / Хабр (habr.com) . Правда это никак не решает проблему одного сервера СУБД (в Postgres нет аналога Oracle RAC, а у 1С нет шардирования в платформе), но в сочетании с асинхроным коммитом границы Highload будут расширены существенно

Я предложил саппорту 1С выдавать Analyze в зависимости от размера набора записей (он известен на кластере 1С) - возможно реализуют или свой вариант.

При таком подходе важно запоминать, сколько там уже было записей в прошлый раз, что архитектурно сложнее. И тут, как минимум, не стоит забывать, что есть auto analyze в postgresql, который может запуститься после truncate. В общем, теоретически можно, но есть нюансы.

Пора и мне посмотреть архитектуру IsFusion, как там решаются вопросы с Highload

Решается очень просто. Весь декларативный код, который пишется на lsFusion напрямую транслируется в SQL-запросы. Если в ORM системах типа 1С 90% бизнес-кода выполняется на сервере приложений, а 10% на SQL, то в lsFusion с точностью до наоборот.

Важно понимать, что ORM всегда и везде медленный, не только в 1С. По этой причине в типовых 1Ски очень много чего и переделывается с ORM на плоские запросы. Если дорабатывать язык ORM, то как раз и получится язык по типу как в lsFusion :)

Резюме по первому этапу тестирования выложил тут Postgres - бесплатный сыр или ступенька к Enterprise версии? Попробовал все предложенные параметры - результат в пределах нуля, но как действовать дальше понятно

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории