1️⃣0️⃣ PostgreSQL и 10 млн записей. Всё плохо?
❌ Очень внезапно сайт стал медленно грузиться. Почему?
=> Перешагнули психологический рубеж в 10 млн записей.
Что при этом происходит:
• Индексы перестают помещаться в RAM
• Планировщик запросов выбирает неоптимальные пути
• Простые JOIN превращаются в многоминутные операции
• Главный запрос выполнялся 28 секунд 🐤
✅ Что сделали:
• Провели анализ — нашли самые тяжелые запросы через pg_stat_statements
• Оптимизировали индексы — заменили простые индексы на составные и частичные
• Переписали запрос — разбили на CTE для лучшей оптимизации
• Обновили статистику — ANALYZE для помощи планировщику
💯 Результат:
• Время запроса улучшилось: с 28 сек до 120 мс (в 233 раза)
• Чтение строк: с 15 млн до 8 тыс
• Нагрузка на CPU: с 95% до 12%
‼️ Главные выводы:
• Индексы ≠ волшебная палочка — нужно понимать, как их использует планировщик
• 10 млн — психологический барьер, после него меняется поведение СУБД
• Без EXPLAIN ANALYZE и pg_stat_statements работаешь вслепую
• Иногда проще переписать запрос, чем добавить очередной индекс
—> Полная версия на habr <—
Post #379
2.99K
- 🔥 19
- 👍 4
- ⚡ 3