У меня есть приложение PHP ( Laravel 5.7 ), подключенное к кластеру БД на базе кластера Galera.Каждый вечер я запускаю cron job, чтобы очистить тысячи таблиц журнала из таблиц БД.Я запускаю Delete
оператор MySQL для удаления строк в таблице на основе диапазона отметок времени.
Мои операции удаления выглядят как
DB::delete('DELETE FROM incoming_logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 DAY)');
DB::delete('DELETE FROM provisioning_logs WHERE created_at < DATE_SUB(NOW(), INTERVAL '.Config::get('app.keep_provisioning_logs') .' DAY)');
ПРИМЕЧАНИЕ: И они определены в консольных командах Laravel и тех командах, которые запланированы в задачах Laravel.
Проблема: Каждый раз после запуска задания cron удалить огромный объем данных: Main memory
измаксимальное количество серверов БД, и когда я вручную очищаю кеш-память с помощью следующей команды, я получаю Main Memory
бесплатно.
sync; echo 1 > /proc/sys/vm/drop_caches
Мне нужно знать, почему кеш не повторно автоматически запрашивается, илипочему после задания cron моя память вышла так же, как и я столкнулся с проблемой too many connection
ошибки на MySQL.
Или это только потому, что мои серверы БД ( Всего 3 сервера БД под балансировщиком нагрузки)и синхронизация с использованием galena) синхронизация в реальном времени, поэтому, когда я пытаюсь удалить тысячи записей с помощью задания cron, сервер, который получает этот запрос на удаление, пытается удалить и поддерживать кэш для синхронизации с другими БД?Я не уверен, что происходит.Помогите, пожалуйста, решить проблему с максимизацией памяти.
Моя архитектура:
Один балансировщик нагрузки (прокси HA с тремя БД под ним) и кластер galera для синхронизации данных между этими тремя БД.