Postgresql 29

Vaccum

VACUUM은 dead tuple 을 정리하고, 디스크 공간을 확보하며, 테이블 통계 정보를 업데이트합니다.임계치 이상으로 발생한 Dead Tuple을 정리하여 FSM (Free Space Map) 으로 반환Transaction ID Wraparound 방지통계정보 갱신visibility map을 갱신하여 index scan 성능 향상Vacuum 종류 PostgreSQL에는 여러 종류의 VACUUM이 있으며, 각각의 목적과 사용 사례가 다릅니다.VACUUM목적: 데드 튜플을 정리하고, 디스크 공간을 재사용 가능하게 만듭니다.특징: 테이블에 대한 잠금이 적고, 디스크 공간을 운영 체제에 반환하지 않습니다.VACUUM 테이블명;VACUUM FULL목적: 데드 튜플을 완전히 제거하고, 디스크 공간을 운영 체제..

Postgresql 2025.01.11

슬로우쿼리 모니터링

슬로우 쿼리가 발생하면 로그 남기기postgresql.conf 에 설정값 추가## 5초이상 기록 (ms 단위 )log_min_duration_statement = 5000## 특정 데이터베이스, 특정 유저 권한에서 발생한 슬로우쿼리 모니터링ALTER DATABASE test SET log_min_duration_statement = 5000;설정 후 config reloadSELECT pg_reload_conf(); 쿼리와 실행계획 로그에 남기기## 1. postgresql.conf에 auto_explain 라이브러리를 추가session_preload_libraries = 'auto_explain';## 2. 라이브러리 로드 후 설정 LOAD 'auto_explain';SET auto_explain.lo..

Postgresql 2024.12.26

Visibility Map(가시성 맵)

PostgreSQL의 **Visibility Map(VM)**은 테이블의 힙 페이지에서 삭제되지 않은 모든 튜플(행)이 가시 상태인지를 추적하기 위한 특수한 데이터 구조입니다.가시 상태란?PostgreSQL은 MVCC 방식을 사용하여 트랜잭션의 격리성과 동시성을 제공합니다.특정 튜플(행)이 트랜잭션의 관점에서 유효하게 보이는지를 의미합니다.각 튜플은 다음 정보를 포함합니다:xmin: 튜플을 삽입한 트랜잭션 ID.xmax: 튜플을 삭제하거나 갱신한 트랜잭션 ID.튜플의 가시 여부 결정:현재 트랜잭션이 튜플의 xmin보다 늦게 시작했는지 확인.튜플이 삭제되지 않았거나(xmax가 NULL), 현재 트랜잭션에서 해당 삭제를 아직 커밋하지 않았는지 확인.Visibility Map의 구조각 테이블은 별도의 VM 파..

Postgresql 2024.12.17

쿼리성능 분석 툴 pg_stat_statements

pg_stat_statements는 PostgreSQL의 확장 모듈로, SQL 쿼리 실행 통계를 수집하고 조회할 수 있도록 합니다.주요 기능쿼리 성능 분석:실행된 쿼리의 호출 횟수, 평균 실행 시간, 총 시간 등 다양한 성능 통계를 제공합니다.리소스 사용 모니터링:CPU 사용량, I/O 횟수 등을 추적하여 리소스 소비가 많은 쿼리를 식별합니다.튜닝 도구:성능 저하를 유발하는 쿼리를 최적화하는 데 도움을 줍니다.설치CREATE EXTENSION pg_stat_statements;shared_preload_libraries = 'pg_stat_statements' -- postgresql.conf 재시작 필요 위 처럼 db에서 활성화 해주면 되고 db마다 활성화가 필요하기 때문에 template1 에다 설치..

Postgresql 2024.12.17

PostgreSQL 15.8 시스템 변수 최적화

