• Потому что для 1С аналогов нет.

  • Последняя установка на Windows, DATABASE не пригоден для использования.

  • Методика анализа проблем для Postgres после первой неудачной попытки.

  • Пиррова победа Postgres?

  • Что делал Слон когда пришел наПолеОн ? Разбор «удачного» запуска.

  • Помогите Postgres выиграть у MS SQL.

Потому что для 1С аналогов нет

Когда долго работаешь с Oracle или MS SQL , причин рассматривать Postgres на нагруженный проект было совсем немного, ведь уже есть проверенные решения, знания и опыт, а «бесплатность СУБД» на фоне остальных затрат для HighLoad проекта не самое главное. Однако в прошлом году произошел «волшебный пинок судьбы» и стало ясно, что новых инсталляций MS SQL и Oracle (и даже IBM DB2) не будет, поэтому для 1С кроме Postgres уже альтернатив нет. По крайней мере не в этом солнечном цикле

Сегодня, проверим как поведет Postgresql  на нагрузочном тесте с платформы 1С на запись (insert , update, delete) и сравним ее с MS SQL с той же базой и на том же сервере. Методика нагрузочного теста, и конфигурация оборудования изложена в первой части цикла статей.

Концепция ORM как двигатель прогресса — выдержит ли ее ваша СУБД? / Хабр (habr.com)

Концепция ORM как двигатель прогресса – выявит слабое место Вашей СУБД / Хабр (habr.com)

Delayed durability поможет вашему ORM увеличить производительность на 50% и более, если Вы только будете использовать … / Хабр (habr.com)

Если кратко мы инициируем 50 потоков  записи в оборотный регистр накопления 1С 8.3 в виде фоновых заданий. Сервер приложений 1С (1С8.3.22.1709 ) и сервер базы данных (Postgres 15.2, MS SQL 2019) на разных 2 х процессорных серверах HP, все сделано для ликвидации узких мест. Базы полностью находятся на серверных SSD (возможности по IOPS запись где-то 32 тысячи, а на чтение 85 тысяч в режиме Random). Заметим, что 1С  порождает не только Insert, но и запись во временные таблицы, делает соединения для обновления итогов оборотов и т.д. поскольку это ORM объект со своей  структурой, которая подробно изложена в первой части статьи. Эксперимент проводится на том же сервере Windows 2019,  где MS SQL , базы лежат на одном и том же SSD – пришлось сделать маленькую версию базы на 80 гигабайт. Т.е.  можно сравнить MS SQL vs Postgres на одинаковой задаче и оборудовании.

Тест в этой статье будет БЕЗ включения Delayed durability MS SQL\Асинхронный commit  Postgresql поскольку мы проверяем работу в обычном режиме Durability, для более объективного сравнения Postgres vs MS SQL. Режим Snapshot установлен платформой – у MS SQL «Is read committed snapshot on», у Postgres 15 - MVCC безальтернативно.  

Задача понять – будет ли у Postgres сравнимая с MS SQL производительность при средней нагрузке и как они загружают ресурсы сервера, хотя для кого-то и 50 фоновых заданий уже HighLoad.

Жесткий бескомпромиссный тюнинг, асинхронный commit, нагрузка с двух серверов приложений 1С это тема отдельной статьи – поверьте даже при средней нагрузке уже видны проблемы, которые возникнут при HighLoad с двух серверов приложений 1С

 Почему я не делаю эмуляцию работы пользователей, а только запись из ORM 1С?

Все очень просто – с чтением любая из поддерживаемых 1С СУБД может справиться за счет внутренних механизмов СУБД и оптимизации запросов в 1С Лучшее соединение враг хорошего? / Хабр (habr.com), а при наличии проблем с нагруженностью оборудования это решается через репликацию. Тут много вариантов приспособиться.

А вот с записью, которая в 1С делается через неделимые методы .Записать() да еще создает мелкие DML операции (т.е. DML на одну сущность, а не на несколько сразу) вариантов оптимизации на уровне 1С нет. Все что можно сделать - это оптимизация на уровне СУБД .

