@waterlilies

Как снизить нагрузку на БД при большом количестве запросов?

Небольшая ремарка: есть скрипт, который порождает определенное количество дочерних процессов (также скрипты) для фоновой работы с базой. В целом, операций на запись больше чем операций на чтение. На данный момент mysql полностью нагружает CPU, запросы падают в очередь. Помимо оптимизации запросов и сокращения их количества, что еще было бы уместно? Т.к. скрипты работают в фоне в независимости от того, запрашивает пользователь веб-страницы или нет.
  • Вопрос задан
  • 712 просмотров
Пригласить эксперта
Ответы на вопрос 5
Surzhikov
@Surzhikov
Разработчик
Возможно поменять my.cnf на large.cnf если оперативная память позволит.
В 90% проектов это действие решает проблемы на долго..
Ответ написан
Вы используете транзакциями в своих запросах ? Если у вас есть логи или ревизии сносите их к чертям. Скрипты или сам JS - это клиентский язык, он работает у клиента в браузере, а не на серваке. Если вся проблема в скриптах, то можно же запускать их по запросу, а не держать включенными постоянно.
Ответ написан
@LiguidCool
К выше написанному - кластеризация.
Ответ написан
Комментировать
2ord
@2ord
Не факт что проблема именно из-за СУБД. Ведь задача СУБД - обслуживать запросы приложений.
Вообще, нужно более детально произвести мониторинг процессов в СУБД, чтобы точно сказать где узкое место. Можно встроенными средствами, а также набором инструментов Percona.
Советую проверить также скриптовую программу на наличие неоптимизированных запросов вставок в БД.
Если идёт вставка большого количества записей, то можно оптимизировать одной вставкой, обернув в транзакцию.
Ответ написан
Комментировать
@LAV45
1) Переезжайте на PostgreSql
2) Используйте batch insert, у меня по 100 000 записей пишет и не запиниется
3) Удаляйте B-Tree индекс он при каждой вставке производит переиндексацию всего дерева, в PostgreSql с этим немного лудше там переиндексация выполняется отложенно.
У Mysql тормаза начинаются при 2.000.000 записей в таблице у PostgreSql после 5.000.000.
4) Если перейдете на PostgreSql можно поднять вторую базу в режме master-slave
В master писать, со slave читать. И синхронизировать из в асинхронном режиме. Таким образом slave будет немного отставать от master (примерно на 2 сек в зависимости от нагрузки) но slave будет просто летать.

#PostgreSQLRussia митап в компании Avito.ru
https://www.youtube.com/watch?v=2LDAcGZRAEM
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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