시스템 변수 확인SELECT name, context , unit , setting , boot_val , reset_valFROM pg_settingsWHERE name in ('shared_buffers','work_mem','maintenance_work_mem')ORDER BY context,name; 컬럼명설명예시namePostgreSQL 설정 변수의 이름.listen_addresses, work_memcontext설정 변경 시 적용 범위를 나타냄.postmaster: PostgreSQL 서버 재시작 필요.sighup: 설정 파일 재로드로 적용 가능.user: 현재 세션에서 즉시 변경 가능.unit설정 값의 단위를 나타냄.kB, MB, ms, N/Asetting현재 PostgreSQL에서 적용 ..

Postgresql 2024.12.11

VACUUM type 에 따른 redo 발생량 차이

일반적으로 다음과 같은 순서로 REDO 로그량이 많이 발생합니다:VACUUM FULL > VACUUM > VACUUM FREEZE [테스트 시나리오]데이터 준비100만 건의 초기 데이터 생성각 VACUUM 테스트 전에 서로 다른 패턴으로 데이터 업데이트/삭제각 VACUUM 유형별 특징VACUUM FULL: 테이블 전체 재작성으로 가장 많은 REDO 발생일반 VACUUM: 삭제된 레코드 정리VACUUM FREEZE: 트랜잭션 ID 에이징 처리측정 방법pg_current_wal_lsn() 함수로 WAL 위치 측정pg_wal_lsn_diff() 함수로 발생한 REDO 로그량 계산pg_size_pretty() 함수로 읽기 쉽게 포맷팅결과 분석각 VACUUM 유형별 REDO 로그 발생량 비교 제공VERBOSE 옵..

Postgresql/admin 2024.11.13

PostgreSQL architecture (Local Memory)

Local Memory ㄴ 세션별로 독립적인 메모리 공간ㄴ 작업 유형에 따라 동적 할당ㄴ 성능 최적화 고려사항 큰 정렬 작업이 많은 경우 work_mem 증가대규모 vacuum 작업 시 maintenance_work_mem 조정- maintenance_work_mem: VACUUM, INDEX 생성, 테이블 변경, FK추가 등 관리 작업에 사용- work_mem: 정렬, 해시 테이블 등의 작업에 사용- temp_buffers: 임시 테이블을 위한 버퍼- catalog_cache: system catalog 메타데이터 사용공간 -- 현재 세션의 메모리 사용량 확인SELECT * FROM pg_stat_activity WHERE pid = pg_backend_pid(); [TEST] 동시접속자 10명이 트랜..

[book] PostgreSQL 9.6 성능 이야기 - vacuum

postgresql 중 vacuum 이란 것에 대해서 정리 vaccum 이란 불필요한 데이터를 정리하고 압축해서 디스크공간의 효율성을 높인다오래된 트랜잭션을 정리하는 작업도 수행Multi-Version Concurrency Control = 동시에 여러 개의 데이터 버전을 제공할수 있는 기법오라클의 MVCC와 postgresql MVCC의 차이특성PostgreSQLOracleMVCC 구현 방식같은 row의 여러 버전이 테이블에 함께 저장됨Dead tuple은 vacuum으로 정리Undo 세그먼트에 이전 버전 저장자동으로 관리됨공간 관리vacuum 작업 필요관리자의 주기적인 관리 필요테이블 bloat 발생 가능Undo 세그먼트 자동 관리별도 관리 작업 불필요테이블 크기 안정적동시성 처리읽기 작업이 쓰기를 ..

PostgreSQL architecture (shared Memory)

Shared Memory (공유 메모리) ㄴ 디스크 I/O를 최소화하기 위해 사용되는 메모리 공간ㄴ PAGE SIZE 8K(Default)이다. 파라미터는 shared_buffersㄴ oracle 의 SGA와 유사 shared buffer = data : page (block)단위로 구성이 되고 기본이 8k 크기oracle의 buffer cache 와 유사하고 postgresql.conf 의 shared_buffers 파라미터 값으로 크기 조정 가능기본이 128MB 1GB이상의 RAM이 있는 서버에는 25%를 권장한다. ( shared_buffers = RAM * 0.25 )4GB RAM: 1GB (25%)8GB RAM: 2GB (25%)16GB RAM: 4GB (25%)32GB RAM: 8GB (25%..