본문 바로가기

PostgreSQL

(29)
22. PostgreSQL - query processing query processing parserSQL 문을 읽을 수 있도록 parse tree를 생성함.parse tree를 만들 때 SQL 문법 오류(syntax check)를 확인sementic check는 analyzer에서 진행함.즉, syntax 오류가 없으면 DB 내 table이 없더라도 parser 단계는 통과할 수 있음.parse tree 예시 analyzerparser 단계에서 생성된 parse tree의 semantic analysis를 진행 후 query tree를 만듬.targetlist: select 절의 columns 목록range table: query에서 사용된 relations list를 저장join tree : from 절과 where절을 저장sortClause: sort나 g..
21.PostgreSQL - WAL(Write Ahead Log) WAL 필요 이유WAL에는 DB에서 발생한 모든 변경사항들이 기록됨그래서 DB가 갑자기 죽더라도 DB를 다시 올릴 때 WAL에 기록된 변경사항을 replay하여 data 유실이 발생하지 않도록 함.또한, PITR(Point-In-Time Recovery)와 Streaming Replication을 위해서도 사용 WAL에 기록되는 내용insert, delete, commit과 같은 변경 작업으로 인해 생성된 XLOG record(or WAL data)가 메모리에 있는 WAL buffer에 기록.transaction commit or aborts될 때 WAL segment file에 기록됨. XLOG record의 LSN(Log Sequence Number)은 XLOG record가 transaction l..
20. PostgreSQL - buffer manager buffer manager는 shared memory와 DB 스토리지 간 data 전송을 관리함.그래서 buffer manger가 DB 성능에 큰 영향을 미칠 수 있음.buffer manager 구조  buffer tag    - PostgreSQL에서 모든 data files의 각 page 정보를 가지고 고유한 tag값을 생헝하는데 그것을 buffer tag라고 함.    - buffer tag를 만들 때 사용되는 구성 요소        - specOid : page를 포함하는 relation이 속한 tablespace의  OID        - dbOid : page를 포함하는 relation이 속한 database의  OID        - relNumber : page를 포함하는 relation ..
19. PostgreSQL - index-only scans I/O 비용을 줄이기 위해 index-only scans을 사용할 수  있음.select 될 column이 모두 index의 column에 포함되어 있어야 table pages에 접근하지 않고 index column만 읽음.보통 모든 RDBMS에서 제공하지만 PostgreSQL에서는 index column에 포함되어 있다고 무조건 index-only scan을 하지 않음. index-only scan을 위한 조건select할 column이 index column이어야 함.조회하려는 table의 data가 저장된 page의 VM(visibility Map)의 visibility bit가 1이어야 함. VM까지 확인해야 하는이유index tuple에는 heap tuple처럼 t_xmin, t_xmax 정보가..
18. PostgreSQL - Heap-Only Tuples(HOT) Heap-Only Tuple이란?PostgreSQL 8.3부터 도입됨.updated row가 old row가 저장된 table page에 저장될 때 index와 table의 page를 효율적으로 사용하는 방법을 의미. HOT 도입 이유1. index와 table page의 공간 낭비를 줄인다.     - update된 row의 column이 index column이 아니라면  HOT 이용 시 pruing 작업으로 인해 table 내 tuple이 생성될 때마다 index tuple을 insert하지 않아도 됨.     - defregment 작업으로 vacuum이 수행되지 않더라도 table내 dead tuple을 정리할 수 있음.2. resource 낭비를 줄인다.    - HOT의 defragment로..
17. PostgreSQL - vacuum full concurrent vacuum은 DB운영 시 꼭 필요한 요소이지만 미사용 공간을 회수하지 못하는 문제가 있음.그래서 vacuum full 명령을 수행할 필요가 있음. table reorg 작업을 못해 발생할 수 있는 문제점아래 그림은 delete 명령 수행으로 dead tuple이 발생하고 concurrent vacuum에 의해 dead tuple이 정리된 상태   table size 유지로 인한 문제점      disk 공간 낭비      DB performance에 악영향을 미칠 수 있음.           위 그림에서 tuple 3개를 읽으려면 3개의 page를 읽어야 함.  vacuum full 사용 시 주의점.    table에 vacuum full 명령 수행 시 어떤 transaction도 ..
16.PostgreSQL - autovacuum 앞서 vacuum에 대해 설명했던 이번엔 autovacuum에 대해 알아볼 예정.https://lsmdd.tistory.com/115 15. PostgreSQL - VACUUM앞 서 vacuum에서 하는 일 및 내부 처리 과정에 대해 설명https://lsmdd.tistory.com/113 13. PostgreSQL - VACUUM 내부 동작 과정vacuum이 하는 일dead tuple 제거dead tuple을 가리키는 index tuple 제거tuple의 oid txids를 freelsmdd.tistory.com autovacuum daemonPostgreSQL에서 background process로 autovacuum daemon을 제공하여 vacuum 처리를 자동화함.autovacuum daemon..
15. PostgreSQL - VACUUM 앞 서 vacuum에서 하는 일 및 내부 처리 과정에 대해 설명https://lsmdd.tistory.com/113 13. PostgreSQL - VACUUM 내부 동작 과정vacuum이 하는 일dead tuple 제거dead tuple을 가리키는 index tuple 제거tuple의 oid txids를 freeze함.system catalog(pg_database and pg_class)와 연관된 frozen txid를 갱신clog의 불필요한 부분을 제거vacuum이 수행된 table의 Flsmdd.tistory.com 이번 Post의 vacuum 관련 내용 간단 요약아래 정리한 글을 다 읽을 필요 없이 간단하게 정리하자면 아래와 같다.VM(Visibility Map)은 table의 page와 연관 된..