Набор скриптов для знакомства с PostgreSQL

04.11.19

База данных - Администрирование СУБД

Немного скриптов для PostgreSQL, позволяющих познакомиться с состоянием сервера.

Снова за свое

В одной из прошлых статей был предложен небольшой набор скриптов для SQL Server, позволяющий оценить текущее состояние сервера, узнать какие базы на нем расположены и другую полезную информацию. Сегодня мы попытаемся сделать то же самое для PostgreSQL. Ведь все любят PostgreSQL, не так ли?

Информация будет полезна для администраторов и разработчиков, имеющих дело с хайповой СУБД, а также всем энтузиастам, желающих "пощупать" PostgreSQL. Мы пройдем примерно такой же путь, что проделывали для SQL Server, но с некоторыми существенными отличиями, ведь обе СУБД значительно отличаются в архитектуре и принципах функционирования.

Здесь Вы не найдете продвинутых скриптов, ведь это лишь для знакомство с новым серверов PostgreSQL. Но обо всем далее.

Это не руководство

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

Все скрипты можно запускать с помощью терминального клиента psqlс помощью графической утилиты pgAdmin или же с помощью другого графического инструмента Azure Data Studio (поддержка PostgreSQL реализовано через расширение, не забудьте его установить). Это прямо "золотой век" инструментария для работы с базами данных!

Начнем с простых скриптов и постепенно перейдем к некоторым вопросам производительности.

Поехали!

Перейдем уже непосредственно к скриптам. Все они были проверены на PostgreSQL версии 10, но абсолютное большинство скриптов можно запускать и на более ранних версиях.

Первое знакомство

Как только Вы запустили свое клиентское приложение, то в первую очередь стоило бы узнать следующую информацию

 
 Базовая информация о сервере
 
 Время работы с момента запуска
 
 Количество активных соединений
 
 Просмотр конфигурации сервера

Общую информацию мы получили, пойдемте дальше.

О базах данных

Следующее, что следует изучить - это список баз данных и их размер.

 
 Список баз

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

 
 Размер всех баз

На следующем шаге уже может потребоваться посмотреть почему эта база такая большая.

 
 Размер таблиц

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

И снова индексы

Индексы являются одними из самых важных объектов любой базы данных, обеспечивающих производительность запросов и клиентских приложений для базы (в нашем случае это платформы 1С). Узнаем список индексов, который у нас есть.

 
 Список индексов

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

 
 Статистика использования индексов

Попробуем определить недостающие индексы.

 
 Таблицы с отсутствующими индексами

Также стоит держать под контролем показатели фрагментации индексов, или bloat ("раздутия") как это обычно еще называют в PostgreSQL.

 
 Информация о фрагментации (раздутии) индексов

На этом с индексами пока все. Давайте посмотрим на статистику.

Статистика в порядке?

Статистика является одним из самых важных показателей, который использует планировщик для построения эффективных планов запросов. Если статистика устареет, то запросы могут быть выполнены самым неоптимальным образом. В итоге вся информационная система может столкнуться с деградацией производительности.

 
 Информация о статистике

Теперь давайте поговорим о производительности.

Производительность

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

 
 Активные запросы

Теперь мы можем получить план запроса.

 
 Получение плана запроса

Может быть полезным получить информацию о выполняемых транзакциях.

 
 Информация о транзакциях

Можно проверить эффективность работы кэша.

 
 Использования кэша

И под конец попробуем получить длительные запросы.

 
 Длительные запросы

Вот и все, со скриптами пока все.

Любите ли Вы PostgreSQL?

Никаких готовых рецептов в статье нет, также как и нет информации о настройке операционной системы для оптимальной работы СУБД (не важно Windows это или *.nix) или настройке мониторинга. Лишь скрипты для получения общей информации.

Однако, теперь у Вас может появиться интерес и направление для изучения этой популярной и эффективной СУБД.

Есть чем дополнить? Добро пожаловать в комментарии!

Или есть интересные вопросы или опыт по PostgreSQL? Не стесняйтесь, пишите!

Другие ссылки