Именно операция записи в СУБД определяет границы возможного для 1С, поскольку распределить кластер 1С на несколько серверов приложений можно, как угодно, а настроить работу несколько Instance с разных серверов, на одну СУБД это другой уровень.

Полноценно  распределить работу СУБД на несколько серверов (со всеми DML операциями), можно только решениями типа Oracle RAC или IBM DB2 Purescale.  Для Postgres в Pro варианте нет, но судя по маркетингу, есть сторонние платные, например Replication (enterprisedb.com), и как это работает в реальности нужно проверять .

Если Вы планируете массовые перепроведения документов, или работу большого количества пользователей - производительность на запись будет критичной. Горизонтальное маштабирование как метод увеличение производительности тоже создает большую нагрузку на запись Язык мой – враг мой. Архитектору о будущем 1С | 1CUnlimited | Дзен (dzen.ru) . В итоге если нагрузочный тест на запись проходит нормально, то можно на 99% быть уверенным что другие проблемы тем или иным способом решаемы в Вашем проекте. Стресс тест позволяет на цифрах оценить границы  для объемов обрабатываемой информации.

Комплексные тесты это ящик пандоры.  Они всегда подгоняются под какую-то архитектуру приложения. Например, типовые конфигурации 1С пишутся без учета горизонтального маштабирования – тем самым комплексный тест уже будет содержать неэффективность на уровне кода, и узкие места в архитектуре кода. С моей точки зрения только тесты на горизонтальном маштабировании показывают границы возможного.

Последняя установка на Windows, DATABASE не пригоден для использования

Кстати, тренд на отказ от Windows для работы Postgresql уже заявлен официально Самая знаменитая российская СУБД прекращает поддерживать Windows: Она больше не популярна : Компания Postgres Professional , так что торопитесь развернуть и протестировать\сравнить Ваши базы на Postgresql для Windows пока есть такая возможность и начинайте изучать Unix .

Я взял версию PostgreSQL 15.2 64bit  с сайта https://1c.postgres.ru – адаптированную для 1С. С https://releases.1c.ru не скачивал поскольку узнал о ней позднее. Для нагрузочного теста это достаточно, для рабочей эксплуатации и последующих обновлений лучше скачать с сайта 1С.

При инсталляции выбрал location не операционной системы, а “ru-Ru” что было ошибкой.  

Сначала 1С при создании пустой базы написал «DATABASE не пригоден для использования», а потом

«Ошибка установки или изменения национальных настроек информационной базы

Порядок сортировки не поддерживается базой данных по причине: Порядок сортировки не поддерживается базой данных»

Поиск по подобным дал понимание, что параметры

LC_COLLATE, LC_CTYPE PostgreSQL: Documentation: 15: 24.1. Locale Support

не соответствуют сущностям, которые отдает\принимает 1С при создании базы данных. Включение технологического журнала 1С показало, что 1С запрашивает show lc_collate, но как обрабатывает неизвестно.

Несмотря на то, что Locale в Windows на обоих серверах одинаковые Configure International Settings in Windows | Microsoft Learn что то шло не так. Я решил установить кодовые страницы явно

Для этого пришлось пересоздать кластер (не путать с переустановкой ) командой без явного указания locale (я знал, что на уровне ОС он верен)

initdb -D D:\db_s\postgresql -E UTF8 -U sa -W  -X D:\db_s\postgresql

поскольку через postgresql.conf эти два параметра установить нельзя. Файлы  pg_hba.conf pg_ident.conf postgresql.conf скопировал из сохраненного каталога кластера.

Теперь collation стал
выглядеть как Russian_Russia.1251 ,кодировка базы попрежнему UTF8 , и
создание базы прошло успешно.

