MySQL 服务器内存用尽,Galera 集群

MySQL Server maxing out memory, Galera Cluster

我有 PHP (Laravel 5.7) 应用程序连接到由 Galera 集群提供支持的数据库集群。我每晚 运行 执行 cron 作业以从数据库 table 中清除成千上万的日志数据。我运行Delete语句MySQL根据时间戳范围删除table中的行。

我的删除操作看起来像

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 作业后我的内存耗尽以及我在 MySQL 上遇到 too many connection 错误的问题。

或者这仅仅是因为我的数据库服务器(总共 3 个数据库服务器 在负载平衡器下并使用方铅矿同步)实时同步,所以当我尝试使用 cron 删除数千条记录时工作,收到删除请求的服务器尝试删除并维护缓存以与其他数据库同步?我不确定发生了什么。请帮助我解决我的内存最大化问题。

我的架构:
一个负载均衡器(HA 代理下有三个数据库)和 galera 集群 在这三个数据库之间同步数据。

你每天晚上要删除一半 table?考虑每小时删除一个小时的价值。

你有INDEX(created_at)吗?这将有助于每小时清除,但可能不会每天清除。

这项任务对 PARTITIONing 来说是一项出色的任务。

讨论了这些以及更多技术 here