Другие полезные материалы

Авторские разработки

скрипты PostgreSQL PG Postgres диагностика анализ оптимизация администрирование базы данных

См. также

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Пользовался ранее https://infostart.ru/1c/articles/1120161/#, но она устарела, т.к. службы запускаются через systemctl, да и сами службы слегка изменились. Возможно, где-то на ИТС уже есть нужная инструкция, но мне не попалась.

15.11.2024    298    Baser    2    

1

HighLoad оптимизация Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Мы исследуем проблему долгого выполнения запросов PostgreSQL при использовании конструкции VALUES: когда она возникает, как на нее можно повлиять, а главное, почему ее продуманная отработка важна для более быстрого функционирования решений на базе 1С

12.11.2024    829    Tantor    19    

14

HighLoad оптимизация Администрирование СУБД Механизмы платформы 1С Программист Платформа 1С v8.3 ИТ-компания Россия Бесплатно (free)

В данной статье мы рассмотрим, как работает механизм временных таблиц на postgres на платформе 8.3.23 и что изменилось в нем при добавлении новых возможностей в платформе 8.3.25. А также на примере покажу, как понимание работы платформы позволяет оптимизировать СУБД для работы с 1С.

29.10.2024    3139    Tantor    38    

34

Администрирование СУБД Системный администратор Программист Бесплатно (free)

CDC - очень мощный механизм, который можно использовать во многих сценариях, возможность развернуть его в Docker показывает простоту и лёгкость данной технологии.

08.10.2024    731    AlexSvoykin    1    

7

Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ и решение ошибок СУБД. Во время реиндексации базы Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения. Во время проверки целостности Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._RefSInf21806".

19.09.2024    4344    Xershi    10    

17

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    2967    1CUnlimited    9    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 3vs 05.11.19 06:11 Сейчас в теме
Юрий, подскажите правильную на Ваш взгляд методологию обновления конфигураций, к примеру Бухгалтерия 3 и Зарплата 3.1, работающих на PostgreSQL.

Я делаю так - обновляю конфигурацию конфигуратором, запускаю базу, чтобы всё принялось и обновилось, потом закрываю базу и останавливаю сервер предприятия и запускаю pgAdmin3 и в нём последовательно делаю "Обслуживание", сначала VACUUM с включенными флажками "FULL" и "ANALYZE", вопрос, для чего нужен флажок "FREEZE" и нужно ли его включать? Потом делаю "ANALYZE", потом "REINDEX", потом закрываю pgAdmin3, запускаю сервер предприятия и отдаю в работу.
Это правильно, или надо обслуживать базу как-то по другому?

Ещё вопрос, в пункте "Обслуживание" есть ещё ключ "CLUSTER" зачем он нужен и надо ли его запускать, если сервер в одном числе и лице и как сервер базы данных и как сервер предприятия?
2. пользователь 05.11.19 07:10
(1) я бы не хотел касаться темы обслуживания, особенно здесь, в комментариях.

Тем более Ваши вопросы решаются чтением стандартной документации. Но пока сложилось впечатление, что Вы делайте это на всякий случай.
3. 3vs 05.11.19 07:25 Сейчас в теме
(2)Хотелось услышать мнение профессионалов в плане обслуживания баз 1С, работающих на PostgreSQL.
Но пока сложилось впечатление, что Вы делайте это на всякий случай.

Не, мнение сложилось правильное! :-)
Но, после этих телодвижений на старой железяке Бухгалтерия 3 заметно прибавляет в скорости работы!
4. 🅵🅾️🆇 524 05.11.19 22:52 Сейчас в теме
Здорово.
Попробуйте dBeaver или DataGrip

pgAdmin эт прям совсем ниачем.
5. пользователь 06.11.19 05:35
(4) Спасибо! А Azure Data Studio пробовали?
9. 🅵🅾️🆇 524 06.11.19 09:01 Сейчас в теме
(5) Неа.
Был опыт только с dBeaver и DataGrip.
dBeaver - бесплатен и умеет огромное количество различных СУБД.

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


