안녕하세요. DB 잘 알고 싶은 개발자입니다. 인터넷을 찾아봐도 잘모르는 부분이 있어, 고수님들께 질문드리려 찾아뵙게 되었습니다. 힌트를 추가하면서 쿼리를 많이 실행했을때 옵티마이저가 영향을 받나요? * 이중화된 오라클 DB 2EA(데이터 동일) [1]. 아래 쿼리 중 hint 를 제외한 부분을 DB#2에서 실행 [2]. [1]번 실행계획 참조해 DB#1 힌트 추가 - 동일한 실행계획 나오도록 => DB#1(힌트 추가버전), DB#2(힌트제거버전) 각각 실행계획 비교시 COST와 CARDINALITY 다름 => DB 2대에서 동일한 쿼리 실행계획 조회시에도 다름 ( 힌트 제거, 힌트 추가 각 각) => 아래 쿼리 말고 완전히 다른 쿼리 실행시 실행계획 동일 해당쿼리에 대해 다른 결과가 나오는 이유를 모르겟습니다. 어느 부분을 확인해바야 할지문의드립니다. (...쿼리삭제...)
결과가 어떻게 다른가요? 구체적으로
1. 힌트를 사용했던 DB(DB#1)에서 조회시 특정구간 조인 이후에 COST와 CARDINALITY가 높습니다.
힌트사용 - DB#1 CARDINALITY:29914 / COST:40824
힌트미사용 - DB#2 CARDINALITY:6477/ COST:15674
2. 힌트르 제외한 쿼리를 두 DB에서 실행할 경우에도 한쪽DB에서 COST와 CARDINALITY가 높습니다.
힌트미사용 - DB#1 CARDINALITY:29944 / COST:20512
힌트미사용 - DB#2 CARDINALITY:6485/ COST:15693
첨부파일 받으셔서 보시면 자세히 볼수 있습니다.
결과가 다른게 아니라, 실행계획 또는 실행계획에 표시괴는 수치가 다른 거군요.
같은 쿼리 같은 데이터에 결과가 다르다고 하셔서 그럴리가 있나? 했네요.
질문하실때 표현을 정확하게 해주셔야 합니다.
데이터가 같다고 해도
- 서버 환경이 다를 수 있습니다.
- 통계정보가 다를 수 있습니다.
통계정보를 갱신해 보세요.
http://gurubee.net/lecture/2918
감사합니다.
공유해주신 자료에 통계테이블(DBA_TABLES, DBA_INDEXES)에는 권한이 없어서 확인해볼수가 없네요 ㅠㅠ
2개 DB USER_TAB_STATISTICS, USER_IND_STATISTICS 테이블의 통계정보는 동일한데
이외 옵티마이저에 영향주는 부분이 있을까요??
한쪽 db서버에서만 힌트추가한 쿼리를 많이 실행해 이부분이 영향이 있을지 싶어서요
dba_ 대신 user_ 뷰를 이용해 보세요.
공유해주신 자료에 보니 옵티마이저가 영향받는 부분 보니 아래정도 있는것으로 보이네요
테이블 통계 , 인덱스 통계 ,칼럼 통계 ,시스템 통계 (CPU 속도, 평균적인 I/O 속도, 초당 I/O 처리량 등)
이전 실행했던 쿼리도 영향이 있는지 궁금했엇는데.. 이부분은 조금더 찾아봐야겟네요ㅠㅠ
도움 많이 됫습니다. 감사합니다.