SlideShare a Scribd company logo
В ногу со временем,
или как делать
upgrade PostgreSQL
Андрей Сальников
Data Egret
Основные проблемы обновления PostgreSQL
• И так работает!
• Мы - сервис 7х24.
• У нас слишком сложная система.
• Вдруг мы потеряем данные?
Дам ответы на вопросы
• Зачем, вообще, обновляться
• Методика обновлений PostgreSQL
• Ожидаемые проблемы
• Как избежать простоя системы
• Вы сможете делать это самостоятельно
Нумерация версий PostgreSQL
Нумерация, которая использовалась до 10 версии
9.5.8
Major
Major
Minor
Нумерация версий PostgreSQL
Нумерация, которая используется, начиная с 10 версии
10.3
Major Minor
Возможные типы обновлений
• Минорное обновление
• 9.6.2 -> 9.6.5
• 10.0 -> 10.1
• Мажорное обновление
• 9.2.12 -> 10.0
• Актуальные версии:
• 9.3.19, 9.4.14, 9.5.9, 9.6.5, 10.0
• PostgreSQL 9.2 ушел из поддержки сообщества
Подготовка к обновлению
• Прочитайте полностью все release notes
• Обновитесь на тестовом окружении
• Синхронизируйтесь с разработчиками
• Сделайте бэкап базы и проверьте его
Минорное обновление
• Установите пакеты с новой версией PostgreSQL
• Обновите PostgreSQL-зависимые пакеты
• CHECKPOINT
• pgbouncer и пауза
• Перезапустите базу
• Обновите extensions
• Дополнительные процедуры из release notes
E.4.1. Migration to Version 9.6.2
However, if your installation has been affected by the bug described in the first changelog entry below, then after updating you may need to
take action to repair corrupted indexes.
E.4.2. Changes
• Fix a race condition that could cause indexes built with CREATE INDEX CONCURRENTLY to be corrupt (Pavan Deolasee, Tom Lane)
If CREATE INDEX CONCURRENTLY was used to build an index that depends on a column not previously indexed, then rows updated by
transactions that ran concurrently with the CREATE INDEX command could have received incorrect index entries. If you suspect this may
have happened, the most reliable solution is to rebuild affected indexes after installing this update.
postgres@bd14fe3a45ee:~$ psql
psql (9.6.1)
postgres=# select version ();
version
-----------------------------------------------------------------------------------------
PostgreSQL 9.6.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.3.1-14ubuntu2)
(1 row)
postgres=# dx
List of installed extensions
Name | Version | Schema | Description
--------------+---------+------------+---------------------------------------------------
btree_gin | 1.0 | public | support for indexing common datatypes in GIN
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
postgres@bd14fe3a45ee:~$ psql
psql (9.6.1, server 9.6.5)
postgres=# select version ();
version
-----------------------------------------------------------------------------------------
PostgreSQL 9.6.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4)
(1 row)
postgres=# alter extension btree_gin update;
NOTICE: version "1.0" of extension "btree_gin" is already installed
ALTER EXTENSION
Минорное обновление. Итоги
• Легко сделать
• Несёт исправления существенных ошибок
• Улучшение производительности
• Минимальный простой системы
Мажорное обновление
• pg_dump/restore
• pg_upgrade
• Основанные на логических репликациях
Обновление с pg_dump
• Установка пакетов с новой версией PostgreSQL
• Создание нового кластера в той же локали
• Изменение конфигурационных файлов
• Создание дампа базы
• Восстановление дампа базы
• Запуск приложений на новом PostgreSQL
Детали о pg_dump
• Сложности с нагруженными базами
• Обязательна остановка базы
• Требует дополнительного дискового пространства
• pg_dump -Fc - custom format
• pg_dump -Fd --jobs - распараллеливание
• pg_dumpall -p 5432 | psql -d postgres -p 5433
• pg_dumpall --schema-only
pg_upgrade
• Сложная предварительная подготовка
• Возможна потеря базы
• Самый быстрый
• Вероятные проблемы после обновления
Как работает pg_upgrade
user data
pg_catalog
pg_clog
pg_catalog
pg_clog
old
new
user data
pg_catalog
pg_clog
pg_catalog
-
freeze
user data
pg_catalog
pg_clog
pg_catalog
pg_clog
pg_clog
pg_control
user data
pg_catalog
pg_clog
user data
pg_catalog
pg_clog
dump/restore schema
copy or link
Подготовка к pg_upgrade
• Установите все необходимые пакеты для PostgreSQL
• Создайте пустую базу новой версии
• pg_upgrade --check
• pg_dumpall --schema-only
• Проверьте extensions
Обновление с помощью pg_upgrade
• Создайте пустую базу новой версии PostgreSQL
• Остановите старую базу
• Используйте pgbouncer
• Сделайте checkpoint
Обновление с помощью pg_upgrade
• Создайте пустую базу новой версии PostgreSQL
• Остановите старую базу
• Запустите обновление командой pg_upgrade
• Используйте флаг -k для hard links вместо копирования файлов
Обновление с помощью pg_upgrade
• Создайте пустую базу новой версии PostgreSQL
• Остановите старую базу
• Запустите обновление командой pg_upgrade
• Запустите новую версию базы PostgreSQL
• Запустите сбор статистики
Сбор статистики после pg_upgrade
• Обычно запускается vacuumdb --all --analyze-in-stages
• Иногда может быть лучше vacuumdb --all --analyze-only
• Начиная с 9.5, можно запускать параллельные задания (-j)
• Мы используем сгенерированный скрипт со стадиями 1, 10,
10000, и после сбора статистики по 10 разрешаем соединения к
БД
• Необходимо следить за блокировками
Обновление с помощью pg_upgrade
• Создайте пустую базу новой версии PostgreSQL
• Остановите старую базу
• Запустите обновление командой pg_upgrade
• Запустите новую версию базы PostgreSQL
• Запустите сбор статистики
• Разрешите соединения с базой
Extensions
• pg_upgrade не обновляет расширения автоматически
• Release notes для расширений важны
• Некоторые расширения требуют обновления до pg_upgrade
• Всем расширениям необходимо актуализировать версию после
pg_upgrade
• alter extension EXTENSION_NAME update;
Обновление hot-standby (реплики)
• Сначала обновите мастер-сервер
• Реплика старой версии вам пригодится, если случилась беда при
обновлении
• Проверьте, что приложения работают штатно с новой версией
PostgreSQL (postgresql.log)
• Установите новую версию PostgreSQL на сервер реплики
• Скопируйте новую базу командой pg_basebackup
• Запустите реплику на новой версии PostgreSQL
• Не используйте rsync
Использование репликации для обновления
PostgreSQL
• Потоковая репликация не работает между разными версиями
PostgreSQL
• Другие виды репликации работают
• Логическая репликация от 9.4
• Slony-I
• Londiste
Использование репликации для обновления
PostgreSQL
• Процедура обновления
• Настройте новую версию PostgreSQL
• Настройте репликацию со старой версии в новую
• Сделайте мастером новую БД
• Проблемы
• Сложные схемы БД
• Как правило, переносятся только данные в таблицах
• Дополнительное место на дисках
Метод
Простой
системы
Дополнительное
место на дисках
Сложность Риски?
dump/restore
высокий двойное низкая низкие
pg_upgrade
(copy)
высокий двойное высокая низкие
pg_upgrade (link) низкий не нужно высокая высокие
Logical
Replication нет двойное высокая средние
Полезные ссылки
• http://momjian.us/main/writings/pgsql/pg_upgrade.pdf
• https://blog.2ndquadrant.com/untangling-the-postgresql-upgrade/
• http://blog.endpoint.com/2016/12/postgres-statistics-and-pain-of-
analyze.html
• https://www.depesz.com/2016/11/08/major-version-upgrading-with-
minimal-downtime/
Спасибо за внимание!
Вопросы?
andrey.salnikov@dataegret.com
contact@dataegret.com

