Amazon RDS for PostgreSQL の pg_cron 拡張機能に関する一般的な問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

PostgreSQL 用 Amazon Relational Database Service (Amazon RDS) の pg_cron 拡張機能に関する一般的な問題のトラブルシューティングを行いたいと思っています。

簡単な説明

AmazonRDS for PostgreSQL は、データベース内で実行される pg_cron 拡張機能をサポートしており、PostgreSQL コマンドをスケジュールすることができます。pg_cron 拡張機能を実行すると、ジョブがスケジュールされた時間に実行されなかったり、更新が有効にならなかったりする問題が発生する場合があります。

解決方法

AmazonRDS for PostgreSQL の pg_cron 拡張に関する問題のトラブルシューティングを行うには、以下の手順を実行してください。

注: 始める前に、pg_cron 拡張モジュールが正しく設定されていることを確認してください。詳細については、「pg_cron 拡張機能のセットアップ」を参照してください。

pg_cron ジョブがスケジュールされた時間に実行されない

スケジュールされた pg_cron ジョブが、スケジュールされた時刻に実行されない問題をトラブルシューティングするには、次の手順を実行します。

  1. cron ジョブワーカーを起動するデータベースで、pg_cron ランチャーが実行されていることを確認します。

    例:

    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 ランチャーは実行されていません。これを解決するには、AmazonRDS インスタンスを再起動してランチャーを起動し、スケジュールされたジョブの実行を許可します。

  2. 上記のクエリが行を返す場合は、前のジョブの状態が Running かどうかを確認してください。
    注: Pg_cron は複数のジョブを並行して実行できますが、ジョブのインスタンスは一度に 1 つずつ実行します。最初のジョブの実行中に 2 番目のジョブ実行が開始するようにスケジュールされている場合、2 番目のジョブはキューに入れられます。2 番目のジョブは、最初のジョブの実行が完了した後に開始します。

    例:

    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_processescron.max_running_jobs と同じかそれ以上になるように更新します。Cron.max_running_jobsmax_worker_processes より大きくすることはできません。cron.max_running_jobsmax_worker_processes よりも大きくすると、いずれの更新も有効になりません。変更を有効にするには、cron.max_running_jobs パラメータの更新時に、AmazonRDS インスタンスを必ず再起動してください。

関連情報

ジョブのスケジュール設定とステータス取得用のテーブル

AWS公式
AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