Data

[1028 SQL]Ⅲ. SQL 고급 활용 및 튜닝-제6장 고급 SQL 튜닝

제6장 고급 SQL 튜닝

제1절 소트 튜닝
제2절 DML 튜닝
제3절 데이터베이스 Call 최소화
제4절 파티셔닝
제5절 대용량 배치 프로그램 튜닝
제6절 고급 SQL 활용

제1절 소트 튜닝

정렬 작업의 성능 최적화
  1. 인덱스 활용 정렬작업이 컬럼에 인덱스 설정
  2. 메모리설정 정렬작업에 할당된 메모리를 조정 
  3. limit 사용 필요한 데이터만 정렬 불필요한 정렬작업 최소화
  4. 소트머지 알고리즘 최적화  

제2절 DML 튜닝

 
  1. 인덱스 관리 인덱스 많으면 DML 성능이 저하, 필요한 인덱스만 유지
  2. 배치처리  대량의 DML 작업은 배치로 처리 성능최적화
  3. 트랜젝션 관리  트랜잭션 크기 관리 
  4. 잠금관리 잠금 경합을 최소화  

제3절 데이터베이스 Call 최소화

네트워크 트래픽, 서버 부하
  1. 배치호출 여러개SQL문을 하나의 배치로 처리, 호출횟수 줄임
  2. 프로시저 사용 복잡한 로직 프로시저 처리
  3. 결과집합최적화 필요한데이터만 조회
  4. 연결관리 연결을 재사용

제4절 파티셔닝

대용량 테이블을 작은 파티션으로 나눠관리 
Oracle 지원 1. 범위 파티셔닝 데이터 범위에 따라 파티션 나눔
2. 해시 파티셔닝 해시함수를 사용 균등분산
3. 리스트파티셔닝 특정값 목록에 따라 
4. 복합파티셔닝 여러 파티셔닝 기법 조합
파티션프루닝( Pruning ) 필요없는파티션 건너띄고 필요한파티션만 스캔
  정적 파티션프루링 액세스할 파티션을 컴파일 시점에 미리 결정, 파티션키컬럼을 상수조건으로 작동
  동적 파티션프루링 액세스할 파티션을  실행시점에 결정, 파티션키컬럼 바인드변수로 조회
NL Join 할때도 Inner테이블이 조인컬럼 기준으로 파티셔닝되있으면 푸르닝동작
인덱스 파티셔닝  
  Local 파티션 인덱스  
Global 파티션 인덱스  
  Prefixed 파티션 인덱스  
NonPrefiexed 파티션 인덱스  
  인덱스 파티셔닝 가이드 인덱스를 파티셔닝
  비파티션 = 단일인덱스
Non-Partitioned Index
1. 파티션 키컬럼이 조건절에 누락시 비효율적
2. NL Join에서 파티션 키에 대한 넓은 범위검색 
3. sort order by 대체효과 상실
4. 테이블 파티션이동, 삭제시 unusable 주의
  Global Prefixed Index

1. 인덱스 경합 분산에 효과적
2. 여러 Local 인덱스 파티션을 액세스 하는것이 비효율일때 
3. 테이블파티션 이동,삭제시 unusable 주의
  Local Prefixed 1. 관리적측면유용
2. 이력성 테이블 주로 관리하는DB 효과정
3. 파티션 키  equal 조건일때 유용
조건없을때 전체 엑세스
4. 파티션 키 범위 일때 분리  
  Local Non Prefixed 1. 관리적  측면에서 유용
2. 이력성데이터 효과적
3. 키컬럼 조건절일때 유용
4. 조건없을때 전체 엑세스
5. 조건이 범위면 local prefixed 보다 유리, 그래도 좁은범위검색이어야함

제5절 대용량 배치 프로그램 튜닝

병렬도(Degree of parallelism) 를 32로 지정, 5분소요되는것을 병렬처리 없이 10분소요가 나을 수있다. 
  1. 병렬처리 인덱스 옵티마이저힌트 활용. 
  2. 데이터 청크 데이터를 작은 청크로 나누어 처리 메모리사용최적화
  3. 트랜잭션 크기조정  
  4. 재시도 로직 실패한 작업 재시도로직 구현 안정성 높임

제6절 고급 SQL 활용

 
  1. 윈도우 함수 복잡한 집계 분석 효율적으로
  2. CTE
Common Table Expressions
쿼리 구조화, 가독성 높임
  3. 재귀쿼리 재기 CTE사용 
  4. 다중테이블 조인 다중테이블 조인 최적화