Давайте признаемся честно, хоть 1С Предприятие и совместимо со многими СУБД, но по факту 99 процентов работают либо в MS SQL или в бесплатной PostgreSQL.
Другими словами эти две «субдешки» завоевали рынок клиент-серверной 1С.
И можно смело предполагать, что если компания не работает в MS SQL то, скорее всего, просто используют PostgreSQL.
Соответственно сравнивать «Постгрес» есть смысл разве что только с MS SQL.
Сегодня много пишут, как об MS SQL так и о PostgreSQL, но обычно объективно не сравнивают их.
В этой статье мы же разберем основные технические моменты бесплатной PostgreSQL, сравнивая ее c MS SQL.
Конечно, данная тема также подымается и на курсе: Администратор 1С!
Что позволит Вам в будущем сделать оптимальный выбор и быть готовым к разным «неожиданностям» или что будет более правильно «особенностям» работы в этой бесплатной СУБД.
Оценивать будем все как есть, не приплюсовуя Постгресу тех заслуг, которых у него нет и, не приукрашивая платный MS.
Сразу отвечу на вопрос, который волнует многих новичков!
ДА! MS SQL работает быстрее PostgreSQL, это факт! И на это есть ряд причин!
Возможно, я кого-то прямо сразу разочаровал, и возможно, Вы не согласны с таким утверждением, извиняюсь, но сама физика работы этой бесплатной СУБД не позволяет ему опередить MS SQL, особенно если мы говорим о такой связке как «Монстр 1С» и PostgreSQL.
Подобные доводы Вы не раз встретите на различных конференциях и семинарах посвященных этой СУБД. Никто ничего не скрывает и не отрицает, факт есть факт.
Тем не менее, производительности PostgreSQL вполне достаточно, для того, чтоб пользователи могли комфортно работать в 1С.
Будь это десяток пользователей или даже несколько сотен, одновременно работающих в 1С Предприятии.
Почему «Монстр 1С» ?
Собственно так 1С видит PostgreSQL без установленных специальных «патчей» и расширений.
Да, что называется из коробки, скачав дистрибутив PostgreSQL на оф. сайте Вы не сможете использовать его для работы в связке с 1С. 1С-ка будет жутко тормозить и просто останавливаться, отказываться работать.
Почему так происходит, и зачем «патчи»?
Дело в том что 1С Предприятие создает огромное количество временных таблиц в процессе своей работы, речь может идти о тысячах таблиц в секунду, а если взять, например регистр «Срез последних» – «ОстаткиИОбороты», там вполне могут и по миллиону строк быть.
Дело в том что по умолчанию (без «патчей») PostgreSQL не считает статистику по этим большим временным таблицам, другими словами оптимизатор запросов который руководствуется данными из статистики (а она как помним пуста, нечего считать) грубо говоря, делает выборку методом SELECT * что конечно будет работать очень и очень медленно!
Отсюда грандиозные тормоза в 1С!
Конечно это не все проблемы, которые нужно решить, чтоб PostgreSQL работал в паре с 1С нормально. Нужны будут и другие «патчи» и специальные расширения и после 15-20 пользователей, еще и доп. настройки в “конфиге”
Да, на самом деле в реалии все выглядит намного сложнее, чем я описал выше, но вот так если сильно упростить и будет выглядеть основная проблема медленной работы 1С с PostgreSQL.
Второе что мне сильно не нравится в PostgreSQL это отсутствие многопоточности в рамках одного запроса в сравнении с MS SQL.
(Начиная с версии 9.6 сделали первую попытку распараллеливания запросов, но пока работает плохо, иногда эффект обратный ). но за попытку 5! )
Что конечно влияет на производительность, чтоб Вы понимали простым языком –
PostgreSQL способен уложить Ваш 48-ми ядерный сервер, одним большим запросом!
Все просто, распараллеливания потоков в рамках одного запроса нет и один большой запрос «грузит» только одно ядро.
Да, если запросов много, тогда все ядра будут нагружены, и все будет работать хорошо.
И чуть не забыл, сравниваем мы PostgreSQL c MS SQL Standard не Express!
Express хоть и можно использовать в коммерческих целях, но целый ряд ограничений
таких как 10 Гб на базу, использование одного процесора, 1 Гб оперативной памяти,
делает использование такого продукта почти нереальным для работы в 1С Предприятии.
Разве что у вас очень маленькая база и всего пара пользователей, (да и то бывают тормоза 1 гб для СУБД очень мало).
Так что сравниваем PostgreSQL с популярной версией Standard.
СКРИПТЫ!!!
PostgreSQL это прежде всего скрипты в сравнении с MS SQL, большинство операций приходится делать руками, да можно установить конечно pgAdmin 4 и некоторые базовые вещи выполнять через интерфейс, но подчеркну, что базовые, а шаг влево шаг вправо и нужно писать скрипт, или БАШ на Линуксе или cmd, powershell наWindows.
Просмотр и анализ трассировок с помощью приложения SQL Server Profiler.
Всем известный SQL Server Profiler в PostgreSQL отсутствует, причем под словом «отсутствует» я имею, введу напрочь, увы, нет ничего подобного в PostgreSQL.
Есть, конечно, утилиты, которые позволяют, если успеть перехватить запрос или поставить точку останова 1С в отладчике и что-то получит и посмотреть, но в сравнении с Профайлером как говорится и близко не стояло.
Можно настроить лог и потом это все перебирать – но долго!
Вот пример:
Программист 1С пытается отладить какой-нибудь большой запрос, он долго выполняется, например 30 минут, так вот в PostgreSQL, чтоб данные попали в лог, этот запрос должен выполнится! Представляете, как долго можно отлаживать такой запрос?
В то время как в MS SQL можно прервать выполнение запроса и в Профайлере его разобрать, так как он там уже будет, но со статусом «failed».
По разновидности создания «бэкапов» Постгресу нет равных!
Здесь Вам и инкрементный «бекап» и полное резервное копирование и непрерывное WAL архивирование.
Как собственно есть и частичное резервное копирование и частичное восстановление данных.
Можно настроить непрерывное архивирование и восстановление на момент времени (Point-in-Time Recovery (PITR)).
Также репликация, доступна изначально в PostgreSQl без каких либо «патчей» утилит и дополнений!
- Каскадная репликация
- Потоковая репликация
- Синхронная репликация
- Непрерывное архивирование на резервном сервере
Все это есть, уже изначально в PostgreSQl и конечно нет в «экспрессе» и недоступно на версии MS SQL Standard.
Чтоб получить все выше перечисленное в MS SQL, нужно покупать очень дорогой MS SQL Enterprise, сейчас что-то около 15 000$ долларов.
Чего нет в сравнении с MS SQL ?
НЕТ диференциального «бэкапа»
Да в PostgreSQl нет дифференциального «бэкапа», но есть различные аналоги инкрементного создания «бэкапов».
Например, инкрементный «бэкап» на уровне блоков.
ЕСТЬ разделение TABLESPACE-ов, что уже по умолчанию поддерживает 1С!
Которого к слову нет в MS SQL!
Например, Вы можете настроить на каком диске у вас будут «индексы» и на каком диске будет находиться «таблица», очень удобно при планировании IТ инфраструктуры, когда речь идет о больших базах данных 1С.
PostgreSQl намного быстрее обновляет статистику (если точнее – считает ее):
Например тот же MS SQL в терабайтной базе может считать статистку час, а вот PostgreSQL минуты 2-3. )
Внимание!
MS SQL в «бэкап» помещает уже посчитанную статистику, чего не делает PostgreSQL!
И когда Вы восстановитесь из такого «бэкапа» будут тормоза, пока не сделаете ONLINE_ANALYZE, чтоб пересчитать статистику. Тоже самое касается файла *dt.
Выгрузили – загрузили, нужно считать статистику ONLINE_ANALYZE!
Используя PostgreSQl очень редко нужен REINDEX!
Фактически стоит использовать только когда, есть подозрения, что целостность базы данных повреждена.
Можно делать «бэкапы» с исключением таблиц!
Например, у вас в компании работают несколько программистов 1С, они гарантированно будут делать себе резервные копии создавать «бэкапы» для дальнейшей разработки.
В итоге страдают пользователи, база тормозит во время создания большого «бэкапа» особенно если в этой базе есть такие вещи как различные прикрепленные файлы, архивы, документы из писем. Такие таблицы с файлами запросто могут содержать сотни гигабайт. И их же можно исключить в PostgreSQl создавая «бэкап», тем самым малого размера, и со всем функционалом одновременно.
Так мы лишний раз не нагружаем сетевые устройства, не забиваем канал, тратим намного меньше времени на создание такого «бэкапа»
В итоге все в выигрыше! И пользователи, и программисты и админы спят спокойно.
В этой статье мы разобрали лишь базовые отличия PostgreSQl от MS SQL, (есть и другие) но определится с выбором в пользу той или иной СУБД, статья должна помочь!
Успехов Коллега!
P.S. Сейчас работаю над новым курсом “1С и PostgreSQL” (Уже на стадии записи, ждите, скоро!)
Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>
С уважением, Богдан.