PostgreSQL 성능 이야기
나의 평점 4.0/5.0
장점
- PostgreSQL을 책으로 접할 수 있다는 것 자체가 장점이다. 공식문서도 나름 잘 정리되어 있긴 한데, 일단 내가 찾아야하는 키워드가 무엇인지조차 모르는 상태에서 이제 키워드는 알 수 있게 됐다.
- 군더더기 없이 깔끔하게 필요한 내용들만 잘 정리되어 있다.
단점
- 현재 PostgreSQL 최신 버전은 16.3이다. 우리 회사에서 사용중인 버전은 14.10이다. 당연히 모든 내용은 필터링하면서 읽어야 한다.
"왜?"라는 질문은 고급 기술자가 되기 위해 가장 필요한 요소이기도 하다. 이는 실용성과는 무관하지만 통찰력과는 깊은 관계가 있다. "왜?"라는 질문을 하고 이에 대한 상상력을 발휘하고, 연구를 통해 상상들의 연결고리를 꿰어 맞추는 일련의 활동들은 고급 엔지니어로 가는 지름길일 것이다.
- 19p
지금 내가 책 읽고 있을 때가 아닌데..
2주만 책을 참으라고 했는데 못 참고 결국 또 읽어버렸다.
지난 프로젝트들을 회고하다보니 해결하지 못했던 Vaccum 문제가 갑자기 너무 눈앞에 아른거려서..
이 책에 대해 크게 얘기할 건 없다.
2017년에 출간된 책이므로 지금과는 다르게 동작하는 부분들도 많겠지만 Vaccum 튜닝 관련한 부분이나 Postgesql의 실행 계획을 읽는게 익숙하지 않을 경우 읽어보면 도움이 될 것이다.
단, 키워드를 얻는 목적으로만 읽어야 한다. 9.6은 정말 정말 정말 정말 옛날 버전이고, 찾아보니 Index도 똑바로 타지 않던 시절이다.
PostgreSql을 쓰는 회사가 점점 많아지고 있는데 아직도 정보는 많지 않다는 게 아쉬울 따름이다. 버전별 차이는 아래 링크에서 확인할 수 있다.
https://www.postgresql.org/about/featurematrix/
아래는 책에 나오는 내용 몇 가지.
공식 문서에서 맥락 없이 글 읽다가 지루하면 책도 한 번 읽어보자.
1. 대량 Bulk Read 시 Ring Buffer에 데이터가 저장된다. (Shared Buffer를 낭비하지 않기 위해)
이 경우 읽기 속도가 급격하게 저하될 위험성 존재. pg_preswarm extension 설치할 경우 테이블 및 인덱스를 Shared buffer로 불러올 수 있다.
2. bitmap index
- 범위 탐색 시 인덱스, 테이블 정렬 관계가 불량할 경우 주로 발생한다.
- 액세스할 블록이 너무 많다면 lossy mode로 실행된다. 이 때, 1비트가 1블록을 가리키게 되므로 탐색 성능이 저하되어 Rows Removed by index recheck가 발생한다.
- bitmap 처리 자체가 오버헤드를 유발하므로 다른 인덱스가 없는 경우 Cluster 명령어를 통해 인덱스를 정렬할 수 있다. (단, shared lock과도 호환되지 않기 때문에 운영 중에는 절대 금지)
- 무조건 NL 조인이 더 빠른 건 아니다. Disk I/O 시에는 bitmap index로 탐색하는 게 오히려 더 빠를 수 있다.
3. Materialize
- Mysql과 다를 거 없다. 이너 테이블을 seq 탐색해서 임시 테이블에 저장해놓고 사용하는 용도.
- inline view, nested subquery 아닌 이상 발생할 일 없을 듯. 조인인데 발생하면 인덱스가 없는 거겠죠.
4. Hashjoin 성능 분석
- Buckets : 해시 테이블 버킷 수 (최소값 1024)
- Batches = (In-memory Hash Join으로 해결) ? 1 : 2
- In-memory 방식이 무조건 더 빠른 건 아니다. 해시 충돌이 많이 발생할 경우 일부러 옵티마이저가 temp table에서 진행할 가능성 있음. (해시 충돌이 가장 악영향을 미친다.)
5. Vaccum
- vaccum : redo 발생하지 않는다.
- vaccum frozen : 대량의 redo 로그 발생한다.
- 트랜잭션 실행 시마다 age가 1 증가하고 vaccum_freeze_min_age 도달하면 vaccum freeze 발생한다.
6. partial index
- where절에 사용하는 특정 조건에만 인덱스 적용 가능
'개발 도서 리뷰 > 개발 도서 리뷰' 카테고리의 다른 글
개발 도서 리뷰 (26) Real MySQL 5.0/5.0 (0) | 2024.06.26 |
---|---|
개발 도서 리뷰 (25) 가상 면접 사례로 배우는 대규모 시스템 설계 기초-2 5.0/5.0 (0) | 2024.06.06 |
개발 도서 리뷰 (23) Release의 모든 것 ?/5.0 (0) | 2024.02.29 |
개발 도서 리뷰 (22) 마이크로서비스 도입 이렇게 한다 5.0/5.0 (2) | 2024.02.14 |
개발 도서 리뷰 (21) 챗GPT 개발자 핸드북 2.5/5.0 (0) | 2024.01.31 |