Т.е. основной вывод – кодировки для lc_* параметров должны быть указаны явно и соответствовать locale серверов windows. У инсталлятора есть вариант «ru-Ru» и по параметрам ОС – нужно выбирать параметры locale  “по параметрам ОС”, убедившись, что они правильно выставлены (в моем случае Россия). На эту тему можно написать отдельную статью, но здесь это следствие устройства windows которая внутри работает с UTF-16 , выбор локали это по сути выбор других кодировок подробнее тут  Code Pages - Win32 apps | Microsoft Learn . Думаю с отходом от Windows это все будет уже неактуально.

Методика анализа проблем для Postgres после первой неудачной попытки

Первая попытка теста показала производительность в два раза ниже чем, на MS SQL . В таких случаях я использую следующий алгоритм анализа

  1. Какие ресурсы загружены\перегружены? Если процессор, диск или сеть показывают загрузку близкую к 80%-100% ищем сначала причину такого поведения. Недоступность ресурса сразу повлечет Waits на СУБД  , странные планы запросов т.е. это будет уже следствие

  2. Какие ресурсы\подсистемы провоцируют ожидания или находятся в ожидании? Классический пример, диск нагружен на 30%, а ожидания на запись для СУБД наличии. В предыдущих HighLoad тестах показано, как запись в лог может провоцировать общие ожидания на запись, хотя формально аппаратные ресурсы не нагружены .

  3. И только потом смотрим какие запросы \ DML создают большую нагрузку или \ и неоптимальны?

Т.е. спускаюсь на уровень запросов только тогда, когда понятны причины проблем в п 1) 2)  .

Методика позволяет выявлять истину даже на виртуальной среде, где виртуальные машины тайно душат производительность  1С + MS SQL против Матрицы виртуализации / Хабр (habr.com)

Но с Postgres такая методика плохо применима – нет в нем хороших кумулятивных счетчиков типа В MS SQL есть sys.dm_os_wait_stats в Oracle V$system_event . Для ожиданий в Postgres есть pg_stat_activity, но она в разрезе сессий и  запросов поэтому ее можно использовать только методом снимков , что не дает полной картины.  

Надеюсь мне подскажете хороший способ , а пока были только такие ответы https://qna.habr.com/q/1262384 . На  ИТС есть хорошая статья но она только подтверждает, что удобных способов нет Методика расследования проблем производительности на уровне работы СУБД PostgreSQL (Новый раздел!) :: Проблемы и решения :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 (1c.ru)

Архитектура Postgres c нужными представлениями хорошо показана тут

Параметры в PostgresSQL.conf я изначально скорректировал согласно рекомендациям 1С и основные уже были установлены инсталлятором (полный список по команде Show all) во вложении

Поставщик дистрибутива сразу устанавливает

# Add settings for extensions here

#Options for 1C:

escape_string_warning = off

standard_conforming_strings = off

shared_preload_libraries = 'online_analyze, plantuner, pg_stat_statements'

online_analyze.table_type = 'temporary'

online_analyze.verbose = 'off'

online_analyze.local_tracking = 'on'

plantuner.fix_empty_table = 'on' 

online_analyze.enable = on

lc_messages = 'en_US.utf-8'

Я проверил и скорректировал согласно статье Настройки PostgreSQL для работы с 1С:Предприятием. Часть 2 :: PostgreSQL :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 (1c.ru) только

Shared_buffers на 8 ГБ, и temp_bufffers на 32мб что достаточно для нагрузочного теста. Остальные оставил как в дистрибутиве, поскольку дальнейший тонкий тюнинг имеет смысл делать после теста на средних нагрузках

Анализ ресурсов средствами Windows показал, что SSD диск загружен на четверть от возможного по IOPS, с сетью все ОК, а вот загрузка процессора с 32 логическими процессорами под 100%! В windows хорошо смотреть ее через Process explorer.

На картинке видно, как устроены процессы Postgres, их создается примерно равное количеству потоков тестирования и если каждый грузит под 2% общая нагрузка будет 100%. На сервере субд 2 процессора с 16 ядрами, hyper threading создает 32 логических процессора т.е. загрузка одного логического процессора может быть не более чем 3.1%

