현재 시스템 전체 물리 메모리는 256G 입니다. 데이터공간은 5TB입니다.
통계분석용으로 R 과 같이 사용되고 있으며.
매일매일 200개 이상의 JOB이 배치로 돌고있으며,
약 5개의 큰 테이블에 각각 몇억건씩 데이터가 생성되며.
25개정도의 파티션으로 나누어집니다. 작업시간은 약 7시간이며.
최대한 속도를 높이기 위해서 아래 설정중 추가하거나 변경해야할 사항이 있을까요...?
max_connections = 50
shared_buffers = 96GB
effective_cache_size = 192GB
work_mem = 2048MB
maintenance_work_mem = 2GB
min_wal_size = 4GB
max_wal_size = 8GB
checkpoint_completion_target = 0.9
wal_buffers = -1
default_statistics_target = 500
fsync = off
synchronous_commit = off
autovacuum = on
temp_buffer = 1024MB
dynamic_shared_memory_type = posix
log_timezone = 'ROK'
wal_writer_delay = 10ms
log_autovacuum_min_duration = 0
autovacuum_naptime = 30min
max_locks_per_transaction = 96
'enable은 생략하겠습니다.
bitmapscan = on
hashagg = on
hashjoin = on
indexscan = off
indexonlyscan = off
meterial = off
mergejoin = off
nestloop = off
seqscan = off
sort = off
tidscan = off
최근 잦은 배치 테스트때문 트랜잭션 ID가 겹쳣는지.
SINGLE MODE에서의 VACUUM을 해야하는 현상이 자주일어나고 있습니다. 시간은 4일 이상걸리구요.
AUTOVACUUM을 켜놧는 데도 불구하고. 이런현상이 일어나.
테이블 단위로 백업받고. 디비를 통째로 날린 후 새로운 디비에 다시 복구했습니다.
이런 용도로 사용하는 Postgres에서 과연 AUTOVACUUM을 켜놓은게 좋은건지.
아니면 AUTOVACUUM을 끄고 잡이 안도는 시간에 VACUUM을 날려야 할지 궁금합니다.
그리고 그동안 속도 이슈때문에 아카이브모드를 안쓰고있었는데.
트랜잭션 겹침 현상때문에 사용할까 고민중인데.
사용한다고 하면 7시간 걸리는 JOB이 어느정도 더 지연될지도 궁금합니다.
|