Shared pool 관련 질문 0 3 949

by bbugge [Oracle 기초] [2018.09.30 17:09:19]


Shared pool에 대해서 공부하다가 궁금한 점이 생겨서 질문 올립니다

1. 유저가 날린 SQL 문을 hashing 해서 hash bucket 과 비교 후 같은 값들 중  
그 안의 체인으로 연결된 Object Handle의 name 값과 비교 후 같은 것이 같은 쿼리라고 판단하는 것 같은데
hashing 된 hash bucket이 갖고 있는 Object Handle의 값은 다 같아야 하는 게 아닌가요??
즉, 체인으로 연결된 Object Handle의 name 값은 앞서 hash bucket 비교를 통해 다 같은 Handle 이여야 하는 게 아닌가요?

2. shared pool size 에 관해서
해싱 된 SQL 문이 데이터베이스에서 감당이 안될 정도로 큰 경우가 생길 수도 있나요??
즉, shared pool size 또는 shared pool reserved 의 값이 기기가 감당할 수있는 최대값을 넘는 경우

by 신이만든지기 [2018.10.01 11:40:20]

해시함수의 결과 값은 고정된 자리수를 가집니다. 

예컨데, 해시함수가 아래와 같다면,

f(x) = mod(n, 10)  // 버켓을 10개라고 가정함

해시값은 0~ 9까지의 값만 나옵니다. 자리수는 1자리고요.

그러므로, 서로 다른 쿼리인데도 해쉬값이 같게 나올 수 있습니다. 이 경우 체인으로 연결하고, 나중에 찾을 때는 체인리스트를 따라가면서 비교를 하는 거지요.

쿼리가 짧거나, 아무리 길어도 해시값은 고정된 자리값을 갖습니다.

 

 


by bbugge [2018.10.01 14:45:45]

답변 감사합니다~!! 한 번에 궁금증이 다 풀렸네요 ㅎㅎ


by bbugge [2018.10.01 21:39:05]

조금 더 찾아보다보니 답을 찾았네요.... ㅎㅎ

고정된 자리수를 갖는 건 맞는데 sql 문장의 경우 앞,뒤 64bytes의 글자를 이용하여 hash function 적용 후 리턴되는 값으로 hash bucket을 찾는다고 합니다.

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