За последние 24 часа нас посетили 19024 программиста и 1656 роботов. Сейчас ищет 1191 программист ...

Большый БД. Как ускорить запросы

Тема в разделе "PostgreSQL", создана пользователем DarkU, 5 янв 2022.

Метки:
  1. DarkU

    DarkU Активный пользователь

    С нами с:
    15 июл 2013
    Сообщения:
    12
    Симпатии:
    2
    Доброго времени суток.
    Есть проект в которого более 3млн новых записей каждый день. БД большая. Для ускорения запросов зделати table partition по месяцам. БД postgresql 12. Но этого уже не хватает. Сервера 60гб RAM, 8k IOPS 100+ CPU.
    Какие варианты ускорения работы БД? (реплика read only уже есть. Плодить еще кластеры не хочеться).
    Спасибо.

    П.С.
    перенесите пожалуйста тему в соответсвующий раздел, спабоси.
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.483
    Симпатии:
    281
    Анализировать наиболее частые запросы. Их результаты хранить в отдельных таблицах.
    Пополняя их встроенными процедурами по мере добавления новых записей.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.788
    Симпатии:
    1.328
    Адрес:
    Лень
    Бизнес логику перелопатить, если она там вообще есть. Выносить запрошенные результаты в cache и методом lazy запрашивать данные, если таковы отсутствуют. Циклические UPDATE, SELECT, INSERT сносить на помойку. Пересмотреть Архитектуру приложения. Регистрировать особые действия в лог файл/таблицу, при включенном дебаге (хотя регистрация действий всегда нужны, мол пи3дос пришел и пошел логи чекать).
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    Сферический конь в вакууме.
    Какова структура БД, индексы?
    Какие запросы тормозят?
     
    Slava Rozhnev нравится это.
  5. DarkU

    DarkU Активный пользователь

    С нами с:
    15 июл 2013
    Сообщения:
    12
    Симпатии:
    2
    Спасибо всем.
    ADSoft не суть в запросах. Такие БД не обслуживають глупые люди.

    MouseZver циклический UPSERT нет. Cache это хорошо, но его нужно обновлять.

    Drunkenmunky интересная идея. Спасибо.


    Каким образом работаю большие сервисы, есть варианты? Таким как FB и все им подобные? Google сегментирует бази по определенным правилам. На каждое правило ложить некоторая часть слота БД + балансеры и репликация.

    Если иметь хеш данных, насколько можно выиграть в оптимизации? Идея в том, что би хеш был флагом изменение данных и при совпадение выбирать не из базы, а из кеш таблиц? По сути что то подобное как БД кеширует данные, но после UPDATE кеш стает "грязным" и БД берет данных из таблиц.