Остановился на dBeaver, не охото заморачиваться с кряками, функционала хватает за глаза, а также:
choco install dbeaver
YPermitin; Fox-trot; +2 Ответить
10. пользователь 06.11.19 09:10
(9) спасибо за развернутый ответ.

Попробую оба инструмента.
6. 3vs 06.11.19 05:43 Сейчас в теме
(4)У меня железо старое и PostgreSQL 9.4, pgAdmin хватает
для обслуживания.
Хотелось просто методологию правильного обновления базы 1С, работающей на PostgreSQL, чтобы производительность не снижалась.
YPermitin; +1 Ответить
7. 3vs 06.11.19 05:45 Сейчас в теме
(6)Извиняюсь, вопрос, видимо был Юрию, влез. :-)
8. 3vs 06.11.19 05:47 Сейчас в теме
Юрий, а может Вы дадите какую-нибудь статью по обслуживанию баз 1С,
работающих на PostgreSQL?
YPermitin; +1 Ответить
11. пользователь 06.11.19 09:26
(8) я бы просто начал отсюда: https://postgrespro.ru/docs/postgrespro/9.5/maintenance

Можно и отдельную публикацию сделать на этот счет. :)
letarch; 3vs; +2 Ответить
12. 3vs 06.11.19 10:42 Сейчас в теме
(11)Да, можно и оттуда! :-)
Хочется рекомендаций профессионалов по обслуживанию PostgreSQL именно в связке с 1С.
Можно ли обойтись просто встроенными в платформу 1С средствами проверки и исправления базы, или оптимальней отключить сервер предприятия, чтобы не мешал и запустить обслуживание PostgreSQL своими средствами PostgreSQL, этапы обслуживания в этом случае.
Архивы у меня делаются скриптом средствами PostgreSQL, но пишут, что не факт, что то, что выгрузилось в архив, корректно загрузится обратно.
Вопрос восстановления базы из архивной копии PostgreSQL тоже бы можно осветить, как лучше это делать, грохнуть старую базу и восстановить на новое место или можно восстанавливать из архива прямо в существующую базу, тьф-тьфу, пока всё работает, из архивов базу восстанавливать пока не приходилось.
Я, правда, ещё делаю контрольный выстрел - перед обновлением ещё базу и в DT выгружаю руками средствами конфигуратора.

Будет время и желание на этот счёт, черкните для крестьянских детей вроде меня статейку! :-)
15. letarch 06.11.19 15:35 Сейчас в теме
(11) да, было бы очень интересно почитать всем, а то сейчас никак не победим "тормоза" 1с в крохотной 70+Гб базе :-(
13. Gorus 48 06.11.19 11:48 Сейчас в теме
Дополню скриптами по управлению соединениями:

1. Закрытие всех активных подключений к базе DBName:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'DBName' AND pid <> pg_backend_pid();


2. Закрываем определенное соединение (pid берем из списка соединений):
SELECT pg_terminate_backend(pid);


3. Запрещаем новые соединения к базе DBName
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'DBName';


4. Разрешаем новые соединения к базе DBName
UPDATE pg_database SET datallowconn = 'true' WHERE datname = 'DBName';
3vs; YPermitin; +2 Ответить
14. пользователь 06.11.19 11:51
(13) спасибо!

Сохраню в свою коллекцию.
16. Xershi 1555 14.05.20 10:48 Сейчас в теме
(13) у меня похожим образом был 1 клиент. Делали ночную копию и базу для разработки.
На винде запускаю батник, который запускает скрипт на линуксе. 6-7 шагов.
Блочим соединения, выкидываем пользователей, делаем бекап рабочей базы в архив, копируем из архива в нашу базу, открываем доступ.
17. w.r. 650 15.05.20 20:05 Сейчас в теме
18. SanchoD 316 23.06.20 09:22 Сейчас в теме
Подскажите, где в PostgreSQL хранится таблица с основной конфигурацией и конфигурацией базы данных?
Так получилось, что база при обновлении рухнула. Хочу сделать по аналогии с MSSQL, но не нахожу такие таблицы.
Оставьте свое сообщение