Анализ  pg_stat_statements показал, что SELECT FASTTRUNCATE и ANALYZE pg_temp.tt* занимают 76% времени – неужели это они? Нет, это сервисные процедуры – не может быть так плохо.

Использовал запрос

--SELECT pg_stat_statements_reset(); --сброс счетчика
SELECT 
        pss.userid,
        pss.dbid,
        pd.datname as db_name,
        round((pss.total_exec_time + pss.total_plan_time)::numeric, 2) as total_time, 
        pss.calls, 
        round((pss.mean_exec_time+pss.mean_plan_time)::numeric, 2) as mean, 
        round((100 * (pss.total_exec_time + pss.total_plan_time) / sum((pss.total_exec_time + pss.total_plan_time)::numeric) OVER ())::numeric, 2) as cpu_portion_pctg,
        substr(pss.query, 1, 200) short_query
FROM pg_stat_statements pss, pg_database pd 
WHERE pd.oid=pss.dbid
ORDER BY (pss.total_exec_time + pss.total_plan_time)
DESC LIMIT 30;

Решил перейти в отладку и включить уровень лога Postgres через log_min_messages =  debug1 и тут заметил, что он стоит log_min_messages = error, но логи трассировки огромные т.е. в них пишется все !!! Это не соответствует документации пришлось переключить в panic.

Важно!!!  Убедитесь, что логи трассировки не пишут ничего лишнего, даже если параметры выставлены верно, видимо я наткнулся на какие-то ошибки релиза.

Пиррова победа Postgres?

Убедившись, что логгирование больше не пишет лишнего. Тест был запущен еще раз. Результаты по цифрам порадовали ~ 1500 ORM записей в секунду

Для сравнения у MS SQL на той же базе с теми же данными 1400. Разница 7% в пользу Postgres.

Однако у Postgres  результаты замеров оборудования, и расхода времени на операторы не порадовали - 40% процессорного времени.

Которые порождает postgresbackend

При этом Disk transfers (синий пунктир) не доходит до 10 тыс Iops. Очередей Current disk queue (коричневый) length можно сказать нет.

Таже самая база в тех же условиях, но на MS SQL  в среднем не доходит до 30% загрузки процессора

При этом со стороны MS SQL Disk transfers (синий пунктир) уже почти 10 тыс iops. Очереди Current disk queue (коричневый) length случаются.  Это конечно не говорит о плюсах MS SQL, просто другая архитектура

Что это означает?

Если я увеличу нагрузку со стороны кластера 1С  всего с двух серверов приложений мы с большой вероятностью получим, что  MS SQL имеет запас использования по производительности на CPU  на треть больше чем Postgres, который просто быстрее исчерпает ресурсы процессоров!!! Конечно, асинхронный коммит у обоих баз будет включен для избежаний wait на логе транзакций.

А может текущие 7%-10% выигрыша Postgres сравняют шансы (об этом ниже)? Или MS SQL на большой нагрузке упрется в Waits на SSD? Интрига, да?

Что делал Слон когда пришел наПолеОн? Разбор «удачного» запуска

Если посмотреть Trace средствами Postgres  (нюансы включения см выше)

Кратко что делает 1С

Как я это интерпретирую

BEGIN TRANSACTION

Начинаем транзакцию

SELECT

…  FROM _AccumRg16920 T1 …WHERE ((T1._Fld628 = CAST(0 AS NUMERIC))) AND (T1._RecorderTRef =

Чтение основной таблицы регистра РегистрНакопления.СУУ_КубПрибылейИУбытков (dbo._AccumRg16920) , даже если мы исполняем просто метод .Записать() в режиме замещения

SELECT …. FROM _AccumRgAggOptK21501 T1 … WHERE ((T1._Fld628 = CAST(0 AS NUMERIC))) AND (T1._RegID = …

Вызывается несколько раз с разными параметрами

Чтение таблицы опций   сети агреггатов РегистрНакопления.СУУ_КубПрибылейИУбытков ( dbo._AccumRgAggOpt18422). Зачем это делать каждый раз при записи?

DELETE FROM _AccumRg16920

                WHERE (_AccumRg16920._RecorderTRef … AND ((_AccumRg16920._LineNo >= CAST(1 AS NUMERIC) AND _AccumRg16920._LineNo < CAST(3 AS NUMERIC)))) AND (_AccumRg16920._Fld628 = CAST(0 AS NUMERIC))

Удаление предыдущего набора записей  из основной таблицы dbo._AccumRg16920

INSERT INTO _AccumRg16920

Вставка записи в основную таблицу регистра накопления РегистрНакопления.СУУ_КубПрибылейИУбытков. Один Insert на КАЖДУЮ запись регистра

COPY pg_temp.tt2…FROM STDIN BINARY

Вставка записи в таблицу pg_temp.tt2

INSERT INTO pg_temp.tt3 …SELECT

                date_trunc('month',T1._Period),

                T1._Fld17029RRef,

                T1._Fld16992RRef,

                T1._Fld16993RRef,….

FROM pg_temp.tt2 T1

                GROUP BY date_trunc('month',T1._Period),

                T1._Fld17029RRef,

 

Подсчет новых оборотов для последующего обновления.

 

ANALYZE pg_temp.tt3

Собирает статистику

UPDATE _AccumRgTn17037 SET….

FROM pg_temp.tt3 T2

                WHERE (T2._Period = _AccumRgTn17037._Period AND T2._Fld1702…

 

Обновляет таблицу оборотов . Странно почему не используются _AccumRgDl _AccumRgBf? Если агрегаты включены?

SELECT FASTTRUNCATE ('pg_temp.tt3')

Чистим

SELECT FASTTRUNCATE ('pg_temp.tt2')

Чистим

SELECT Creation,Modified,Attributes,DataSize,BinaryData FROM Params WHERE FileName = $1

Зачем то читаем параметры

COMMIT

 

Мы видим что при каждом!!! вызове метода .Записать() для регистра накопления 1С вызывается

"ANALYZE pg_temp.tt2" пересчет статистики по временной таблице 37% времени

"SELECT FASTTRUNCATE ($1)"  усечение временных таблиц 30% времени

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

У меня лично много вопросов как разработчикам  Postgres так и к 1С.

Неужели Postgres оптимизатор планов запросов не может нормально работать без статистики при правильно выставленных индексах?

Я точно знаю, что Oracle это может, а MS SQL с оговорками. Но в MS SQL это реализовано автоматически при включении флага трассировки 2731 для нужных объемов данных.   То что разработчики 1C в Postgres  делают при каждом вызове .Записать() ANALYZE pg_temp.tt* так себе решение , хотя оно чем то обосновано?

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

Судя по описанию его сделали специально для 1С https://postgrespro.ru/docs/postgrespro/15/fasttrun  это супер – значит 1С уважаемый клиент у разработчиков Postgres.  Но 30% времени? Я понимаю, что 1С слишком активно использует временные таблицы, но мы все понимаем для  декларативного языка временная таблица это всего лишь аналог переменной  (вспомните что такое реляционная алгебра и реляционное исчисление) в пакете запросов, поэтому и MS SQL и Oracle развивают функционал временных таблиц.

Как определить в Postgres на что тратится процессорное время если не брать сами запросы?

Из теста видно, что  Postgres загружает процессор на 35-40%, а MS SQL на 20-30% , это означает, что при большем Highload Postgres первым сойдет с дистанции. На что тратится эта разница? Я не нашел способа анализировать это, например включение логгирования приводит к 100% загрузке процессора, но из представлений pg_* это не видно.

Помогите Postgres выиграть у MS SQL

Формально тест средней нагрузки по импортозамещению для средней загрузки пройден с небольшим преимуществом Postgres. Но детальный разбор показывает, что увеличение нагрузки будет не в пользу Postgres, с большой вероятностью.  Если смотреть со стороны Oracle и MS SQL конкурирующая СУБД должна быть сопоставимой по возможностям и обязательно в каких-то областях лучше. Но разбор кода 1С показывает наличие уязвимого места. Я конечно не знаю всей магии в Postgres и интрига  сохраняется , но надеюсь мне подскажут как эти проблемы решить или скомпенсировать .До новых встреч на нашем телеграмм канале t.me/Chat1CUnlimited Выбора нет, только Postgres только вперед.

P.S. А пока регулярно делайте Image установок MS SQL , он еще может долго обеспечивать запас производительности без смены оборудования.

Комментарии (28)


  1. avacha
    00.00.0000 00:00
    -5

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


    1. 1CUnlimited Автор
      00.00.0000 00:00

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

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

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

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


      1. lizlizchuu
        00.00.0000 00:00
        +2

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


        1. 1CUnlimited Автор
          00.00.0000 00:00
          +1

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


          1. denilenko
            00.00.0000 00:00
            +1

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

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


            1. DMGarikk
              00.00.0000 00:00

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

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


          1. lizlizchuu
            00.00.0000 00:00
            -1

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

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

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

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

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


            1. DMGarikk
              00.00.0000 00:00
              +4

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

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


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

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


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

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


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

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


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

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


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

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


              1. lizlizchuu
                00.00.0000 00:00

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

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

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

                ну например человек реализовал оценку состояния коров в стаде по установленной над входом в загон камере видеонаблюдения. конечно на самом деле там довольно простой пайплайн - помимо очевидного - собрать видеопоток, выполнить детекцию движения, смапить шкуру отдельно взятой коровы на плоскость, прочитать написанный на ней штрихкод, оценить состояние этой шкуры, оценить движения животного, оценить дыхание, скорость шагов там, взаимодействия отдельной особи с другими, скорость реакции там, и т.д. - потом проанализировать это во времени и выдавать данные - "а вот эта сегодня себя иначе ведёт, может беременна, может заболела, а может овода покусали и нужно срочно шкуру обработать", и т.д. потом управление калиткой - чтобы корова пошла либо в общий загон, либо в специальный профилактический. дальше - маркеры с 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. DMGarikk
                  00.00.0000 00:00

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

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


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

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


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

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


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

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

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


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

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


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


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

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


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

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

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


        1. DMGarikk
          00.00.0000 00:00

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

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


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


    1. Kenoby
      00.00.0000 00:00

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


      1. avacha
        00.00.0000 00:00

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

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

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

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


        1. 1CUnlimited Автор
          00.00.0000 00:00

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

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

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

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

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

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



  1. GilevVyacheslav
    00.00.0000 00:00
    +1

    а у вас случаем многопоточная обработка запросов не включена, а то если да то выключите
    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; -- поднять стоимость процессорного ресурса


    1. 1CUnlimited Автор
      00.00.0000 00:00
      +1

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

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

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

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

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


      1. GilevVyacheslav
        00.00.0000 00:00
        +1

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


        1. 1CUnlimited Автор
          00.00.0000 00:00

          Вячеслав - попробовал эти параметры, они никак не повлияли (кластер 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

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


          1. GilevVyacheslav
            00.00.0000 00:00

            активность снаружи в 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';

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


            1. 1CUnlimited Автор
              00.00.0000 00:00

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

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

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


      1. nikweter
        00.00.0000 00:00

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


        1. 1CUnlimited Автор
          00.00.0000 00:00

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

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


  1. zaki
    00.00.0000 00:00

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


    1. nikweter
      00.00.0000 00:00

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


  1. unnforgiven
    00.00.0000 00:00

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


    1. 1CUnlimited Автор
      00.00.0000 00:00

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

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

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


    1. zaki
      00.00.0000 00:00

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