Postgresql - не использует кэш 1с?

1. ВикторП 343 17.01.18 12:12 Сейчас в теме
Установил Postgresql - с сайта Postgres pro под Windows- самая последняя 9.6 для 1с.

Выполнил рекомендации из ИТС и gilev.ru/postgres. Что на ИТС, что у Гилева встречаются настройки, которых нет в конфигурационном файле, например checkpont_segmens . Из рекомендаций Гилева мне не подошла настройка effective_io_concurrency - c подобной настройкой PG не стартует.


Сравниваю производительность баз данных под MS SQL и Postgresql , поэтому базы подняты с одного dt и выполняю одинаковые длительные обработки.

Вот что я заметил. Время выполнения на обоих СУБД почти одинаковое, MS SQL почти всегда быстрее , но не критично , примерно 10%, диски под MS SQL производительней, все файлы PG на одном диске, поэтому такая разница устраивает и понятна.



НО... при втором, третьем выполнении этой же обработки, время на MS SQL уменьшается очень сильно, а на PG - уменьшения - нет .Вообще.

Например , один тест - под MS SQL 10 мин- первый запуск, 7 минут - второй запуск. Под PG- все время 12 минут.(Времена округленные).
второй тест под MS SQL первый прогон- 37, второй- 31 минута. Под Postgresql . Самый первый прогон - 50 минут, после vacuum full verbose analyze и изменения конфигурационнойго файла- 35 минут и на этом все, следующие прогоны вокруг этой цифры, уменьшения нет.


Можно ли добиться использования кеша 1с настройками Postgresgl? Или это не кэш?

Конфигурационный файл приложен.
Прикрепленные файлы:
postgresql.conf
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 17.01.18 13:51 Сейчас в теме
(1) Субъективно MSSQL всегда будет быстрее
конфа на управляемых блокировках? Режим совместимости какой?
из стандартных настроек выкрутить
default_statistics_target = 5000
join_collapse_limit=1
seq_page_cost = 0.1
random_page_cost = 0.4
cpu_operator_cost = 0.00025

Первая настройка как раз отвечает за количество записей, участвующих в сборе статистики, остальные для планировщика запросов
+
3. ВикторП 343 17.01.18 13:56 Сейчас в теме
Хорошо, есть связь с кэшем 1с?

Есть ли ссылка на рекомендации с этими параметрами?
+
4. Dream_kz 129 17.01.18 14:02 Сейчас в теме
(3) http://wiki.etersoft.ru/PostgreSQL/Optimum
https://its.1c.ru/db/metod8dev#content:4692:hdoc

Postge про 1С по идее ничего не знает, так как сервер 1С использует СУБД, а не наоборот. Ускорение в MSSQL происходит благодаря СУБД, а не серверу 1С.
Fox-trot; +1
6. a.doroshkevich 1411 19.01.18 13:59 Сейчас в теме
(3)Связи нет никакой
+
5. ВикторП 343 17.01.18 14:28 Сейчас в теме
Ссылки посмотрю, за них спасибо.

то, что Postgres не знает про 1с- я думаю как раз наоборот- специально написаны добавки к ядру Postgres для работы с 1с , они вроде тоже называются расширения
+
7. a.doroshkevich 1411 19.01.18 14:02 Сейчас в теме
(5)Это совсем другое, написаны расширения для более корректной работы с запросами 1С

По поводу общего быстродействия - Вы делаете регламентные операции на PostgreSQL?
+
9. ВикторП 343 19.01.18 15:34 Сейчас в теме
(7) Вчера посмотрел Ваше/твое выступление на конференции PG. Понравилось.

Я никаких регламентных операций на Postgresql не делаю. Я его развернул для теста и подготовки к эксперту по технологическим вопросам :(

Антон, можете написать, использует ли Postgresql кэш 1с?
Какие изменения произошли за год в паре Postgresql - 1с Postgresql после этого выступления? Можете написать кратко, ничего или стало лучше :)
+
10. Fox-trot 157 19.01.18 15:50 Сейчас в теме
(9) а что по твоему кэш 1с? где он хранится и можно ли его "пощупать/поглядеть"?
+
11. a.doroshkevich 1411 20.01.18 06:05 Сейчас в теме
(9)
произошли за год в паре Postgresql - 1с Postgresql


