Добавить в корзинуПозвонить
Найти в Дзене
Postgres DBA

DeepSeek : оптимизация ожиданий BufferIO

Как уменьшить количество событий ожидания wait_event BufferIO для СУБД PostgreSQL ? Мало shared_buffers Действие Увеличьте shared_buffers до 25% от объема оперативной памяти сервера. Резкие всплески I/O-нагрузки Действие Увеличьте checkpoint_timeout и max_wal_size, чтобы растянуть запись данных во времени Использование диска вместо памяти Действие Настройте work_mem для операций сортировки и хеширования, чтобы они выполнялись в оперативной памяти. VACUUM, CREATE INDEX Действие Увеличьте maintenance_work_mem для ускорения операций обслуживания, таких как вакуумирование и создание индексов. Диски не используются на полную Действие Для дисков SSD увеличьте параметр effective_io_concurrency (до нескольких сотен). Вздутые индексы заставляют PostgreSQL читать с диска больше страниц данных, чем необходимо. Регулярно проводите REINDEX для проблемных индексов. Высокий уровень обновлений и удалений приводит к накоплению "мертвых" строк и вздутию. Уменьшите параметры autovacuum_vacuum_scale_fac
Оглавление

Вопрос

Как уменьшить количество событий ожидания wait_event BufferIO для СУБД PostgreSQL ?

⚙️ Настройка параметров сервера

1. Недостаток памяти

Мало shared_buffers

Действие

Увеличьте shared_buffers до 25% от объема оперативной памяти сервера.

2. Частые контрольные точки

Резкие всплески I/O-нагрузки

Действие

Увеличьте checkpoint_timeout и max_wal_size, чтобы растянуть запись данных во времени

3. Медленные операции сортировки

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

Действие

Настройте work_mem для операций сортировки и хеширования, чтобы они выполнялись в оперативной памяти.

4.Медленные операции обслуживания

VACUUM, CREATE INDEX

Действие

Увеличьте maintenance_work_mem для ускорения операций обслуживания, таких как вакуумирование и создание индексов.

5.Низкая параллельность I/O

Диски не используются на полную

Действие

Для дисков SSD увеличьте параметр effective_io_concurrency (до нескольких сотен).

🔍 Оптимизация запросов и схемы базы данных

Боритесь с вздутием индексов (Index Bloat):

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

Сделайте автовакуум более агрессивным:

Высокий уровень обновлений и удалений приводит к накоплению "мертвых" строк и вздутию. Уменьшите параметры autovacuum_vacuum_scale_factor и autovacuum_analyze_scale_factor, чтобы автовакуум запускался чаще.

Устраните последовательные сканирования (Sequential Scans):

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

Используйте партиционирование:

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