postgresql vps
데이터베이스 및 인메모리 워크로드
작업 세트 크기가 특정 수준을 넘으면 유일하게 중요한 최적화는 전체를 RAM에 맞추는 것입니다. FORGE는 코어당 최대 16GB의 등록 ECC 메모리와 사전 구성된 hugepages 및 NUMA 인식 배치를 제공하며, 이는 PostgreSQL, Redis, ClickHouse 및 대형 JVM 힙이 요구하는 사항입니다. 그 아래에는 RAID10의 Gen5 NVMe가 있어 디스크로 나가는 쓰기도 병목이 아닙니다.
이 구성의 이유
FORGE는 단일 NUMA 선호도를 사용하여 메모리 접근을 작업을 수행하는 소켓에 국한시킵니다. 30개의 복원 지점이 있는 야간 백업을 추가하세요. 실제로 마주칠 실패 모드는 죽은 드라이브가 아니라 잘못된 마이그레이션이기 때문입니다.
배포할 구성
사이징
RAM은 데이터베이스가 아닌 작업 세트에 맞춰 조정하세요. 작업 세트는 핫 인덱스 페이지와 실제 접근된 행으로, 2TB OLTP 데이터셋의 10-20%인 경우가 많습니다. InnoDB 버퍼 풀을 RAM의 70-75%로 설정하거나, Postgres shared_buffers를 25%로 설정하고 나머지는 페이지 캐시에 맡기세요. FORGE는 코어당 16GB에 도달하므로, 512GB 버퍼 풀은 약 700GB RAM과 최소 44코어에 위치합니다. 캐시 미스가 1%를 초과하면 RAM을 구매하세요.
Hugepages과 THP가 다른 이유
256GB 버퍼 풀을 4KB 페이지로 매핑하려면 약 6400만 개의 페이지 테이블 항목이 필요합니다. TLB는 그 중 의미 있는 부분을 담을 수 없어, 무작위 접근 시 대부분의 조회에서 페이지 워크 비용이 발생합니다. 정적 2MB hugepages은 항목 수를 512분의 1로 줄여 워크도 함께 줄입니다. 대형 풀에서 쿼리당 CPU 시간의 측정 가능한 감소를 기대하세요. 부팅 시 vm.nr_hugepages로 할당하고, 풀 크기 + 약 10%로 설정하고, 데이터베이스 사용자에게 memlock 한도를 부여하세요. 투명 hugepages은 동일한 매핑을 달성하지만 기회적으로 수행하며 압축 중단이 발생합니다. THP를 비활성화하고 명시적으로 할당하세요.
작업 세트는 추측이 아닌 측정
데이터 디렉토리 크기에서 작업 세트를 추정하지 마세요. 측정하세요. Postgres에서 pg_buffercache는 shared_buffers를 차지하는 릴레이션을 알려주고, pg_statio_user_tables의 heap_blks_hit 대 heap_blks_read 비율은 테이블별 캐시 적중률을 제공합니다. MySQL에서 Innodb_buffer_pool_reads 대 Innodb_buffer_pool_read_requests가 동일한 신호를 제공합니다. 99% 이상이면 메모리에 있으며 RAM 추가는 거의 효과가 없습니다. 95-99% 사이면 절벽 가장자리에 있으며, 하나의 인덱스 없는 쿼리가 밀어낼 수 있습니다. 95% 미만이면 모든 지연 숫자는 실제로 변장한 디스크 지연 숫자입니다.
문제점
- 투명 hugepages을 활성화 상태로 방치. THP 조각 모음은 예측할 수 없는 순간에 프로세스를 밀리초 동안 중단시켜 설명할 수 없는 p99 지연으로 나타납니다. never로 설정하고 정적 hugepages을 대신 할당하세요.
- 듀얼 소켓 FORGE에서 NUMA 무시. 버퍼 풀이 한 노드에 배치되고 절반 코어가 인터커넥트를 통해 읽어, MySQL이 메모리가 남아 있어도 스왑할 수 있습니다. numactl --interleave=all 또는 명시적 바인딩을 사용하세요.
- 평균 처리량으로 IOPS 측정. 체크포인트, vacuum, 백업이 실제로 중요한 피크입니다. 정상 상태를 처리하는 풀은 체크포인트 플러시 중 전체 인스턴스를 중단시킬 수 있습니다.
머신 튜닝
- CPU 스케줄링 — Single-NUMA-node affinity · €14
- 백업 — Daily backup, 30 restore points · €11
- 기타 — Second-resolution metrics + alerting · €5
- 스토리지 및 암호화 — ZFS with hourly snapshots · €7