본문 바로가기
스터디북

[11/22] Bind Peeking && Adaptive Cursor Sharing

by 파이어볼러 2015. 11. 22.

통계정보 파티션 추가시의 통계정보 파티션 기반 혹은 전체 다시 수집


Bind Peeking이란 바인드 변수를 사용하는 경우 쿼리가 최초로 실행되는 시점의 실제 바인드 값을 이용해서(Peeking해서) 실행 계획을 세우는 것을 의미한다


바인드 변수를 사용하는 경우 실제로 실행되는 시점에 어떤 값이 들어오는지 알 수 없기 때문에 컬럼의 평균적인 분포만을 가지고 비용을 계산하게 되고 이는 데이터는 변화한다는 가정이 들어간다면 치명적인 단점을 가지게 된다.


분포도가 한쪽으로 극단적으로 치우치더라도 바인드 변수를 사용하면 어떤 값이 올 지 모르기 때문에 평균적인 분포를 따르게 되고 그래서 바인드 피킹은 이런 단점을 피하기 위해 쿼리가 최초 실행되는 시점에 바인트 변수에 들어온 값을 이용하게 된다


즉 Full table scan이 필요할때는 그것을 아니면 Index scan을 사용할 때는 그것을 사용할 수 있게 오라클이 판단할 수 있는 histogram이 반드시 존재해야 하며바인드 피킹은 적절한 histogram의 생성 여부에 따라 정상적으로 기능이 작동되는지가 결정된다.


Adaptive Curosr Sharing라는 기능이 바인드 피킹과 히스토그램 조합에 따른 부작용을 해소하고자 11g부터 등장했고 말 그대로 상황에 맞게 유연하게 cursor를 share 하겠다는 의미다 이 개념을 구현하고자 오라클은 Bind Sensitive cursor Bind Aware Curosr이라는 새로운 개념을 도입했다


Bind Sensitive Cursor : 바인드 값에 민감한 Cursor라는 의미로 바인드 값이 바뀌면 그것을 민감하게 처리한다는 것으로 Equal 조건에서는 조건절에 쓰인 컬럼에 히스토그램이 있고 Range 조건인 경우 오라클은 이것을 Bind sensitive cursor라고 부른다.


Bind Aware Cursor : 바인드 센시티브 커서에 입력된 바인드 값에 따라 실행계획이 분화된 Cursor를 의미한다 즉 Bind Aware Cursor가 생성되었다는 것은 바인드 변수의 값에 따라 오라클이 적절한 Child Cursor를 생성했다는 의미다


ACS 기법을 사용하면 바인트 피킹에 의해 최초 실행 시점에 실행계획이 결정되더라도 이후 새로운 바인드 변수 값이 사용되면 이에 맞게 실행계획을 분화(새로운 Child Cursor 생성) 시킨다 따라서 바인드 피킹에 의한 부작용이 사실상 없어지게 된다


단 조건절에 쓰인 컬럼에 히스토그램이 있고 히스토그램의 분포도에 따라 실행 계획에 큰 차이가 있을 수 있다고 판단된다는 조건이 중요하다 즉 적절한 히스토그램 없이는 의미가 없다는 뜻이며 히스토그램은 반드시 이해하고 활용해야 한다


히스토그램이란?


히스토그램이란 Table 형태의 빈도(개수)를 Graphical 하게 표현한 것


Skewed한 컬럼과 관련된 히스토그램이 없을 경우 CBO는 Selectivity 계산에서 오류를 범하게 되고 이것은 곧 Cardinality 계산의 오류로 이어지고 잘못된 실행계획을 선택하는 결과로 나타난다 이런 경우에 히스토그램을 활용하다 보면 정확한 optimizer의 판단을 유도할 수 있다



'스터디북' 카테고리의 다른 글

<11/24> Call Me Baby  (0) 2015.11.24
<11/23> Love  (0) 2015.11.23
<11/22> 상심  (0) 2015.11.22
<11/20> Blind Love  (0) 2015.11.20
<11/19> 서른즈음에  (0) 2015.11.19