У меня есть несколько приложений PHP, работающих на разных виртуальных хостах на сервере Apache. Каждое приложение использует MySQL как бэкэнд. Каждое приложение использует разные серверы MySQL в одном центре обработки данных. Некоторые из наших приложений обрабатывают большой объем данных из базы данных для создания некоторых сводных отчетов, что иногда занимает около 30-40 секунд (мы планируем запускать это асинхронно в будущем). Эта служба отчетов использует набор небольших запросов вместо большого запроса, который занимает много времени. Это было предназначено для сокращения времени блокировки одной таблицы. Несмотря на то, что каждое из наших приложений использует отдельные базы данных, запуск этого отчета вызывает серьезное снижение производительности других приложений, размещенных на этом сервере. Иногда даже тайм-ауты запросов возникают и в других приложениях.
Использование ОЗУ / ЦП на сервере приложений ниже 50% при выполнении этих отчетов.
Я использую PHP 7.2 на Apache 2.4 с использованием PHP-FPM. Модули mpm_event
, fcgid
, proxy
и proxy_fcgi
включены в Apache и MySQL версии 5.7
Основная причина, по которой мы используем несколько серверов баз данных - это уменьшить влияние одного приложения на другое. Почему такое поведение происходит? и как это можно решить?
innodb_buffer_pool_size
соответственно. Сколько у вас оперативной памяти?