Доброго времени суток. Есть проект в которого более 3млн новых записей каждый день. БД большая. Для ускорения запросов зделати table partition по месяцам. БД postgresql 12. Но этого уже не хватает. Сервера 60гб RAM, 8k IOPS 100+ CPU. Какие варианты ускорения работы БД? (реплика read only уже есть. Плодить еще кластеры не хочеться). Спасибо. П.С. перенесите пожалуйста тему в соответсвующий раздел, спабоси.
Анализировать наиболее частые запросы. Их результаты хранить в отдельных таблицах. Пополняя их встроенными процедурами по мере добавления новых записей.
Бизнес логику перелопатить, если она там вообще есть. Выносить запрошенные результаты в cache и методом lazy запрашивать данные, если таковы отсутствуют. Циклические UPDATE, SELECT, INSERT сносить на помойку. Пересмотреть Архитектуру приложения. Регистрировать особые действия в лог файл/таблицу, при включенном дебаге (хотя регистрация действий всегда нужны, мол пи3дос пришел и пошел логи чекать).
Спасибо всем. ADSoft не суть в запросах. Такие БД не обслуживають глупые люди. MouseZver циклический UPSERT нет. Cache это хорошо, но его нужно обновлять. Drunkenmunky интересная идея. Спасибо. Каким образом работаю большие сервисы, есть варианты? Таким как FB и все им подобные? Google сегментирует бази по определенным правилам. На каждое правило ложить некоторая часть слота БД + балансеры и репликация. Если иметь хеш данных, насколько можно выиграть в оптимизации? Идея в том, что би хеш был флагом изменение данных и при совпадение выбирать не из базы, а из кеш таблиц? По сути что то подобное как БД кеширует данные, но после UPDATE кеш стает "грязным" и БД берет данных из таблиц.