如何对 Amazon RDS for PostgreSQL 中 pg_cron 扩展的常见问题进行故障排除?

2 分钟阅读
0

我想对 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 中 pg_cron 扩展的常见问题进行故障排除。

简短描述

Amazon RDS for PostgreSQL 支持在数据库内部运行的 pg_cron 扩展,允许您调度 PostgreSQL 命令。当您运行 pg_cron 扩展时,可能会遇到任务未按计划时间运行以及更新未生效的问题。

解决方法

要对 Amazon RDS for PostgreSQL 中 pg_cron 扩展的问题进行故障排除,请完成以下步骤:

**注意:**在开始之前,请确保 pg_cron 扩展设置正确。有关更多信息,请参阅设置 pg_cron 扩展

未在预定时间运行的既定 pg_cron 作业

要对未按预定时间运行的既定 pg_cron 作业问题进行故障排除,请完成以下步骤:

  1. 确认 pg_cron 启动器在启动 cron 作业 worker 的数据库中运行:

    示例:

    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';

    输出示例:

     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)

    **注意:**如果先前的查询返回 0 行,则表明 pg_cron 启动器未运行。要解决此问题,请重启 Amazon RDS 实例,以启动启动器并允许既定任务运行。

  2. 如果先前的查询返回了行,则检查前之前的作业是否处于正在运行状态。
    注意: Pg_cron 可以并行运行多个作业,但一次只能运行一个作业实例。如果计划在第一个作业运行时启动第二个作业,则第二个作业将排队。第二个作业将在第一个作业运行完成后启动。

    示例:

    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. 请确保将作业计划配置为与 UTC 时区保持一致。pg_cron 的计划时间基于 Amazon RDS for PostgreSQL 数据库中的 UTC 时区。

对未生效的 cron.max_running_jobs 的更新

cron.max_running_jobs 参数决定了可以同时运行的最大作业数。如果您想增加 cron.max_running_jobs,则更新 max_worker_processes,使其等于或高于 cron.max_running_jobsCron.max_running_jobs 不能高于 max_worker_processes。如果您增加 cron.max_running_jobs,使其高于 max_worker_processes,则任何更新都不会生效。在更新 cron.max_running_jobs 参数时,请务必重启 Amazon RDS 实例,以使更改生效。

相关信息

用于调度作业和捕获状态的表

AWS 官方
AWS 官方已更新 3 个月前