More Related Content

PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PDF
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
PDF
Отладка и устранение проблем в PostgreSQL Streaming Replication.
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PDF
Профилирование кода на C/C++ в *nix системах
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Профилирование кода на C/C++ в *nix системах

What's hot (20)

PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PDF
Константин Осипов
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
RootConf 2015
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PDF
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
Олег Бартунов и Иван Панченко
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
PDF
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PDF
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
PDF
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Константин Осипов
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
RootConf 2015
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Олег Бартунов и Иван Панченко
Хранение данных на виниле / Константин Осипов (tarantool.org)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Современная операционная система: что надо знать разработчику / Александр Кри...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Ad

Similar to В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Data Egret) (20)

PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PDF
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PPTX
PostgreSQL. Стильно. Модно. Молодёжно
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Абак Пресс
PPT
SAMag2007 Conference: PostgreSQL 8.3 presentation
PDF
pgconf 2017 Moscow. Make PostgreSQL from source
PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PDF
PostgreSQL в высоконагруженных проектах
PDF
Hacking PostgreSQL. Обзор исходного кода
PDF
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
PDF
Postgresql v509
PDF
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
PDF
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PDF
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PDF
SECON'2016. Бартунов Олег, Карьера в Open Source
PDF
Советы для начинающих разработчиков PostgreSQL
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PostgreSQL. Стильно. Модно. Молодёжно
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Абак Пресс
SAMag2007 Conference: PostgreSQL 8.3 presentation
pgconf 2017 Moscow. Make PostgreSQL from source
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PostgreSQL в высоконагруженных проектах
Hacking PostgreSQL. Обзор исходного кода
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Postgresql v509
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
SECON'2016. Бартунов Олег, Карьера в Open Source
Советы для начинающих разработчиков PostgreSQL
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)

