[ 목적 ]
오라클 공부하다가 데이터를 읽는 과정을 몰랐는데, 여러 방법이 있다는 것을 알게 되어서 기록하고자 정리한다.
[ db file sequential read ]
단일 블록 스토리지 i/o를 수행할 때 발생.
주로 인덱스를 거쳐 테이블에 랜덤 엑세스 할 경우 발생하고 많은 Wait time을 소모함.
대량 발생 시 주로 oltp 시스템에서 성능 저하를 일으킴.

랜덤 i/o 엑세스 된 블록이 버퍼 캐시에는 Sequential하게 저장됨.

-- 최적화 방안.
버퍼 캐시 늘리기. 왜냐면 MRU 부분에 페이지가 들어가므로 오래 남길 수 있음.
인덱스를 다시 빌딩하는건 도움이 되지 않는 부분이 대부분,
OLTP에서는 자연스러운 Wait event임.
성능이 뛰어난 ssd를 고려해야함. 랜덤 i/o를 많이 소모하는 sql임
[ db file scattered read ]
멀티 블록 스토리지 i/o를 수행할 때 발생
full 스캔을 할 경우 발생함.
여러 블록을 한번에 엑세스함.

풀 스캔을 할 경우에는 블록들이 버퍼 캐시에는 일부분만 Scattered하게 보관됨.
랜덤 I/O로 엑세스한 블록은 버퍼풀의 MRU 부분에 들어가게 됨. 풀 스캔 엑세스는 블록들이 LRU 부분에 SCATTERED하게 보관됨.
많은 양의 데이터, 테이블을 스캔할 경우에는 버퍼풀을 경유하지 않고 스토리지에 direct read, write하게 된다.
'데이터베이스' 카테고리의 다른 글
jdbc 탐구하기 (0) | 2023.06.18 |
---|---|
postgresql의 운영에 필요한 테이블과 wait event (1) | 2023.06.11 |
postgresql mvcc (0) | 2023.05.20 |
Postgresql's memory architecture (0) | 2023.05.13 |
데이터베이스 실행 계획, 옵티마이저와 쿼리 최적화 실습 ( feat. mantech ) (1) | 2023.05.04 |