Меня зовут Антон Дорошкевич, я – руководитель ИТ в компании «Инфософт», в Новосибирске. Я являюсь сертифицированным экспертом по эксплуатации PostgreSQL. Уровень сертификата «Эксперт».
В течение последних 15-ти лет я являюсь эксплуататором больших многокластерных систем на тысячи пользователей и сотни баз – что на MS SQL, что на PostgreSQL. К сожалению, никогда не работал с Oracle и IBM DB2 в 1С, только пробовал в качестве теста что 1С запускается.
Сегодня хотел бы обсудить, почему PostgreSQL не лучше MS SQL. Когда у нас появляется выбор – какую базу данных использовать, правильный ответ эксперта, а не менеджера по продажам: «ту, которую знаете». Надо понимать - ни одна база данных никаких чудес не даст, а вот если за ней не ухаживать - всё будет плохо.
MS SQL vs PostgreSQL
Чтобы понять разницу между MS SQL и PostgreSQL в мире 1С, предлагаю сравнить их как мужа и любовника. В качестве жены и любовницы у нас выступает - 1С.
-
Итак, MS SQL – это муж, у них с 1С 20 лет счастливой жизни вместе.
-
PostgreSQL – молодой любовник, с 1С у них только 5 лет флирта.
-
К MS SQL в мире 1С все привыкли, он удобный. Microsoft всегда работает над интерфейсом, их интерфейсы – одни из самых лучших в мире.
-
PostgreSQL – непривычный, я специально не говорю «неудобный», потому что удобство – дело привычки. Мы привыкли, что у нас в MS SQL есть Microsoft SQL Management Studio – это классная штука, но вы туда за все время существования базы заходите один раз - для настройки СУБД, и иногда, когда возникают какие-то проблемы ну и конечно для работы с резервными копиями вручную. У PostgreSQL тоже есть– PG Admin, заходите и смотрите. Только что там на дашборды смотреть, не очень понятно. Можно открыть монитор активности, будут рисоваться красивые графики как в MS SQL, но зачем на них смотреть – не очень понятно. А когда проблемы или опять же нужно снять бэкап или восстановить тогда – да, пригодится.
-
Поскольку MS SQL удобный, привычный - с ним не страшно. Кажется: поставим MS SQL, и все будет работать.
-
PostgreSQL, наоборот, во многих внушает страх. С ним всё непонятно, все настройки в текстовом файле, белые буквы на черном фоне в Linux, командные строки, скрипты. Согласен, страшно, но как и все новое – так же страшно было переходить с 1С 7.7, переходить на управляемые формы, было страшно начинать использовать для обменов web-сервисы, было страшно работать с HTTP-сервисами в 1С и т.д. Все новое немного страшно.
-
MS SQL как опытный муж прощает 1С многое. У него продвинутый планировщик запросов, это почти искусственный интеллект. Он превращает запросы, которые ему отправляет платформа, в удобоваримые запросы для СУБД, и делает это лучше, чем PostgreSQL. Программист 1С может не очень обращать внимание на оптимальность своего запроса, MS SQL подправит запрос, и он будет работать оптимально в большинстве случаев. Конечно когда речь идёт о больших базах там уже и планировщик MS SQL не всегда способен построить оптимальный план по неоптимальному с точки зрения СУБД запросу.
-
PostgreSQL как молодой любовник - таких шалостей с собой не прощает. Он требователен к качеству кода, структуре данных: нужно следить за тем, как организованы данные и писать хорошие запросы. Но если у вас под PostgreSQL запрос работает быстро, то под MS SQL он тоже будет работать быстро.
-
MS SQL как муж избалован вниманием – он привык, что ему уделяют внимание. Считается нормальным, что надо зайти, поиграть с параллелизмом, ограничить память, поиграться с tempDB – выбрать количество файлов для tempDB, что-то убрать на RAM-диск, с размещением баз на одном диске разобраться… Разместить файл транзакций на другом диске, tempDB – на третьем диске... Настроить регламентные операции, реиндексацию, обновление статистики, сброс процедурного кэша, бэкапы. Но почему-то считается, что это не настройка а просто надо и всё.
-
Зато считается, что PostgreSQL настраивать гораздо сложнее. Но ведь на PostgreSQL – все то же самое, настраиваем всего четыре параметра. Да, на заре Postgres надо было настраивать очень серьезно, но сейчас этого не требуется. Все производители заботятся о том, чтобы вам как можно быстрее удалось стартовать на СУБД, через «Далее-далее-готово». Более того с сентября 2020 года сборки PostgreSQL для 1С от PostgresPRO настраиваются автоматически при установке и атм остаётся указать всего пару параметров.
-
Еще один немаловажный момент: MS SQL – обжора в смысле ресурсов. Все знают: сколько ему ни дай памяти и ядер – все сожрет и займет.
-
В отличие от него PostgreSQL сидит на диете. Конечно, любой базе данных нужна оперативка, и чем ее больше – тем лучше. Это не значит, что если MS SQL у вас работал на сервере с 1 Тб оперативной памяти, то PostgreSQL должен делать ту же работу на 4 Гб памяти. В отличии от MS SQL - PostgreSQL постоянно отдаёт неиспользуемую память обратно операционной системе, из-за этого требование к количеству оперативной памяти ниже.
-
Еще один момент при работе с памятью – размещение временных таблиц. PostgreSQL по умолчанию размещает их на оперативке в том объеме, в котором вы их настроили. Только если этот объем по предположению планировщика или по факту заполнения данными временной таблице становится выше указанного в настройках , то тогда файлы будут работать на диске, а не в оперативке.
-
MS SQL (до версии 2019) всегда размещает файлы временных таблиц в таблице tempDB. И оттуда начинаются танцы с бубнами: размещаем tempDB в RAM-дисках, обманываем систему, чтобы она работала быстрее.
Это о том, как развивались отношения 1С и СУБД.
Теперь давайте сравним версии MS SQL и PostgreSQL, которые имеет смысл сравнивать.
Бесплатный MS SQL vs бесплатный PostgreSQL
Нельзя сравнивать платный MS SQL – Standard и Enterprise – с бесплатным PostgreSQL, это не совсем корректное сравнение. Нельзя ожидать от бесплатного ПО такой же скорости, как и от платного, причем неслабо платного.
Давайте сравним бесплатную версию MS SQL Express и бесплатные версии PostgreSQL.
Бесплатные версии Postgres – это:
-
Самосборки, когда вы с сайта postgresql.org скачали исходники, добавили туда патчи для 1С и собрали свою сборку. Она бесплатна, пожалуйста, пользуйтесь.
-
То же самое можно сделать, скачав сборку, которую собрали специалисты фирмы «1С» с сайта – releases.1с.ru. Эта сборка будет отличаться от вашей самосборки тем, что она после сборки протестирована фирмой 1С.
-
Есть еще третий вариант – сайт 1с.postgres.ru. Это сборка от компании Postgres Professional – эта команда работает со своими серверами сборки, и они делают бесплатную версию для 1С. где в ванильную сборку добавляют несколько своих патчей, которые считают нужным. На то какие патчи они добавят, а какие – нет, мы с вами повлиять не можем. Но на моей практике сборка с 1с.postgres.ru работает намного стабильнее. Кто имеет доступ на партнерские форумы 1С, там есть несколько обращений, когда у людей сбоили самосборки или сборки с releases, при этом ставим сборки с 1с.postgres.ru с той же версией Postgres, и все отлично работает. Поэтому я бы советовал ставить отсюда.
Теперь давайте сравним бесплатные версии MS SQL Express и Postgres. Какие ограничения они накладывают:
-
На количество ядер.
-
MS SQL Express в последней поддерживаемой 1С 17 версии, позволяет использовать только 4 ядра.
-
бесплатный Postgres – безлимитное количество ядер.
-
-
То же самое по памяти.
-
MS SQL Express может использовать 1,5 Гб памяти и все.
-
Postgres – безлимитно.
-
-
Объем базы:
-
MS SQL Express – 10 Гб,
-
у Postgres – безлимитно.
-
-
Отказоустойчивость:
-
в MS SQL Express не поддерживается вообще.
-
В Postgres доступны логические и физические репликации любого уровня каскадирования. Вы можете одновременно делать с мастера десятки реплик. Или сделать реплику с мастера, а с реплики – еще одну (иногда это имеет смысл). Бесплатный Postgres позволит снимать бэкапы с реплики, не трогая этими задачами мастер.
-
Есть несколько важных моментов:
-
бэкап у MS SQL консистентен на момент окончания бэкапа, а бэкап Postgres’a (dump) консистентен на момент начала бэкапа.
-
Если вы сливаете этот dumpс мастера Postgres (с главного сервера), то в момент этого бэкапа вы не сможете произвести структурные изменения в 1С, так как они содержат в себе команды drop для таблиц либо удаления столбцов. Postgres не позволит изменить структуру данных в части удаления, пока он снимает dump. Этот момент нужно учитывать при проектировании системы.
-
-
-
Регламентные операции плюс бэкапы
-
На MS SQL Express регламенты можно делать только скриптами и cron. Нет там планировщика (агента SQL Server), его там не существует. Вы не сможете внутри SQL создать никаких расписаний или операций. Надо будет батнички нарисовать, засунуть это либо в cron, либо в планировщик Windows.
-
То же самое на Postgres, все регламентные операции, бэкапы и восстановления из бэкапов – это скрипты, cron или планировщик Windows, смотря в какой системе вы это делаете.
-
-
Ещё момент – бесплатные версии обоих продуктов не входят в список импортозамещающих продуктов. Компаниям госсектора эти базы данных запрещены в использовании вообще, не только в 1С.
-
Также на бесплатном Postgres и бесплатном MS SQL нет ФСТЭКа. Никто не получает сертификаты ФСТЭК на эти продукты. Забегая вперед, скажу, что и в платном MS SQL ФСТЭКа нет.
С бесплатными версиями все более менее понятно, поехали в платные версии.
Платные версии MS SQL и PostgreSQL
Для многих стало неожиданностью, что Postgres стал платным и начал себя ценить. На слайде приведены цифры из открытого источника – из прайса фирмы «1С», скачивайте и сравнивайте, вдруг я где-то ошибся.
Давайте сравним, во сколько обойдется покупка MS SQL Enterprise сервера и Postgres Pro Enterprise сервера на 16 ядер. Мы видим, что:
-
лицензия MS SQL Enterprise – почти 6 млн.
-
лицензия на Postgres Pro Enterprise – 1,5 млн.
Postgres Pro Enterprise – это форк от компании Postgres Professional, который предназначен для работы на очень больших инсталляциях и тысячах пользователей.
Postgres Pro Enterprise не быстрее бесплатного Postgres, если в базу с бесплатной версией зашел один человек, и отчет формируется 1,5 часа, то и в Postgres Pro Enterprise он тоже будет формироваться 1,5 часа.
Да, Postgres Pro Enterprise имеет некоторые улучшения планировщика запросов для очень специфичных ситуаций, рожденных именно в 1С. Все остальные ситуации, характерные не для 1С, уже давно решены в ванильном Postgres, там проблем не бывает. Но поскольку у нас только в одной базе может быть 7 тысяч таблиц, 30 тысяч индексов, а еще мы любим, когда на один сервер приходится по 100 баз – в Postgres Pro Enterprise сделано несколько оптимизаций специально для таких случаев.
Остальные преимущества Postgres Pro Enterprise – это многопоточность и многопользовательность. А так же он может сжимать данные в 5-8 раз, и скорость многопоточной работы также возрастает.
Но я бы более корректно сравнил Postgres Pro Enterprise с MS SQL Standard. По набору функциональности MS SQL Standard аналогичен Postgres Pro Enterprise. Умеет делать такие же репликации, не имеет ограничений на ядра и на память… Если сравнивать так – цена почти одинаковая, 1,5 млн.
Есть еще Postgres Pro Standard. Эта сборка не Postgres Pro Enterprise, но уже и не бесплатная. Она не имеет нескольких функций, которые есть у Postgres Pro Enterprise, например, сжатие и PTRACK для pg_probackup. Но ценовая политика Postgres Pro такая, что для 1С Postgres Pro Standard дороже чем Postgres Pro Enterprise. Поэтому, если покупать, то покупать именно Postgres Pro Enterprise.
Теперь давайте посчитаем стоимость лицензий клиент+сервер на 50 пользователей.
С лицензированием на пользовательские места для MS SQL в прайсе 1С только одна позиция – это MS SQL Server Runtime, на нем можно запускать только 1С.
Стоимость клиентских лицензий и отдельного сервера для MS SQL Server Runtime и Postgres Pro Enterprise одинаковая: разница в 3-4 тысячи.
С ценами и возможностями бесплатных версий разобрались, теперь давайте пойдем дальше.
В моем понимании вот такая картинка символизирует мысли тех, кто находится на перепутье: идти ли на Postgres. Кажется, что с MS SQL все понятно, есть только маленькая кучка проблем, но мы знаем, как их решать. При этом с Postgres – кошмар, мы это никогда не разгребем.
Но это не так. На больших инсталляциях проблемы есть везде – и с MS SQL , и с PostgreSQL. Даже с платформой 1С у нас бывают проблемы, хотя, казалось бы, идеальный продукт ))).
Поэтому хочу немного развеять такое понимание проблем о возможных проблемах с СУБД. Начну с самого простого – с установки.
Установка MS SQL и PostgreSQL
Давайте сравним установку PostgreSQL и MS SQL Server на Windows.
-
Чтобы поставить MS SQL-сервер, надо скачать 2,5 Гб с интернета.
-
При этом дистрибутив Postgres для Windows – 70 Мб.
-
В процессе инсталляции для MS SQL Server, нам надо сделать 12 кликов и пройти два окна настройки параметров, где мы сразу можем настроить: количество и расположение файлов для tempDB, а также расположение базы данных и лога транзакций. Время инсталляции SQL-сервера с учетом скачивания дистрибутивов – 4 часа.
-
«Виндовый» Postgres настраивается в 5 кликов (там всего одно окно настройки), почти все параметры проходят автонастройку, опираясь на параметры вашего компьютера. Я сейчас говорю про дистрибутив от компании Postgres Pro (и платный, и бесплатный настраиваются одинаково). Время инсталляции – 5 минут. Если надо разнести файлы базы, WAL и временных файлов то тогда ещё три строчки в конфигурационном файле.
Дальше давайте теперь сравним установку на Linux. В данном случае будут рассматривать CentOS.
-
Установка MS SQL-сервера на CentOS представляет собой 5 страниц инструкций с сайта Microsoft. Время инсталляции – час. В этот час будет скачиваться неслабый дистрибутив, и потом его нужно будет установить и настроить в командной строке. Время настройки – 15 минут.
-
Для самого MS SQL Server в CentOS нужно будет настроить хотя бы два параметра: это параллелизм и количество потребляемой оперативной памяти.
-
Нужно будет настроить хотя бы три параметра самой базы: как у вас база будет прирастать, какой у вас будет изначальный объем файлов базы данных и журналов транзакций, установить уровень журналирования.
-
Плюс к этому нужно будет настроить минимум две регламентных операций ухаживания за базой – реиндексация и апдейт статистики.
-
-
Устанавливая на CentOS Postgres вам придет письмо с кодом в 12 строчек. Копируете, вставляете, и через 5 минут у вас есть запущенный и готовый Postgres. Для настройки Postgres в Windows и в CentOS вам нужно провести всего четыре настройки параметров сервера СУБД и задать две регламентные операции в cron. На это уйдет максимум 15 минут.
Все эти цифры по поводу настройки и установки пока не в пользу MS SQL.
Я свято уверен, что после настройки и установки в СУБД потом постоянно что-то крутить в настройках СУБД не нужно. Анализ проблем лучше делать в технологическом журнале 1С. Техжурнал 1С покажет более полную комплексную информацию, которая будет содержать не только «тормоза» СУБД, но и «тормоза» самого движка платформы, что часто занимает гораздо более длительное время в исполнении запросов чем время, которое тратит на этот запрос СУБД. И только когда вы нашли проблему, код 1С кажется идеальным а СУБД ведёт себя странно, вот тогда уже нужно идти и смотреть планы запросов, делать выводы и может быть менять настройки, хотя лучше всё таки поменять код 1С, так как улучшив одну операцию изменением настроек СУБД можно очень легко “положить” всю систему.
Кому надо переходить на Postgres
И теперь, наверное, самое важное: кому точно надо переходить на Postgres?
-
Если у вас проходит новая инсталляция продуктовой системы. Если вы ставите новую систему, я бы рекомендовал перейти хотя бы на бесплатный Postgres. Рекомендую сразу это делать на Linux. Можно и на Windows, но тут проблема не столько в том, что Postgres плохой или Windows плохой – плохо работает их связка в части файловой системы. Опять же из-за наших структур баз данных, где у нас по 30 тыс. элементов в одной таблице (7 тыс. таблиц, 25 тыс. индексов). С таким количеством файлов винда работает плохо, а Postgres хранит каждый элемент системы в отдельном файле – более того, он эти файлы разбивает по 1 Гб, для каждого файла есть отдельные служебные файлы. И так на одну базу может получиться 100-300 тысяч файлов. Когда заходишь в папку, а там 300 тыс. файлов, можете оценить скорость этой работы. Linux же с этим работает прекрасно. Поэтому, если у вас новая инсталляция продукта, надо пробовать Postgres на Linux.
-
Разработчикам 1С. В идеале, на всех ваших ноутбуках и рабочих ПК должен стоять бесплатный Postgres. И вы в идеале должны разворачивать себе клиент-серверную систему 1С. Да, возникнут вопросы, что серверные ключи для 1С дорогие. Ну купите мини-сервер на пять пользователей за 15 тыс. рублей. Почему надо? Очень часто сталкиваемся с тем, что разрабатываете вы для клиент-серверной системы. а разработка идет в файловой системе. А потом начинается… Так что разрабатывать надо на такой же системе, в которой планируете работать.
-
Если вы делаете переход с файловой. До этого мы обсуждали, что переходить на бесплатный Express бессмысленно, поскольку у вас база не влезет. Если вы разрабатываете базу с объемом в 100 Гб, и вам нужны данные для разработки, то переход на Express бессмысленен. На Postgres переходите и работаете – в том числе и на бесплатный.
-
Если вы работаете под Минкомсвязью, вам нужно брать ПО только из реестра Минкомсвязи – вам переход на PostgreSQL, причем только платный Postgres Pro. Других вариантов нет.
-
Причина, по которой в свое время моя команда перешла на Postgres – потому что я был смелый и любознательный патриот. Мы решили попробовать, реально ли наши умеют писать СУБД. Оказалось, умеют и круто. Более того, работать с техподдержкой Postgres Pro – одно удовольствие. Все люди говорят на русском, работают круглосуточно, подключаются быстро. Я такой техподдержки до сих пор ни у кого не видел. Кто хоть раз писал на v8@1c.ru знают, какой может быть техподдержка на русском языке. А это прямо небо и земля.
Но обычно у тех, кому надо переходить на PostgreSQL, у тех и не особо болит после перехода. А кому на Postgres не надо, но они переходят – те потом начинают говорить, что ничего не работает. Ну да, если ты не готов, то, наверное, и не работает.
Кому не надо переходить на Postgres
Итак, кому на Postgres переходить точно не нужно:
-
Первая причина – если вам сильно страшно. Если сильно боитесь Linux, текстовых конфигурационных файлов, а не не галочек и параметров в визуальной части как у MS Management Studio, вы сильно не готовы тратить на это хоть какое-то время, даже 2-3 дня – не надо. Тут работает принцип – лучше та СУБД, которую вы знаете. Знаете другую СУБД – не надо.
-
Второй момент – у вас есть лицензионный MS SQL, он работает и вы не собираетесь разворачивать новый продукт СУБД для новых инсталляций баз. Тут работает другой принцип: работает – не трогай. Не ожидайте, что после перехода с MS на Postgres будет взрывной рост производительности обе СУБД сейчас почти сравнялись по скорости в работе с 1С и показывают результаты +-10% на разных запросах. Начитаетесь вредных советов по настройке Postgres и примените все подряд, не разбираясь, зачем вы это сделали, а просто потому, что какому-то чуваку это помогло победить один отчет, а он просто не в курсе, что у него легла остальная система.
В общем, если страшно или все работает, спокойно работайте на MS SQL.
Что Postgres Pro ждет от 1С-ников
Есть еще один очень важный момент – что сообщество PostgreSQL ждет от 1С-ников? Тут все очень просто – дайте им свои базы данных, зашифруйте или удалите секретные данные.
Если вы поставили Postgres (пусть даже на тестовую среду, сразу на прод – не стоит рисковать), и у вас начались проблемы – звоните в Postgres Pro, пишите мне в FB или на почту, будем решать эти проблемы. Но если вы не готовы предоставить данные, решить проблему по фотографии кофейной гущи – сложно.
Основная проблема того, что Postgres иногда работает не так идеально, как хотелось бы, состоит в том, что разработчики Postgres не знают об этой проблеме, им нужно дать инфу.
-
Эта информация должна быть структурирована – должна быть описана воспроизводимая ситуация, в которой возникла проблема, и данные для ее воспроизведения.
-
В идеале, проблема должна воспроизводиться на тестовом контуре, а не когда в 1С зашло 1000 пользователей.
-
Проблема Postgres считается проблемой только тогда, когда на этом же железе установленный MS SQL справляется гораздо лучше. Если у вас тормозит и на MS SQL, и на Postgres – проблема, скорее всего, в коде 1С. Или виноват бизнес-процесс, который вы ведете в 1С неоптимальным образом. Иногда и бизнес должен подвинуться и пересмотреть свои бизнес-процессы, если он хочет, чтобы работало быстрее. Постоянно двигать только айтишников тяжело, дорого и не всегда эффективно – не все можно решить кодом и новым железом.
Вопросы
Насколько полезна сертификация на Postgres, что она дает?
Сертификация очень полезна, дает почти то же самое, что сертификация на 1С:Эксперта в фирме «1С». Вы вроде и так все знаете без сертификатов, но ваш путь поиска проблем, когда они возникнут, очень долгий, поскольку он неправильный, он идет не так. А тут учат именно структурированию – как правильно искать, что где искать, как пользоваться инструментами, которые дают гораздо более быстрый результат, чем те, к которым вы привыкли. Поэтому крайне полезно. Фактически, это некий чек-лист и список инструментов, который можно использовать. При том, что подготовка к сертификации – это просмотр бесплатных видео, которые у них на сайте лежат. Просматривайте видео, выполняете задания, которые там даны, и вперед на сертификацию.
Дает ли возможность 1С перенести базу с MS SQL на PostgreSQL?
Конечно, выгружаем в dt-ник и загружаем. Если база очень большая, нужно просто посмотреть, что там лежит. Я не удивлюсь, что это вложенные файлы - уберите их из БД на дисковые тома Есть ещё лайфхак – почистите итоги перед переносом в dt-ник (truncate таблиц итогов на СУБД - делать только если точно понимаешь что делаешь). А после того, как вы загрузили в dt-ник, посчитайте их заново. Заодно порядок в итогах наведете. Тем более, что в платформе 8.3.18 включили многопоточный расчет итогов.
*************
Данная статья написана по итогам доклада (видео), прочитанного на онлайн-митапе "PostgreSQL VS Microsoft SQL".
Приглашаем на конференции Инфостарта 2025 годаINFOSTART TEAMLEAD EVENT
Не только для разработчиков, но и для руководителей отделов разработки, тимлидов и ИТ-директоров. INFOSTART A&PM EVENT (Анализ & Управление проектами)
Практическая конференция для аналитиков и руководителей проектов 1С. |