В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Data Egret)

  • 1. В ногу со временем, или как делать upgrade PostgreSQL Андрей Сальников Data Egret
  • 2. Основные проблемы обновления PostgreSQL • И так работает! • Мы - сервис 7х24. • У нас слишком сложная система. • Вдруг мы потеряем данные?
  • 3. Дам ответы на вопросы • Зачем, вообще, обновляться • Методика обновлений PostgreSQL • Ожидаемые проблемы • Как избежать простоя системы • Вы сможете делать это самостоятельно
  • 4. Нумерация версий PostgreSQL Нумерация, которая использовалась до 10 версии 9.5.8 Major Major Minor
  • 5. Нумерация версий PostgreSQL Нумерация, которая используется, начиная с 10 версии 10.3 Major Minor
  • 6. Возможные типы обновлений • Минорное обновление • 9.6.2 -> 9.6.5 • 10.0 -> 10.1 • Мажорное обновление • 9.2.12 -> 10.0 • Актуальные версии: • 9.3.19, 9.4.14, 9.5.9, 9.6.5, 10.0 • PostgreSQL 9.2 ушел из поддержки сообщества
  • 7. Подготовка к обновлению • Прочитайте полностью все release notes • Обновитесь на тестовом окружении • Синхронизируйтесь с разработчиками • Сделайте бэкап базы и проверьте его
  • 8. Минорное обновление • Установите пакеты с новой версией PostgreSQL • Обновите PostgreSQL-зависимые пакеты • CHECKPOINT • pgbouncer и пауза • Перезапустите базу • Обновите extensions • Дополнительные процедуры из release notes
  • 9. E.4.1. Migration to Version 9.6.2 However, if your installation has been affected by the bug described in the first changelog entry below, then after updating you may need to take action to repair corrupted indexes. E.4.2. Changes • Fix a race condition that could cause indexes built with CREATE INDEX CONCURRENTLY to be corrupt (Pavan Deolasee, Tom Lane) If CREATE INDEX CONCURRENTLY was used to build an index that depends on a column not previously indexed, then rows updated by transactions that ran concurrently with the CREATE INDEX command could have received incorrect index entries. If you suspect this may have happened, the most reliable solution is to rebuild affected indexes after installing this update.
  • 10. postgres@bd14fe3a45ee:~$ psql psql (9.6.1) postgres=# select version (); version ----------------------------------------------------------------------------------------- PostgreSQL 9.6.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.3.1-14ubuntu2) (1 row) postgres=# dx List of installed extensions Name | Version | Schema | Description --------------+---------+------------+--------------------------------------------------- btree_gin | 1.0 | public | support for indexing common datatypes in GIN plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (2 rows)
  • 11. postgres@bd14fe3a45ee:~$ psql psql (9.6.1, server 9.6.5) postgres=# select version (); version ----------------------------------------------------------------------------------------- PostgreSQL 9.6.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) (1 row) postgres=# alter extension btree_gin update; NOTICE: version "1.0" of extension "btree_gin" is already installed ALTER EXTENSION
  • 12. Минорное обновление. Итоги • Легко сделать • Несёт исправления существенных ошибок • Улучшение производительности • Минимальный простой системы
  • 13. Мажорное обновление • pg_dump/restore • pg_upgrade • Основанные на логических репликациях
  • 14. Обновление с pg_dump • Установка пакетов с новой версией PostgreSQL • Создание нового кластера в той же локали • Изменение конфигурационных файлов • Создание дампа базы • Восстановление дампа базы • Запуск приложений на новом PostgreSQL
  • 15. Детали о pg_dump • Сложности с нагруженными базами • Обязательна остановка базы • Требует дополнительного дискового пространства • pg_dump -Fc - custom format • pg_dump -Fd --jobs - распараллеливание • pg_dumpall -p 5432 | psql -d postgres -p 5433 • pg_dumpall --schema-only
  • 16. pg_upgrade • Сложная предварительная подготовка • Возможна потеря базы • Самый быстрый • Вероятные проблемы после обновления
  • 17. Как работает pg_upgrade user data pg_catalog pg_clog pg_catalog pg_clog old new user data pg_catalog pg_clog pg_catalog - freeze user data pg_catalog pg_clog pg_catalog pg_clog pg_clog pg_control user data pg_catalog pg_clog user data pg_catalog pg_clog dump/restore schema copy or link
  • 18. Подготовка к pg_upgrade • Установите все необходимые пакеты для PostgreSQL • Создайте пустую базу новой версии • pg_upgrade --check • pg_dumpall --schema-only • Проверьте extensions
  • 19. Обновление с помощью pg_upgrade • Создайте пустую базу новой версии PostgreSQL • Остановите старую базу • Используйте pgbouncer • Сделайте checkpoint
  • 20. Обновление с помощью pg_upgrade • Создайте пустую базу новой версии PostgreSQL • Остановите старую базу • Запустите обновление командой pg_upgrade • Используйте флаг -k для hard links вместо копирования файлов
  • 21. Обновление с помощью pg_upgrade • Создайте пустую базу новой версии PostgreSQL • Остановите старую базу • Запустите обновление командой pg_upgrade • Запустите новую версию базы PostgreSQL • Запустите сбор статистики
  • 22. Сбор статистики после pg_upgrade • Обычно запускается vacuumdb --all --analyze-in-stages • Иногда может быть лучше vacuumdb --all --analyze-only • Начиная с 9.5, можно запускать параллельные задания (-j) • Мы используем сгенерированный скрипт со стадиями 1, 10, 10000, и после сбора статистики по 10 разрешаем соединения к БД • Необходимо следить за блокировками
  • 23. Обновление с помощью pg_upgrade • Создайте пустую базу новой версии PostgreSQL • Остановите старую базу • Запустите обновление командой pg_upgrade • Запустите новую версию базы PostgreSQL • Запустите сбор статистики • Разрешите соединения с базой
  • 24. Extensions • pg_upgrade не обновляет расширения автоматически • Release notes для расширений важны • Некоторые расширения требуют обновления до pg_upgrade • Всем расширениям необходимо актуализировать версию после pg_upgrade • alter extension EXTENSION_NAME update;
  • 25. Обновление hot-standby (реплики) • Сначала обновите мастер-сервер • Реплика старой версии вам пригодится, если случилась беда при обновлении • Проверьте, что приложения работают штатно с новой версией PostgreSQL (postgresql.log) • Установите новую версию PostgreSQL на сервер реплики • Скопируйте новую базу командой pg_basebackup • Запустите реплику на новой версии PostgreSQL • Не используйте rsync
  • 26. Использование репликации для обновления PostgreSQL • Потоковая репликация не работает между разными версиями PostgreSQL • Другие виды репликации работают • Логическая репликация от 9.4 • Slony-I • Londiste
  • 27. Использование репликации для обновления PostgreSQL • Процедура обновления • Настройте новую версию PostgreSQL • Настройте репликацию со старой версии в новую • Сделайте мастером новую БД • Проблемы • Сложные схемы БД • Как правило, переносятся только данные в таблицах • Дополнительное место на дисках
  • 28. Метод Простой системы Дополнительное место на дисках Сложность Риски? dump/restore высокий двойное низкая низкие pg_upgrade (copy) высокий двойное высокая низкие pg_upgrade (link) низкий не нужно высокая высокие Logical Replication нет двойное высокая средние
  • 29. Полезные ссылки • http://momjian.us/main/writings/pgsql/pg_upgrade.pdf • https://blog.2ndquadrant.com/untangling-the-postgresql-upgrade/ • http://blog.endpoint.com/2016/12/postgres-statistics-and-pain-of- analyze.html • https://www.depesz.com/2016/11/08/major-version-upgrading-with- minimal-downtime/