我正在使用 gearman 的 udf 从更新后触发器向 gearman 发送后台作业。
该文档说明了以下内容:
gman_do* 函数采用可选的第三个参数,即唯一的作业 ID。这允许您在同一个唯一 ID 下提交多个作业,它们将在队列中“合并”以仅运行一次。请注意,gearmand 只会合并队列中或正在运行的作业,它不会在作业完成后跟踪唯一 ID。例如,以下内容确保您只为每个主机运行一次作业:
SELECT gman_do_background("reverse", Host, Host) AS test FROM mysql.user;
这使它看起来已经准备好处理大量的行更新,而不会淹没我的齿轮工的队列。
但是当我一次更新 30k 行时,我的 gearman 守护程序会暂时无法访问,并且“netstat”在 4730 端口上显示 ~30k 连接,我想这可以解释原因。
知道如何在不减慢更新速度的情况下防止冻结发生吗?我只需要在整个更新查询后触发一次 gearman 作业,但据我所知,mysql/mariadb 不处理语句后触发器。