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

Немного скриптов для 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? Не стесняйтесь, пишите!

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

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

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

15 Comments

  1. 3vs

    Юрий, подскажите правильную на Ваш взгляд методологию обновления конфигураций, к примеру Бухгалтерия 3 и Зарплата 3.1, работающих на PostgreSQL.

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

    Это правильно, или надо обслуживать базу как-то по другому?

    Ещё вопрос, в пункте «Обслуживание» есть ещё ключ «CLUSTER» зачем он нужен и надо ли его запускать, если сервер в одном числе и лице и как сервер базы данных и как сервер предприятия?

    Reply
  2. YPermitin

    (1) я бы не хотел касаться темы обслуживания, особенно здесь, в комментариях.

    Тем более Ваши вопросы решаются чтением стандартной документации. Но пока сложилось впечатление, что Вы делайте это на всякий случай.

    Reply
  3. 3vs

    (2)Хотелось услышать мнение профессионалов в плане обслуживания баз 1С, работающих на PostgreSQL.

    Но пока сложилось впечатление, что Вы делайте это на всякий случай.

    Не, мнение сложилось правильное! 🙂

    Но, после этих телодвижений на старой железяке Бухгалтерия 3 заметно прибавляет в скорости работы!

    Reply
  4. 🅵🅾️🆇

    Здорово.

    Попробуйте dBeaver или DataGrip

    pgAdmin эт прям совсем ниачем.

    Reply
  5. YPermitin

    (4) Спасибо! А Azure Data Studio пробовали?

    Reply
  6. 3vs

    (4)У меня железо старое и PostgreSQL 9.4, pgAdmin хватает

    для обслуживания.

    Хотелось просто методологию правильного обновления базы 1С, работающей на PostgreSQL, чтобы производительность не снижалась.

    Reply
  7. 3vs

    (6)Извиняюсь, вопрос, видимо был Юрию, влез. 🙂

    Reply
  8. 3vs

    Юрий, а может Вы дадите какую-нибудь статью по обслуживанию баз 1С,

    работающих на PostgreSQL?

    Reply
  9. 🅵🅾️🆇

    (5) Неа.

    Был опыт только с dBeaver и DataGrip.

    dBeaver — бесплатен и умеет огромное количество различных СУБД.

    DataGrip — платен, а также встроен в продукты JetBrains и поставляется отдельной софтиной.

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

    Остановился на dBeaver, не охото заморачиваться с кряками, функционала хватает за глаза, а также:

    choco install dbeaver
    Reply
  10. YPermitin

    (9) спасибо за развернутый ответ.

    Попробую оба инструмента.

    Reply
  11. YPermitin

    (8) я бы просто начал отсюда: https://postgrespro.ru/docs/postgrespro/9.5/maintenance

    Можно и отдельную публикацию сделать на этот счет. 🙂

    Reply
  12. 3vs

    (11)Да, можно и оттуда! 🙂

    Хочется рекомендаций профессионалов по обслуживанию PostgreSQL именно в связке с 1С.

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

    Архивы у меня делаются скриптом средствами PostgreSQL, но пишут, что не факт, что то, что выгрузилось в архив, корректно загрузится обратно.

    Вопрос восстановления базы из архивной копии PostgreSQL тоже бы можно осветить, как лучше это делать, грохнуть старую базу и восстановить на новое место или можно восстанавливать из архива прямо в существующую базу, тьф-тьфу, пока всё работает, из архивов базу восстанавливать пока не приходилось.

    Я, правда, ещё делаю контрольный выстрел — перед обновлением ещё базу и в DT выгружаю руками средствами конфигуратора.

    Будет время и желание на этот счёт, черкните для крестьянских детей вроде меня статейку! 🙂

    Reply
  13. Gorus

    Дополню скриптами по управлению соединениями:

    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’;
    
    Reply
  14. YPermitin

    (13) спасибо!

    Сохраню в свою коллекцию.

    Reply
  15. letarch

    (11) да, было бы очень интересно почитать всем, а то сейчас никак не победим «тормоза» 1с в крохотной 70+Гб базе 🙁

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *