제 1 장. 실행 계획과 옵티마이저
1. Explain Plan과 Runtime Plan이 다른 현상이 종종 발생합니다. 그 이유가 무엇인가요?
2. 동일한 SQL 문장이 여러 개의 차일드 커서를 가지는 이유는 무엇인가요?
3. 인라인 뷰에 GROUP BY를 추가하면 Join 조건이 Push가 안됩니다. 그 이유는 무엇이고 어떻게 해결할 수 있을까요?
4. 특정 오브젝트를 사용하는 SQL 문장을 추출할 수 있습니까? 거꾸로 특정 SQL이 참조하는 오브젝트를 모두 추출할 수 있습니까?
5. 특정 SQL문이 사용하는 바인드 변수의 값을 알아내는 방법에는 어떤 것이 있나요?
6. 통계 정보가 없을 때 옵티마이저는 어떤 방법으로 예측 로우 건수(Cardinality)을 계산하나요?
7. 파티션 테이블에 파티션을 추가한 후 실행 계획이 변경되는 현상을 막으려면 어떻게 해야 하나요?
8. 히스토그램이 존재하는 경우에 Density가 계산되는 공식이 궁금합니다. 더불어서 이 Density를 이용해서 예상 로우 건수(Cardinality)를 구하는 방법도 궁금합니다.
제 2 장. 인덱스
1. Unique 인덱스와 Non Unique 인덱스의 차이가 무엇인가요?
2. 인덱스가 여러 개의 키(컬럼)로 구성되어 있을 때 최적의 순서는 무엇인가요?
3. 인덱스 분할(Index Split)에 의한 성능 문제를 해결하는 방법에는 무엇이 있나요?
4. 비트맵 인덱스를 이용하면 IS NULL 조건을 빠른 속도로 처리할 수 있다고 합니다. 그런데 실제로 테스트를 해보면 오히려 성능이 불량합니다. 그 이유는 무엇인가요?
5. Insert나 Delete에 비해 Update가 인덱스에 주는 부하가 가장 크다고 합니다. 왜 그런가요?
6. 인덱스를 리빌드하면 Logical Reads가 증가하는 버그가 있다고 합니다. 언제 이런 버그가 발생하며 그 이유는 무엇인지요?
7. 인덱스 재생성보다는 인덱스 리빌드가 더 효과적이라고 합니다. 그 이유는 무엇인가요?
제 3 장. I/O와 트랜잭션
1. 로우 체이닝은 언제 발생하고 어떻게 해결할 수 있나요?
2. 데이터가 한 건도 없는 테이블인데도 Logical Reas가 3 블록 발생합니다. 그 이유는 무엇인가요?
3. 정렬(Sort)를 수행할 때 오라클이 실제로 얼마의 메모리를 사용하는지 어떻게 모니터링하나요?
4. Direct Path로 INSERT를 할 때 Redo 데이터의 생성량을 최소화하려면 어떻게 해야하나요?
5. ORA-01555의 발생을 테스트하고 분석해보고 싶습니다. 좋은 방법은 무엇인가요?
6. Table Full Scan을 하면 버퍼 캐시의 LRU 리스트에서 어떻게 관리되나요?
7.병렬 DML 을 모니터링하는 방법에는 어떤 것들이 있습니까?
제 4 장. 트러블슈팅
1. TKPROF 리포트에서 보여지는 시간값이 부정확해보이는 경우가 많습니다. 왜 그런가요?
2. Unique 인덱스를 통해 하나의 값을 단 한번 수행하는 문장에서 대량의 로우 수나 Logical Reads가 나타나는 이유는 무엇입니까?
3. 특정 세션이 실행하는 SQL 문장을 추출할 수 있습니까?
4. SQL 문장의 실행 시간을 측정할 수 있습니까?
5. Dynamic SQL을 사용할 때 조심할 점은 무엇입니까?
6. 하드 파스 시간이 Parse 단계가 아닌 Execute 단계에 나타납니다. 그 이유는 무엇입니까?
7. 하드 파스 경합으로 인해 발생하는 대기 이벤트는 무엇입니까?