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이 풀린다.