자동 진공 서버 매개 변수 구성

완료됨

Vacuum 프로세스는 워크로드에 맞게 Vacuum 프로세스를 최적화할 수 있는 자동 진공 서버 매개 변수를 사용하여 구성됩니다. Azure Portal에서 Azure Database for PostgreSQL 서버를 선택하고 왼쪽 메뉴에서 서버 매개 변수를 선택합니다. 검색 창에 자동 진공을 입력합니다. 또는 SQL을 사용하여 시스템 카탈로그 뷰를 쿼리하고 다음 쿼리를 사용하여 자동 진공의 현재 구성을 찾을 수 있습니다.

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
매개 변수 이름 기본값 설명
자동 진공 켜기 자동 진공 서버 프로세스를 사용하거나 사용하지 않도록 설정합니다. 자동 진공은 항상 사용하도록 설정해야 합니다.
autovacuum_analyze_scale_factor 0.1 진공 작업을 트리거할지 여부를 결정할 때 autovacuum_vacuum_threshold에 추가할 테이블의 비율을 지정합니다. 예를 들어 0.2는 테이블 크기의 20%입니다.
autovacuum_analyze_threshold 50 한 테이블에 대한 분석 프로세스를 트리거하는 데 필요한 삽입, 업데이트 또는 삭제된 행의 수입니다.
autovacuum_freeze_max_age 200000000 트랜잭션 ID 래핑을 방지하기 위해 테이블에서 자동 진공을 트리거하기 전 최대 기간(트랜잭션)입니다.
autovacuum_max_workers 3 자동 진공 시작 관리자가 아닌 한 번에 실행되는 최대 자동 진공 프로세스 수입니다.
autovacuum_multixact_freeze_max_age 400000000 테이블에서 자동 진공을 트리거하기 전 최대 사용 기간(multixact)을 통해 multixact 래핑을 방지합니다.
autovacuum_naptime 60초 데이터베이스의 자동 진공 프로세스 간의 지연입니다. 각 라운드에서 디먼은 데이터베이스를 검사하고, 해당 데이터베이스의 테이블에 필요한 대로 VACUUM 및 ANALYZE 명령을 실행합니다.
autovacuum_vacuum_cost_limit -1 자동 진공 작업의 최대 비용입니다. -1(기본값)을 지정하면 기본 vacuum_cost_limit 값이 사용됩니다. 작업자가 두 명 이상인 경우 실행 중인 자동 진공 작업자 간에 값이 비례적으로 배포됩니다. 각 작업자의 합계는 이 변수의 값을 초과할 수 없습니다.
autovacuum_vacuum_insert_threshold 1000 하나의 테이블에 대해 진공을 트리거하는 삽입된 행 수입니다.
autovacuum_vacuum_scale_factor 0.2 autovacuum_vacuum_threshold와 함께 사용됩니다. 진공을 트리거할지 여부를 결정하는 데 사용되는 테이블의 비율입니다.
autovacuum_vacuum_threshold 50 테이블에 대한 진공을 트리거하기 위해 업데이트, 삽입 또는 삭제된 행의 최소 수입니다.
autovacuum_vacuum_insert_scale_factor 0.2 진공 프로세스를 트리거하기 위해 autovacuum_vacuum_insert_threshold에 추가할 테이블 크기의 비율을 지정합니다.
autovacuum_work_mem -1KB 각 자동 진공 프로세스가 사용할 수 있는 최대 메모리입니다.
log_autovacuum_min_duration -1 자동 진공 작업으로 기록된 시간(밀리초)입니다.

진공 프로세스를 너무 자주 또는 너무 드물게 실행해서는 안 됩니다. 최적의 빈도는 워크로드에 따라 다릅니다. 각 자동 진공 매개 변수를 테스트하여 워크로드에 가장 적합한 항목을 찾습니다. 진공 프로세스의 비용에는 다음이 포함됩니다.

  • 진공이 실행되면 데이터 페이지가 잠깁니다.
  • 진공 프로세스는 컴퓨팅 시간과 메모리를 사용합니다.

테이블 수준에서 진공 최적화

Azure Database for PostgreSQL에서 자동 진공 매개 변수는 테이블 수준에서 설정할 수 있습니다. 일부 테이블이 다른 테이블보다 더 많이 업데이트되면 성능이 개선될 수 있습니다. 테이블 수준에서 자동 진공을 설정하는 예제:

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

테이블 수준에서 자동 진공은 동기 프로세스입니다. 테이블에 있는 데드 튜플의 비율이 높을수록 자동 진공 프로세스에서 발생하는 "비용"도 커집니다.

업데이트 속도가 빠른 테이블의 경우 테이블을 여러 테이블로 분할하는 것이 좋습니다. 이 분할은 자동 진공을 병렬화하고 하나의 테이블에 대한 "비용"을 줄이는 데 도움이 됩니다. 병렬 자동 진공 작업자 수를 늘릴 수도 있습니다.