🌍 Привет мир! 👋
🌍 Привет мир! 👋
Как правило, если вы являетесь back-end разработчиком, вы не сильно переживаете за
🚀 Мотивация
Есть парочка пунктов, которые нужно соблюдать, чтобы ваша база данных была производительной: корректные (нормализованные) таблицы, запросы, индексы и наверное еще… (пишем в комментариях, что не упомянул). Сегодня разговор пойдет про
❓ Что такое bloat
🔍 Как найти раздутые таблицы или индексы
Да, раздутие может быть как на таблицах, так и на индексах. И благо postgre сам следит за
📌 pgstattuple - модуль, который хранит информацию о таблицах и индексах в базе. Позволяет определить количество "мертвого пространства".
‼️ Как правило “порог выраженный в процентах" с которого
📌 Находим таблицы, у которых раздутие более 30% (Скрипт)
📌 Находим индексы, у которых раздутие более 30% (Скрипт)
👇 Основные способы уменьшения раздувания:
💡 VACUUM - команда, которая является основным инструментом для борьбы с раздуванием.
Выполняет задачи:
Очищает
Обновляет статистику базы данных. Точная статистика помогает принимать лучшие решения для query execution plans.
💡 REINDEX - команда которая перестраивает индекс, чтобы удалить раздувание. Можно использовать для определенного индекса, таблицы или всей базы данных.
‼️ Обратите внимание:
🖇️ Функция autovacuum автоматически выполняет операции VACUUM.
🖇️ Можно использовать тонкую настройку через параметры в конфигурации autovacuum_vacuum_scale_factor, autovacuum_analyze_scale_factor и autovacuum_vacuum_threshold на основе рабочей нагрузки и характеристик таблицы.
🖇️ Vacuum full освобождает больше места, но блокирует таблицу. Лучше использовать в периоды низкой активности.
🖇️ Регулировка Fillfactor для таблиц и индексов. Более низкий fillfactor оставляет больше места для обновлений, снижая скорость накопления раздувания
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#POSTGRESQL
Как правило, если вы являетесь back-end разработчиком, вы не сильно переживаете за
performance базы данных. Вы спокойно пишите свои запросы, местами более сложные, но на этом в общем и целом все. Однако, если проект не маленький, нагрузка прям такая, что порой заставляет смотреть графики, а отдельных специалистов по базе нет. То именно вы! Тот человек, который засучит рукава и пойдет смотреть проблемы с производительностью, иначе никак, грустные клиенты === мало денег. Cегодня про Bloats в #POSTGRESQL.🚀 Мотивация
Есть парочка пунктов, которые нужно соблюдать, чтобы ваша база данных была производительной: корректные (нормализованные) таблицы, запросы, индексы и наверное еще… (пишем в комментариях, что не упомянул). Сегодня разговор пойдет про
bloats, о которых не все разработчики знают, но они прям могут вызвать деградацию вашей базы данных.❓ Что такое bloat
PostgreSQL хранит данные в файлах на диске. Частые операции update и delete могут привести к ситуации, когда в файлах остается много неиспользуемого пространства, это называется bloat. Так происходит потому что система не удаляет старые данные немедленно. Вместо этого она помечает их как устаревшие и добавляет новые данные в другом месте. Этот процесс является частью концепции PostgreSQL, которая обеспечивает data consistency и позволяет выполнять одновременно нескольких транзакций.🔍 Как найти раздутые таблицы или индексы
Да, раздутие может быть как на таблицах, так и на индексах. И благо postgre сам следит за
dead_tuple (bloats), все что нужно сделать чтобы найти их, это пара SQL запросов, далее сделать анализ и при необходимости почистить.📌 pgstattuple - модуль, который хранит информацию о таблицах и индексах в базе. Позволяет определить количество "мертвого пространства".
‼️ Как правило “порог выраженный в процентах" с которого
bloats таблиц или индексов, должно вызывать беспокойство, может варьироваться в зависимости от конкретного использования и конфигурации базы данных. Однако, общая рекомендация, это примерно превышение 20-30% от общего объема данных таблицы (индекса).📌 Находим таблицы, у которых раздутие более 30% (Скрипт)
📌 Находим индексы, у которых раздутие более 30% (Скрипт)
👇 Основные способы уменьшения раздувания:
💡 VACUUM - команда, которая является основным инструментом для борьбы с раздуванием.
Выполняет задачи:
Очищает
dead tuples, строки которые были обновлены или удалены, но все еще занимают место.Обновляет статистику базы данных. Точная статистика помогает принимать лучшие решения для query execution plans.
VACUUM example_table;
💡 REINDEX - команда которая перестраивает индекс, чтобы удалить раздувание. Можно использовать для определенного индекса, таблицы или всей базы данных.
REINDEX TABLE example_table;
REINDEX INDEX example_index;
‼️ Обратите внимание:
🖇️ Функция autovacuum автоматически выполняет операции VACUUM.
🖇️ Можно использовать тонкую настройку через параметры в конфигурации autovacuum_vacuum_scale_factor, autovacuum_analyze_scale_factor и autovacuum_vacuum_threshold на основе рабочей нагрузки и характеристик таблицы.
🖇️ Vacuum full освобождает больше места, но блокирует таблицу. Лучше использовать в периоды низкой активности.
🖇️ Регулировка Fillfactor для таблиц и индексов. Более низкий fillfactor оставляет больше места для обновлений, снижая скорость накопления раздувания
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#POSTGRESQL

Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.