Производительность Postgres разных версий

Да простит меня модератор за возможно наивный вопрос, но пока не нашел более подходящего форума, а получить общее представление все таки хочется. Думаю здесь много спецов по постгри, и "гуру" укажут направление "движения" Итак имеем:
1) Сервер win 2008 - на нем 1с сервер , с установленной 1с комплексной конфигурацией 8.2, пользователей от 20 -30
2) Сервер БД postgres 9.0.4 - в развернутом виде около 50 GB (Linus Suse, постгрес от этерсофта)
В такой связке в целом работает несколько лет и целом полет нормальный.
Для обеспечения максимальной производительности очень долго искал оптимальные настройки .conf. И оказалось что основные рекомендации по настройке для 1с " не совсем верные" по крайней мере для моего железа и конфигурации. И я просто с секундомером в руках измерял время проведения документов за пол дня и менял по одному подбирая наиболее оптимальный вариант. Результат - по сравнению с дефолтными рекомендоваными - в 4 раза быстрей проводится. Была возможность на том же железе для сравнения поднять MSSQL (на новый год никто 2 дня не работал) . И тот же интервал провожу точно также: результат меня расстроил - MSSQL провел те же документы наверно раза в 3 быстрее. Отсюда:
ВОПРОС №1) Это нормальное соотношение по производительности между постгрес и мсскл именно при работе с 1С и конкретно при работе 8.2 комплексной?
ВОПРОС №2) На что можно обратить внимание для повышения производительности
Замечено также что при проведении документов в связке с mssql - на сервере базы данных заняты все ядра процессора ( было предоставленно 7 ядер и они все на 100% загружались). А при работе на постгрессе поочередно ядра загружались на 100% и никогда не было ситуации чтоб 2 - 3 ядра одновременно загружались на 100%! при этом производительность упиралась именно в "процессор" а не в дисковую систему, память или сеть! Где то на просторах интернета встретил статью о том что постгрес (как минимум в связке с 1с) работает по принципу один запрос - один поток (ядро) - и не может раскидать выполнение по ядрам - и соостветсвенно:
ВОПРОС №3) Можноли заставить постгрес использовать ядра процессора как то более эфективно? если да - то как?
И вот настал момент когда ожидается увеличение как количество пользователей так и количества данных . Поэтому думаю собрать сервер или закупить новый и настроить на нем новый постгри под большую нагрузку, а старый оставить как резервный . Буду искать с самым производительным процессором при этом с минимальным кол. ядер. Устанавливать так же планирую Linux suse 42.3. А вот какой постгрес выбрать.
ВОПРОС №4) Зависит ли производительность от версии постгрес (опять же с учетом 1с) работает ли 9.2 хоть немного лучше, быстрее? 9.0 и так далее 9.4 ? 9.6 ? Чтобы вы порекомендовали для обеспечения надежности, правильной работы и скорости в связке с моей 1С.
На днях под руку попалась машинка для эксперементов (готовлюсь к моменту прихода сервера...) Результаты:
Linux 42.3 + posgres 9.0.4(этерсофт) + 1c 8.2 - работает без нареканий - но только медленно
Linux 42.3 + postges 9.2 (этерсофт)+ 1с 8.2 - по ощющением работает немного быстрее (при таких же настройках конфига) около 10% в плюсе . Но почемуто падала база при открытии одно из пунктов меню "документы-управление продажами-документы контрагента". Как только 1 пользователь заходит пользователь заходит туда - сам процес постмастера падает, все отключаются от базы, ядро делает снимок, через минуту - другую работа постгрес восстанавливается. Остальные пункты меню проверил (конечно не все - основные) все отлично. но работать не получится.
Linux 42.3 + postgres 9.6 от посгреспро - не устанавливается так как нет библиотек libssl.so.10, скачиваю , те в свою очередь просят еще что то - как то установил - но видать криво так как база данных из 1с создалась но заливаться не стала и выкинула меня с ошибкой

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Думаю здесь много спецов по

Думаю здесь много спецов по постгри, и "гуру" укажут направление "движения"
хыхых. тут таких мало. А всё из-за того, что админ не настроил уведомления пишущих в тему.

Я не в курсе за 1с.
Но по описанию я вижу просто напросто неоптимизированную базу, которая делает seq scan постоянно и вдоль и поперёк. Это видно благодаря 100% загрузке ядра. С версии PG 9.6, если не ошибаюсь, seq scan стал параллельным. Так что это повод подумать крепко.
Но в стандартной ситуации я бы поставил pg stat activity и смотрел бы какие там запросы тормозят и настраивал бы оптимизацию.

В отличие от MySQL,

В отличие от MySQL, PostgreSQL не умеет использовать треды (нити, потоки), поэтому всегда работало как написано в документации - один процесс postgres - одно ядро! А как известно, при получении соединения, основной процесс-сервер форкается, создавая для одного соединения свой собственный подпроцесс - это тоже описано в документации.

