Requêtes incessantes à scheduler_task et scheduler_worker
Il s'agit initialement d'un mail envoyé à Marc, mais un autre problème avait surgi et on avait mis ça de côté :
Sur le serveur de prod, le process mysql est régulièrement au dessus de 10-20% de CPU.
J'ai loggé les requêtes et il y a plusieurs requêtes par seconde ayant un lien avec les workers et les schedulers alors qu'aucun process n'est queued ou assigned.
Il s'agit de requête du genre : SELECT scheduler_task.id, scheduler_task.application_name, scheduler_task.task_name, scheduler_task.group_name, scheduler_task.status, scheduler_task.function_name, scheduler_task.uuid, scheduler_task.args, scheduler_task.vars, scheduler_task.enabled, scheduler_task.start_time, scheduler_task.next_run_time, scheduler_task.stop_time, scheduler_task.repeats, scheduler_task.retry_failed, scheduler_task.period, scheduler_task.prevent_drift, scheduler_task.timeout, scheduler_task.sync_output, scheduler_task.times_run, scheduler_task.times_failed, scheduler_task.last_run_time, scheduler_task.assigned_worker_name FROM scheduler_task WHERE ((scheduler_task.assigned_worker_name = 'rbx.vidjil.org#26682') AND (scheduler_task.status = 'ASSIGNED')) ORDER BY scheduler_task.next_run_time LIMIT 1 OFFSET 0
et SELECT scheduler_worker.id, scheduler_worker.worker_name, scheduler_worker.first_heartbeat, scheduler_worker.last_heartbeat, scheduler_worker.status, scheduler_worker.is_ticker, scheduler_worker.group_names, scheduler_worker.worker_stats FROM scheduler_worker WHERE (scheduler_worker.worker_name = 'rbx.vidjil.org#9626')
Les (anciennes) requêtes sont loggées dans /var/log/mysql/mysql_general.log. J'ai désactivé le log pour ne pas saturer le disque. Pour réactiver, il faut aller dans /etc/mysql/my.cnf, chercher general, décommenter les deux lignes en lien avec general_log et redémarrer le serveur mysql.
Dev et test ont maintenant un Heartbeat de 10 secondes, rbx un Heartbeat de 3 secondes (inchangé), la charge de la bdd semble être réduite.
On est effectivement passés à environ 3,1 requêtes par seconde, ce qui semble cohérent. D'après les valeurs que tu donnes, en l'espace de 30 secondes on va avoir 3 heartbeats de chaque worker de dev et de test (soit au total 3 heartbeats * 3 workers * 2 serveurs = 18 heartbeats) et on va en avoir 10 pour rbx ( * 3 workers, soit 30 heartbeats). On arrive à 48 heartbeats en 30 secondes, soit environ 1,6 par seconde. Chaque heartbeat semble générer 2 requêtes, ce qui donne 3,2 requêtes par seconde. On tombe pas loin de ce que j'ai mesuré.
On pourrait diminuer encore du côté de dev et test, mais au final ça ne changerait pas grand chose puisque maintenant c'est rbx qui fait le plus de heartbeats.