initrd0
@initrd0
Это я =)

Как снизить нагрузку на БД или какую БД использовать?

Добрый день, коллеги.

Есть проект, где используются несколько таблиц в БД, где записей от 100 тысяч до миллиона (и количество записей будет расти, причем значительно). Пол года он проработал с mysql + pdo - проблем никаких не было, начала расти нагрузка на процессор, но заказчик сказал "работает - не трожь". Сейчас проект переходит другому заказчику, сайт уже знатно подтормаживает и естественно это никого не устраивает.

Не знаю, какие параметры важны, чтобы было понятно насколько все плохо и что менять, задавайте, пожалуйста, уточняющие вопросы.

Мой вопрос - как быстро снизить нагрузку на БД, наверняка же тот же mysql не предназначен для работы с 100 записями и не более?

Если менять mysql на что-то другое - порекомендуйте, пожалуйста, на что и как с минимальными затратами переехать
  • Вопрос задан
  • 354 просмотра
Решения вопроса 2
Maksclub
@Maksclub
maksfedorov.ru
В порядке действий:
  • анализ, что работает медленно (не "заказчик говорит медленно", а например "запрос для товаров, при выборке по акциям и покупателям" работает 2 секунды)
  • оптимизация кода, работающего с запросами (снижение числа запросов или более точные выборки) -- самая популярная проблема,

    - снижал на этом только этапе в 1000-1500 раз,
    - видел по 1500 запросов на страницу,
    - видел 1 запрос, но на всю таблицу и потом по коду с этими данными гигантская работа, когда можно было сделать 2 ооочень шустрых запроса в БД с конечными данными :)
    - запросы в цикле, очень много раз видел (гуглить проблема N+1)


  • оптимизация медленных запросов

    Сделать запрос более быстрым, за счет или более точных выборок, или более верного синтаксиса, или стоит например раздробить на нексколько очень мелких, а бекендом все привести к нужному виду

  • индексы (сильно оптимизируют и бывают достаточны для решений многих бед со скоростью на большой выборке)
  • кеш на стороне БД
  • кеш на стороне приложения
  • денормализация некоторых данных, например предагрегация (например меню сайта и нужно для каждого вывести число твоаров, каждый пункт связан с категорией, категорий много, чтобы каждый раз по 100 категорий на подсчет товаров для каждой не делать -- делать это сильно реже и хранить в некой агрегирующей табличке)

С техниками типа шардинга/репликации никогда не работал
Ответ написан
landergate
@landergate
IT-шный jack-of-all-trades
Миллионы записей - это совершенно обычный и, я бы сказал, крайне небольшой кейс для MySQL.

Самое быстрое: отпрофилировать запросы (например, performance_schema=1 и подключить sys-таблицы, они наполнятся данными по прошествии времени), найти неоптимизированные индексами и добавить недостающие индексы на этих таблицах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы