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 작업 관련 문제를 해결하려면 다음 단계를 수행하십시오.
-
pg_cron 실행 프로그램이 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 실행 프로그램이 실행되고 있지 않은 것입니다. 이 문제를 해결하려면 Amazon RDS 인스턴스를 다시 시작하여 실행 프로그램을 시작하고 예약된 작업이 실행되도록 하십시오.
-
이전 쿼리가 행을 반환하는 경우에는 이전 작업이 실행 중 상태인지 확인하십시오.
참고: 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)
-
작업 일정이 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_jobs 이상이 되도록 업데이트하십시오. Cron.max_running_jobs는 max_worker_processes보다 클 수 없습니다. cron.max_running_jobs를 max_worker_processes보다 높게 늘리면 업데이트가 적용되지 않습니다. 변경 사항을 적용하기 위해서는 cron.max_running_jobs 파라미터를 업데이트할 때 Amazon RDS 인스턴스를 재부팅해야 합니다.
관련 정보
작업 예약 및 상태 캡처를 위한 테이블