작성
·
68
0
Buffer Cache 개념 및 Buffer Cache Access 메커니즘의 이해 강의 6분 30초 쯤 나오는 내용에 질문이 있습니다.
Select * from customer where id = '005'
위의 쿼리가 있을 때 아래와 같은 설명이 있습니다.
"설명에서는 Data Dictionary
등의 내부 정보를 통해서 Custormer 테이블의 id='005'
데이터가 있는 Block의 DBA 정보를 알아냄"
그런데 이 내용이 이해가 되지 않습니다.
조건 값으로 어떻게 Block 3에 있는지 알 수 있는지요?
풀스캔을 제외하고 바로 찾으려면 인덱스의 ROWID 값을 이용해야 하지 않나요?
답변 2
0
안녕하십니까,
해당 영상은 buffer cache access 메커니즘에 대한 설명이라 full scan 또는 index 이용 시 데이터 블럭을 access하는 전반적인 방식을 다 언급 드리지 않고 간단하게 Data dictionary를 이용한다고 말씀드린 것입니다.
full scan 시 해당 table의 segment를 Data Dictionary에서 찾고, Segment의 Header에서 첫번째 DBA와 Extent Map과 High Water Mark를 기반으로 테이블을 스캔하면서 해당 조건의 block을 찾는 다는 이야기를 그냥 퉁~ 쳐서 Data Dictionary를 이용한다고 기재 한 것입니다.
물론 해당 테이블에 인덱스가 있다면 rowid를 기반으로 해당 rowid를 DBA로 변경해서 찾는 방식도 해당되기 때문에 Data Dictionary를 이용한다는 설명은 오해의 소지가 있을 수 있지만, 강의 진행상 축약에서 영상에서 언급 드리는 걸로 이해 부탁드립니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. jongik.jang님.
데이터베이스에서 특정 데이터를 빠르게 찾기 위해서는 특히 직접적인 경로인 인덱스를 사용하여 필요한 데이터 블록의 위치를 식별하는 것이 매우 중요합니다. 질문하신 내용은 데이터베이스의 효율적인 접근 방식에 관한 상당히 흔한 질문입니다.
데이터 딕셔너리 및 인덱스:
Data Dictionary
라는 내부 메커니즘을 통해 객체들의 메타데이터를 포함하고 있습니다. 일반적으로 이런 객체의 구조 정보를 사용하여 데이터를 찾습니다.ROWID의 역할:
ROWID
는 오라클 데이터베이스에서 각 행의 물리적 주소를 나타내는 고유 식별자입니다. 특정한 조건에 맞는 결과를 찾을 때, 인덱스가 ROWID
에 기반하여 저장된 블록(예: 블록 3)의 위치를 빠르게 파악할 수 있습니다.Buffer Cache:
Buffer Cache
를 사용하여 이미 접근된 블록들을 메모리에 저장해 이후 접근 시 데이터베이스 I/O를 최소화합니다. 이는 성능을 최적화하는 중요한 메커니즘 중 하나입니다.관련된 질문으로는 Buffer Cache의 storage I/O에서 추가적인 설명을 참고하실 수 있습니다. 이 답변에서는 내부적인 DBA 정보가 특정 메커니즘을 통해 해결됨을 설명하고 있으니 확인해 보시길 권장합니다.
위 설명이 도움이 되었길 바랍니다. 혹시 더 궁금한 점이 있으면 언제든지 추가적으로 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.