SQLP/SQL 전문가 가이드

시험전 마지막 메모3

개발자 키우기 2024. 2. 7. 11:52
  • 딕셔너리 캐시에 적재 할 때는 로우 단위로 I/O 한다.
  • 조건절에 IN 오퍼레이션이 있으면 Index Skip Scan은 동작하지 못한다.
  • order by에 컬럼명 DESC 가 인덱스로 설정되어 있으면 INDEX_DESC 힌트를 지정하여 해당 인덱스를 명시하지 않아도 옵티마이저가 해당 인덱스를 실행계획에 사용한다.
  • Recursive Call은 Parse Call 단계에서는 하드 파싱할때, Execute Call 단계에서는 저장형 프로시저를 수행하면서 내장된 SQL을 동작시킬때, Fetch Call 단계에서는 저장형 함수를 사용할때 발생한다.
  • 바인드 변수 사용은 애플리케이션 커서 캐시를 사용해야 Call을 줄인다.
  • 페이징 처리, Array size를 늘리면 Fetch Call을 줄일 수 있다.
  • Array Processing 활용하면 Execute Call을 줄일 수 있다.
  • Pruning을 사용할 수 없을때 Partition Range All 오퍼레이션이 나온다.
  • Pruning을 효과적으로 사용하기 위하여 Like 보다 BETWEEN 으로 범위를 정하는 것이 좋다.
  • 정적이나 동적 Pruning은 서로 성능 차이는 거의 없다.
  • Full Scan 이나 Index Fast Full Scan 일 경우는 병렬도를 파티션 수보다 더 높게 지정 가능하다.
  • Full Partition Wise 조인은 병렬도의 2배수로 병렬 프로세스를 할당할 필요가 없다.
  Range 파티션 List 파티션 Hash 파티션
파티션 기준 여러 컬럼 가능 단일 컬럼 여러 컬럼 가능
기타 공간 MAXVALUE DEFAULT 필요 없음
추가 정보 number, date, varchar 유형 가능
주기적 신규 파티션 추가 필요
불연속적인 값 분할
Pruning은 BETWEEN 등에서 발동
DML 경합 분산 좋음
Pruning은 = , In-List 일때만 발동
  • SQL Server는 다른 트랜잭션이 조회 중인 레코드를 변경하려면 마지막 레코드가 아닌 해당 레코드를 읽고 다른 레코드를 읽기 시작하면 변경할 수 있다.
  • SQL Server는 제약 설정이 따로 없다면 INSERT 할때 다른 트랜잭션과 동시에 수행이 가능하다.
  • 파티션 읽는 갯수 문제에서 자료형이 일치하는지 확인이 필요하다.
  • SELECT FOR UPDATE문에서 A와 B를 조인할때 조건절을 통과한 결과 집합에 대해서만 양쪽 로우에 Lock이 걸리며 커밋을 해야 Lock이 풀린다.