오라클에서 쿼리 수행시 먼저 버퍼캐시(메모리)에서 해당 데이터가 존재하는지 확인하고
없을 경우엔 디스크 i/o를 수행하는것으로 알고 있는데요.
1) 여기서 쿼리를 통해 매칭되는 결과 중 일부만이 버퍼캐시에 존재할 경우
해당 데이터는 버퍼캐시에서 읽어드리고 없는 데이터는 디스크에서 읽는것인건가요?
2) 오라클 DBMS의 SGA영역 크기와 또는 그 내부에 버퍼캐시 크기만도 조정이 가능한 것인가요?
(* 만약 어떤 db총 데이터 용량이 5g라고하고, 해당 db서버 메모리용량이 10g가 인경우
버퍼캐시에 모든 데이터를 담을 수 있는지 궁금합니다.)
3) 여기서 db i/o를 메모리(캐시) -> 디스크 순으로 하는것은 대부분의 메이저 dbms라면 동일한 방식이라고 봐도 될까요?
그 다음엔 인덱스와 겹쳐서 의문점이 드는것이
4) 실제 데이터보다 인덱스 데이터가 버퍼캐시에 우선적으로 적재되나요?
5) 만약 그렇다면 버퍼캐시에서 인덱스 값을 우선적으로 검색한 후 해당 값으로 디스크에 있는 실데이터를 i/o하는 방식이라고 보면 될까요?
마지막으로 인덱스의 실제 값이 궁금합니다.
6) 인덱스의 값을 실제 해당 데이터의 위치값을 저장해야 바로 찾아갈 수 있을텐데
그럼 여기서 인덱스의 값은 디스크의 LBA값이 되는건가요?
7) 만약 인덱스의 값에 실제데이터의 디스크 LBA값이 저장되는 것이라면
실데이터가 모두 버퍼캐시에 위치해 있는 경우라면 인덱스스캔이 아니라 테이블스캔이 되는건지 궁금합니다;;
초보자라 모르는게 많은데 해당 부분들은 검색을 통해서 찾아지지가 않아 해결이 안되네요
답변을 구하고자 질문글을 올렸습니다.
감사합니다 ^^;