MySQL服务器最大化内存,Galera群集

时间:2018-12-19 17:03:13

标签: mysql linux laravel memory-management galera

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

我的删除操作看起来像

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个数据库服务器,并使用galena进行同步)实时同步,所以当我尝试使用cron作业删除数千条记录时,该服务器得到该删除请求尝试删除并维护缓存以与其他数据库同步?我不确定发生了什么。请帮助我解决内存不足的问题。

我的体系结构:
一个负载平衡器(具有三个数据库的HA代理)和 galera群集,用于在这三个数据库之间同步数据。

1 个答案:

答案 0 :(得分:1)

您每天晚上要删除一半桌子吗?考虑每小时删除一个小时的值。

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

对于PARTITIONing来说,这项任务非常出色。

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