И из этого вывод что:

Как не прыгай с бубном и не настраивай постгрес - приблизится к производительности mssql ( именно в моей ситуации и без вмешательство в саму 1С) я и близко не смогу?

Давайте рассуждать

Давайте рассуждать логически.
Если у вас скажем 4 ядра на сервере и ОДИН клиент, то разумеется, MSSQL будет выигрывать, ведь он может использовать все 4 ядра, в то время как PostgreSQL только одно. Но вот если клиентов 4-ре и больше, то ситуация выравнивается, потому как 4 ядра будут использованы как в одном, так и в другом случае.

Вот именно! А получается как - то странно:

С одной стороны клиентов 1с у меня может быть 30 (максимально по ключам) одновременно работающих
Но с другой стороны при создании базы (средствами 1с) - запрашивается один комплект логин+пароль для доступа к базе и таким образом для постгрес клиент один!?
Интересно будет попробывать завести еще одного пользователя для пост грес и как то ухитрится настроить в сервере 1с новую базу но со сылкой на первую но с другим логином.
Так чтоб часть клиентов 1с подключалась к базе А , вторая часть к базе В (имена баз в сервере 1с) а сами базы ссылались на 1 и туже базу постгрес но под разными логинами и получится как минимум 2 клиента для потгрес?
Интересно попробывать. заработает ли вообще , или это бредовая идея...

Под клиентом я имел в виду не

Под клиентом я имел в виду не пользователя, а именно клиентскую часть программы, которая создаёт соединение. Т.е. на 30 одновременно работающих клиентах (именно работающих, а не просто сидяших в программе), производительность MSSQL и PostgreSQL должна быть практически равной.

Пожалуста тогда поясните суть процесса

а) в рабочем режиме работают 25 человек как пользователи 1С , все они подключаются к одной базе постгрес с прописанным одним пользователем (собственно postgres). 1c у меня запускает до 7 процессов сервера 1с, А на сервере постгрес запускаются несколько процессов постмастер и их количество около 10 - 13, тоесть явно больше чем процессов сервера 1с - Так всеже какое количество клиентов в Вашем понимания у постгреса в такой ситуации?
б) В ситуации когда я "монопольно" ночью перепровожу месяц - то для 1с я буду 1 ользователь и скорее всего и для постгреса будет 1 клиент, и в данном случае я сечас проигрываю по скорости проведения раза в три - такое соотношение нормально? или все таки где то что то в настройках постгри я выставил не оптимально? если да - на что обратить внимание?
в) Ну и есть ли смысл для увеличения производительности на том же железе запустить постгри 9.6 заместо 9.0 ?
г) при пробах установить 9.6 просится библиотеки libssl.so.10 и libcrypto.so.10 - это нужно только для шифрованного доступа - если он отключен в конфигурации еостгреса - будетли он нормально стартоват и работать без этих бибилиотек. ?

>> а) в рабочем режиме

>> а) в рабочем режиме работают 25 человек как пользователи 1С , все они подключаются к одной базе постгрес с прописанным одним пользователем (собственно postgres)
значит 25 соединений (клиентов) и 25 процессов-потомков на сервере PostgreSQL

>> А на сервере постгрес запускаются несколько процессов постмастер и их количество около 10 - 13
Должно быть равно количеству активных работающих PostgreSQL подключений, т.е. 25. Пересчитайте внимательно. В документации написано, что каждое подключение - это fork основного процесса PostgreSQL. Я же не выдумаваю ничего, а говорю о том, что написано в доках:
https://postgrespro.ru/docs/postgresql/9.4/connect-estab.html

>> б) В ситуации когда я "монопольно" ночью перепровожу месяц - то для 1с я буду 1 ользователь
я уже писал. Один процесс - одно ядро. Т.е. один клиент не сможет использовать все ядра сервера сервера в силу вышенаписанного.

>> в) Ну и есть ли смысл для увеличения производительности на том же железе запустить постгри 9.6 заместо 9.0 ?
Разработчики каждый раз утверждают, что повышают производительность. Но поскольку я сравнительных тестов разных версий PostgreSQL на одной и той же задаче не видел, то соответственно ничего сказать не могу. Однако, с точки зрения здравого смысла - всегда имеет смысл ставить более свежую СТАБИЛЬНУЮ версию! Что в моём понимании "стабильная"? Не менее полугода после официального выпуска, чтобы пофиксили большинство багов. Не забывайте, конечно, же смотреть системные требования к продукту, для которого вы ставите PostgreSQL, потому что в СУБД вводят новые фичи, которые могут изменить её поведение. Лучший вариант: если есть возможность поставить тестовую версию рядом с продуктивной, прогнать тесты, убедиться что всё работает, а уже потом мигрировать на более свежую.

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

1с сервер

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

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

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2010