За последние 24 часа нас посетили 17412 программистов и 987 роботов. Сейчас ищут 465 программистов ...

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

Тема в разделе "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.474
    Симпатии:
    281
    Анализировать наиболее частые запросы. Их результаты хранить в отдельных таблицах.
    Пополняя их встроенными процедурами по мере добавления новых записей.
     
  3. MouseZver

    MouseZver Суперстар

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

    ADSoft Старожил

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

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

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

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

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


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

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