Виктор, кэш 1С и любой движок БД вообще никак не взаимосвязаны и соответсвенно экш 1С не используется ни одном движком БД.

По поводу того что изменилось за год: Изменения в лучшую сторону, особенно в платформе 1С, она стала более дружественной по отношению к PostgreSQL, а так же в БСП многие запросы переписаны для более корректной работы как в PostgreSQL так и MS SQL.

Сам PostgreSQL тоже поменялся, версия 9.6.6 стала ощутимо быстрее, скорость уже как минимум сравнима с MS SQL в реалиях 1С, особенно радует скорость работы под Windows на ReFS
Версию 10 от PostgreSQL пока ещё кручу, тестирую, пока сказать о каких-то результатах не могу.
+
12. ВикторП 343 20.01.18 07:29 Сейчас в теме
(11) Спасибо за ответ.
Возвращаясь к вопросу топика.

Пусть это не кэш 1с.

Но, снижение времени выполнения операции на MS SQL есть, на Postgres нет.

Это проявление какой особенности Postgresql ?
+
13. a.doroshkevich 1411 20.01.18 07:48 Сейчас в теме
(12)Это проявление особенностей работы планировщика и кэша запросов MS SQL
+
14. Cooler 22 20.01.18 10:15 Сейчас в теме
(12)
Пусть это не кэш 1с.
Это точно не кэш 1С: кэш 1С - это всегда файлы, создаваемые самой 1С в папке пользователя.

А база (в клиент-серверном варианте) - это набор таблиц, создаваемых средствами движка СУБД. И этот движок понятия не имеет о том, где и какие файлы созданы без его участия, да и не интересуется ими.

Соответственно, использовать "кэш 1С" он никак не может, его использует только сама создавшая его 1С по обычному для любого кэширования принципу: когда требуемые данные есть в кэше, то обращение идет к кэшу, а не к базе.
Но, снижение времени выполнения операции на MS SQL есть, на Postgres нет.
Значит, в MS SQL есть собственное кэширование по принципу, описанному выше: результаты запроса запоминаются и при возможности используются повторно.

А в PG такого кэширования нету, просто нету: каждый запрос выполняется как в первый раз.
+
16. ВикторП 343 20.01.18 14:00 Сейчас в теме
(14)(15) в MS SQL есть процедурный кэш, в котором хранятся планы выполнения запросов и при втором , третьем .. выполнении план берется оттуда, а не компилируется с нуля

вспомните команду DBCC freeproccashe и дебаты надо ли выполнять очистку после обновления статистики

я так понимаю подобного процедурного кэша в PostgreSQL нет?
+
17. starik-2005 3036 20.01.18 21:01 Сейчас в теме
(16)
я так понимаю подобного процедурного кэша в PostgreSQL нет?
В постгри есть процедурный кеш, просто зовется он иначе. Можете прочитать тут.
+
18. ansh15 21.01.18 03:27 Сейчас в теме
(17) Если программисту не лень использовать на каждый случай PREPARE... EXECUTE, то он(кэш) есть. В 1С эта возможность как нибудь используется?
+
19. starik-2005 3036 21.01.18 14:48 Сейчас в теме
(18)
В 1С эта возможность как нибудь используется?
Ну всегда есть технологический журнал 1С - посмотрите, как транслирует запрос для постгреса сама 1С.
+
22. ansh15 26.01.18 16:26 Сейчас в теме
(19) Посмотрел. Никаких PREPARE там не нашел(может, плохо искал...).
Зато нашел такое:
"Модуль aqo представляет собой расширение Postgres Pro Enterprise для оптимизации запросов по стоимости выполнения. Используя методы машинного обучения, а точнее модификацию алгоритма k-NN, aqo улучшает оценку количества строк, что может способствовать выбору лучшего плана и, как следствие, ускорению запросов.

