Comment résoudre les problèmes courants liés aux extensions pg_cron dans Amazon RDS pour PostgreSQL ?

Lecture de 3 minute(s)
0

Je souhaite résoudre les problèmes courants liés aux extensions pg_cron dans Amazon Relational Database Service (Amazon RDS) pour PostgreSQL.

Brève description

Amazon RDS pour PostgreSQL prend en charge les extensions pg_cron qui s'exécutent dans la base de données et vous permettent de planifier des commandes PostgreSQL. Lorsque vous exécutez les extensions pg_cron, vous pouvez rencontrer des problèmes avec des tâches qui ne s'exécutent pas à l'heure prévue et des mises à jour qui ne prennent pas effet.

Résolution

Pour résoudre les problèmes liés aux extensions pg_cron dans Amazon RDS pour PostgreSQL, procédez comme suit :

Remarque : Avant de commencer, assurez-vous que l'extension pg_cron est correctement configurée. Pour plus d'informations, consultez la section Configuration de l'extension pg\ _cron.

Tâches pg\ _cron planifiées qui ne s'exécutent pas à l'heure planifiée

Pour résoudre les problèmes liés aux tâches pg\ _cron planifiées qui ne s'exécutent pas à l'heure planifiée, procédez comme suit :

  1. Vérifiez que le lanceur pg_cron s'exécute dans la base de données qui lance les processus de tâches cron :

    Exemple :

    postgres=> select application_name,usename,backend_type,query,state,wait_event_type,age(now(),backend_start) as backend_start_age,age(now(),query_start) as query_start_age,age(now(),state_change) state_change_age from pg_stat_activity where backend_type = 'pg_cron launcher';

    Exemple de sortie :

     application_name  | usename  |   backend_type   | query | state  | wait_event_type |      backend_start_age       | query_start_age | state_change_age
    -------------------+----------+------------------+-------+--------+-----------------+------------------------------+-----------------+------------------
     pg_cron scheduler | rdsadmin | pg_cron launcher |       | [NULL] | Extension       | 2 mons 28 days 15:16:41.6642 | [NULL]          | [NULL]
    (1 row)

    Remarque : Si la requête précédente ne renvoie aucune ligne, cela signifie que le lanceur pg_cron n'est pas en cours d'exécution. Pour résoudre ce problème, redémarrez l'instance Amazon RDS pour démarrer le lanceur et autoriser l'exécution des tâches planifiées.

  2. Si la requête précédente renvoie des lignes, vérifiez si la tâche précédente est à l’état En cours d’exécution.
    Remarque : Pg_cron peut exécuter plusieurs tâches en parallèle, mais exécute une seule instance d’une tâche à la fois. Si l'exécution d'une deuxième tâche est planifiée alors que la première est en cours d'exécution, la deuxième tâche est mise en file d'attente. La deuxième tâche commence une fois la première exécution terminée.

    Exemple :

    postgres=> select *  FROM cron.job_run_details where status ='running';
     jobid | runid | job_pid | database | username | command | status | return_message | start_time | end_time
    -------+-------+---------+----------+----------+---------+--------+----------------+------------+----------  1 |     2 |   15712 | postgres | postgres | select pg_sleep(5) | running   | [NULL]         | 2024-07-10 16:40:00.025228+00 | [NULL]  (1 row)
  3. Assurez-vous que la planification des tâches est configurée pour s’aligner sur le fuseau horaire UTC. L'heure de planification pg_cron est basée sur le fuseau horaire UTC dans Amazon RDS pour les bases de données PostgreSQL.

Mises à jour de cron.max_running_jobs qui ne prennent pas effet

Le paramètre cron.max_running_jobs détermine le nombre maximal de tâches pouvant être exécutées simultanément. Si vous souhaitez augmenter le nombre de tâches cron.max_running_jobs, mettez à jour max_worker_processes afin qu’il soit égal ou supérieur à cron.max_running_jobs. Cron.max_running_jobs ne peut pas être supérieur à max_worker_processes. Si vous augmentez cron.max_running_jobs à une valeur supérieure à max_worker_processes, aucune mise à jour ne prend effet. Assurez-vous de redémarrer l'instance Amazon RDS lorsque vous mettez à jour le paramètre cron.max_running_jobs afin que les modifications prennent effet.

Informations connexes

Tables de planification des tâches et capture du statut

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois