본문 바로가기

PostgreSQL

(PostgreSQL) Temporary Table과 Autovacuum Temporary Table은 Autovacuum 대상이 아니다. Temporary Table은 임시 테이블을 생성한 Connection에서만 조회할 수 있기 때문에 Autovacuum 데몬은 Temporary Table을 볼 수 없다. Temporary Table이 사용중인 공간은 Connection이 닫히면 저절로 회수된다. 그러나 만약, Transaction이 장기간 지속된다면 자원이 회수되지 않아 문제가 될 수 있다. Temporary Table에서 XID를 오랜시간 점유하고 있다면, Temporary Table을 생성한 세션을 종료하여 자원을 반환시켜야한다. 참고 What is autovacuum doing to my temporary tables? - Cybertec Did you know t..
(PostgreSQL) PostgreSQL autovacuum을 튜닝할 때 유용한 Tip 💡 이번 글에서는 Working with PostgreSQL autovacuum on Amazon RDS을 정리한 내용을 다루고자 한다. Autovacuum은 자동으로 VACUUM과 ANALYZE 명령문을 실행한다. Autovacuum은 추가/수정/삭제된 튜플이 많은 테이블을 찾는다. 그리고 데이터베이스에서 더 이상 사용되지 않는 데이터를 정리하여 저장공간을 확보한다. 기본적으로 AWS RDS PostgreSQL에서 Autovacuum이 활성화되어있다. 그리고 autovacuum과 관련된 설정들을 적절한 값을 기본값으로 설정해준다. 이 기본값들은 일반적인 기준으로 설정한 값이다. 때문에 시스템 특성에 맞는 적절한 값으로 설정값을 튜닝하면 성능상 이점을 얻을 수 있다. 해당 포스팅에서는 autovacuum 튜..
(PostgreSQL) AWS PostgreSQL RDS에 Transaction ID Wraparound 알럿 설정하기 본 글에서는 Amazon RDS for PostgreSQL에서 transaction ID의 상태를 모니터링하는 방법과 주요 문제를 해결하는 일반적인 방법에 대해서 설명하고자 한다. 이 글은 AWS Database blog에 포스팅된 Implement an Early Warning System for Transaction ID Wraparound in Amazon RDS for PostgreSQL 을 번역하여 정리한 글이다. transaction ID란? PostgreSQL은 vacuum 없이 21억여 개의 트랜잭션까지 처리할 수 있다. 만약 vacuum 없이 처리된 트랜잭션의 수가 2^31 - 10,000,000에 도달하게 되면, Postgresql은 베큠이 필요하다는 로그를 남기기 시작한다. 그리고 (..
(PostgreSQL) Truncate TABLE VS delete TRUNCATE란? TRUNCATE는 대용량 테이블을 빠르게 지울 수 있는 명령문이다. Truncate VS Delete DELETE 쿼리는 테이블의 데이터를 제거할 때 사용하는 쿼리이다. 그런데 전체 데이터를 삭제할 때에는 DELETE 쿼리는 효율적이지 않다. 이때에는 TRUNCATE TABLE을 사용하는 것이 좋다. TRUNCATE TABLE는 테이블 스캐닝 없이 전체 데이터를 지우기 때문에 DELETE 쿼리보다 빠르다. 그리고 스토리지를 바로 회수하기 때문에 VACUMM 작업을 수행할 필요가 없어서, 대용량 데이터를 제거할 때 유용하다. 사용법 TRUNCATE TABLE public.recommend_products; 테이블 식별 값(Primary Key)을 리셋시키고 싶은 경우에는 아래와 같이 질..
(Django) Django와 PostgreSQL 성능 개선을 위한 7가지 패턴 Django와 PostgreSQL으로 구성된 서비스를 6개월간 최적화를 하면서, 패턴화한 것들을 정리해보고자 합니다. 아래의 9가지 원칙을 반복하면, 점진적으로 시스템을 개선할 수 있습니다. 1. 인덱스 추가하기 2. 인덱스를 잘 타도록 쿼리 개선하기 3. N+1 쿼리 줄이기 4. 불필요한 트래픽 줄이기 5. Transaction은 짧게 유지하기 6. 실시간성이 필요하지 않은 기능은 비동기로 처리하기 7. 캐시 적용하기 1. 인덱스 추가하기 a. 빈번하게 사용되는 검색조건에는 인덱스를 추가해줍니다. 디스크 사용량이 우려된다면, 인덱스 파티셔닝을 적절하게 활용하여 인덱스를 추가하는게 좋습니다. b. FK에 BTREE Index 추가하기 Ruby On Rails와 Django의 마이그레이션은 FK 관계로 설..
(PostgreSQL) PostgreSQL Client Tool 비교하기 나는 PostgreSQL Client 유목민이다 🐎🐎 그러던 중 PostgreSQL Client 비교한 글을 읽어봤는데, 꽤 유용했다! 적당한 툴을 찾지 못해서 PGAdmin, Psequel를 혼용해서 사용하고 있었는데, 이제는 TablePlus으로 정착하려고 한다. PostgreSQL Client에 정착한 기념으로, 이번 포스팅에서 PostgreSQL Client Tool 을 정리해보고자 한다. 1. TablePlus ★★★★★ 한줄평 짱이다. 일단 설치해야한다. 장점 이쁘다. 탭 전환이나 데이터가 보여지는게 빨라서 가볍게 느껴진다. 그럼에도 불구하고 기능이 많다. Query Formmating 기능이 있다. 탭을 가로로 나눌 수 있다. 쿼리 자동완성 기능도 있다. 필터 기능이 있다. 데이터 조회 Li..
(PostgreSQL) BRIN 인덱스 활용하기 BRIN 인덱스BRIN 인덱스는 Block Range Index의 약자다. BRIN 인덱스는 페이지의 메타데이터를 뽑아서 인덱스를 구성한다. 그래서 타임시퀀스한 대용량 데이터를 저장하고, 조회할 때 유용하다. 테이블은 여러개의 페이지들로 구성되어 있다. 비슷한 시기에 만들어진 로우는 같은 페이지에 위치하거나, 물리적으로 서로 근접한 위치에 있다. BRIN VS B-TREE BRIN 인덱스는 B-TREE 인덱스보다 쿼리 퍼포먼스가 좋다.그리고 BRIN 인덱스는, B-TREE에서 사용하는 용량의 1%만 사용한다. bb인덱스 생성 속도도 BRIN이 더 빠르다. 쿼리 퍼포펀스 비교해보기대용량 테이블을 만들고, BRIN / B-TREE 인덱스를 추가해서 각각의 퍼포먼스와 디스크 사용량을 비교해보겠다. 1. 샘플데..
(PostgreSQL) 테이블에 제약사항이 있는 컬럼 추가하기 Postgresql 테이블에 컬럼을 추가하는 작업은 신중하게 처리해야한다. 사이즈가 큰 테이블에 기본값이 있거나, 제약사항이 있는 컬럼을 추가하는 작업은 리스크가 있기 때문이다. 이번 포스트에서는 제약사항이 있는 컬럼을 추가할 때 발생하는 리스크와 이를 분산시키는 방법에 대해서 정리해보고자 한다. PostrgreSQL 컬럼 추가 동작 방식 ALTER ADD COLUMN 명령문을 실행하면, PostgreSQL은 아래와 같은 순서로 테이블을 변경한다. 1. 컬럼 추가하기 2. 신규 컬럼에 default 값 추가하기 ( Option ) 3. 컬럼 제약사항 ( constraint ) 확인하기 PostgreSQL은 3번째 단계에서, 값의 유효성을 확인하기 위해 테이블을 풀스캔한다. 이 때, 테이블 사이즈가 크다면..