Модуль aqo может собирать статистику по всем выполняемым запросам, за исключением запросов, обращающихся к системным отношениям. Если запросы различаются только константами, они считаются относящимися к одному типу. Для каждого типа модуль aqo сохраняет для машинного обучения качество оценки количества строк, время планирования, время и статистику выполнения. На основе этих данных aqo строит новый план выполнения и использует его для следующего запроса того же типа. В тестах aqo показал значительное увеличение производительности для сложных запросов."
https://postgrespro.ru/docs/enterprise/9.6/aqo
Как говорится, "Покупайте наших слонов".
+
23. starik-2005 3036 26.01.18 16:52 Сейчас в теме
(22)
Как говорится, "Покупайте наших слонов".
Смотря сколько это стоит.
+
8. Rovan 22 19.01.18 14:43 Сейчас в теме
Сравните объем "съедаемой" памяти MS и Postgres - вероятно увидите, что MS берет в разы больше... это и есть внутренние кэширование, которое влияет на скорость.
+
15. starik-2005 3036 20.01.18 11:06 Сейчас в теме
Кеш - это область памяти, используемая для хранения часто используемых данных. Кеш может быть дисковый, процессорный, кеш может быть у приложения для каких-то часто используемых данных (например, 1С кеширует объект метаданных на 20 секунд примерно, поэтому второе обращение к объекту происходит мгновенно, тогда как первое заставляет движок ORM читать данные из СУБД, при том этот кеш никак не зависит от СУБД).

У СУБД тоже есть кеш - область памяти, используемая для хранения результатов выборки из таблиц. По-умолчанию MS SQL использует ВСЮ память, какая есть на компьютере (при установке параметр используемой памяти равен двум лярдам мегабайт, т.е. 2^30), а у постгри все буфера ограничены десятками мегабайт всего. Для того, чтобы заставить постгри кушать больше памяти, нужно прописать в конфиги соответствующие значения буферов, которые можно посмотреть, например, здесь.

Т.к. разрабатываемые 1С типовые решения отработаны в большинстве случаев именно на клиент-серверных платформах, использующих в качестве СУБД MS SQL, то вряд ли можно было бы надеяться на то, что постгри будет быстрее, но если заняться оптимизацией запросов именно для постгреса, то, как говорили всякие там Лустины (и, возможно, Гилевы), постгри в итоге получается быстрее в большем количестве случаев, и MS SQL догнать постгри по производительности уже не может (если крутить настройки в разных базах и для первого, и для второго).

Вообще, есть простой пример, показывающий отличие постгри и MS SQL - так называемые "пакетные условия" (кстати, может это как-то иначе называется?) в запросах. Т.е. когда у нас есть "ВЫБРАТЬ Х, У ИЗ Таб ГДЕ (Х, У) В (ВЫРАТЬ Х, У ИЗ Таб2)", то MS SQL, который с такой конструкцией работать не умеет, преобразует это во что-то типа EXISTS(SEL ECT X, Y FR OM Tab2 WHERE X=X' AND Y=Y'), в постгри же это нативный синтаксис, т.е. он просто так как в 1С и напишет (хотя, конечно, не совсем ясно, как 1С это преобразует - надо будет посмотреть).

Ну и, конечно, на производительность постгри будет влиять и ось тоже. На Linux производительность была выше, чем на MustDie.
+
20. ВикторП 343 26.01.18 11:40 Сейчас в теме
Оказывается. все уже есть :)

https://www.1c-interes.ru/catalog/all6964/25227623/

Глава 6. Администрирование PostgreSQL при работе с «1С:Предприятием» ◦Основы
◦Расширения
◦Логирование
◦ Настройки PostgreSQL для работы с «1С:Предприятием» ◦Основные параметры postgresql.conf
◦Общие положения
◦Настройки сервера для PostgreSQL
◦Обозначения
◦Параметры производительности
◦Параметры для платформы «1С:Предприятие»
◦Online_analyse

◦Расследование проблем
◦Резервное копирование и восстановление ◦Дамп SQL
◦Физические бэкапы
◦Непрерывная архивация

◦Дополнительные источники информации
+
21. Fox-trot 157 26.01.18 11:49 Сейчас в теме
(20) неужто используеть?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот