안녕하세요 rowid, dba, 해시 버킷 관련 질문입니다. 0 2 3,136

by 삼각받침 rowid dba 해시 버킷 [2014.07.21 17:19:39]


안녕하십니까~ 고수님들!

궁금한것이 하나 있어서 이렇게 질문을 올립니다. ㅜㅜ

 

음.. 제가 rowid, dba, 해시 버킷에 대해서 개념적으로 조금 헷갈리는것이 있어서 그런데요.

제가 지금까지 알고있던 개념은..

"index 검색 > rowid 확보 > 해시 함수를 통한 dba 확보 > data block 접근" 이었습니다.

 

그런데.. data block 접근 부분에서 dba로 해당 data block에 direct로 접근하는것이 아니라.. 

해당 해시 버킷을 찻기 위해서 다시 한번 해시 함수를 타게 되는것인지요?

즉, "index 검색 > rowid 확보 > 해시 함수를 통한 dba 확보 > 해당 dba를 다시 해시 함수에 입력 > 해당 해시 버킷 확인 > data block 접근"

위처럼 해시 함수를 두번 타게 되는것인지요?

 

아님 dba로부터 해시 함수는 한 단계인데..

제가 조금 잘못 이해하고 있는것인지요..

 

고수님들... 간단한 조언 부탁드립니다 ^^

제발~~

by 김치찌게 [2014.07.22 11:42:21]

첫번째 설명에서 rowid 자체가 주소를 나타내는데, hash 함수로 dba를 변환하는 과정이 없지 않나요?

buffer cache에서 접근할 버퍼 블럭을 찾기 위해서 hash 함수의 key 값으로 rowid를 입력하여 bucket 확인을 위하여 사용하는 것으로 알고 있습니다만.. bucket 찾은 후에 chain을 scan(? linked list 탐색) 하고요.. 

요는.. buffer cache 의 구조가 hash 자료구조여서 hash 함수를 한 번만 쓸 것 같습니다. 


by 삼각받침 [2014.07.22 14:45:14]

안녕하세요 김치찌게님! 댓글을 달아주셔서 감사합니다. ^^


달아주신 댓글을 보고 다시 검색을 해보니... 
아무래도 제가 조금 헷갈렸던 있었던 모양입니다. ㅜㅜ
제가 이렇게 된건 아래 두가지 내용 때문인데요.


1. 전에 알던 내용
    데이터파일 번호, 블록 번호, 로우번호 같은 테이블 레코드의 
    반물리적 위치 정보를 포함하는 64진수 문자 타입.
    여기서 반물리적 위치 정보라 표현한것은.. rowid를 가지고 해시 함수를 통해서만이 
    실제 data block 주소를 알 수 있기 때문이다.


2. 요즘 고도화 1권에서 읽은 내용
    DB 버퍼 캐시 내에서 데이터 블록을 해싱하기 위해 사용되는 키 값은 
    데이터 블록 주소(DBA, data block address)이다.
    즉, 해시 함수에 데이터 블록 주소를 입력해 리턴받은 해시값이 같은 블록들을 
    같은 해시 버킷에 연결 리스트 구조로 연결하는 것이다.


3. 바보같은 결론
    위 내용을 겹쳐서 생각하다 보니 아래와 같은 결론인것인가.. 하고 헷갈리기 시작했습니다.
    rowid에서 해시 함수를 적용하여 dba를 추출하고, 
    이 dba를 다시 해시 함수에 입력하여 return 값으로 해시 버킷을 찻는구나.
    그러면 해시 함수를 두번이나 사용하게 되는것인가?????
    하고 말입니다 ㅠㅠ


에거.. 이래서 모르는것은 물어 물어 가야한다는것을 다시 한번 느낍니다.
뭐.. 더 이상의 잡설은 각설하고.. 
index scan 후 buffer cache를 접근하는 방식은 대충 아래와 같이 되겠군요.


    index 검색 > rowid 확보 > rowid내 dba를 가지고 해시 함수 입력 > hash bucket 확인 > 
    hash chan search > data block 접근


김치찌게님이 댓글이 아니었으면.. 
지금도 방황하는 개념이었을듯.. ㅠㅠ
다시 한번 감사드립니다. ^^
그럼 수고하세요~ ㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입