본문 바로가기

정보처리기사 실기/02. 응용SW엔지니어링

[2020 정보처리기사 실기 - 데이터 입출력 구현] 4. 데이터 조작 프로시저 최적화하기

 

 

 

1) 데이터 조작 프로시저 성능 개선

 - SQL 성능 튜닝 : DB 트랜잭션의 성능을 개선,

                        SQL 성능 튜닝은 데이터 조작 프로시저 성능으로 이어짐

 - 목적 

   성능 최상/최적화

   적합한 데이터베이스 파라미터 설정

   SQL 문장은 가능한 한 디스크 블럭을 최소 접근

   메모리 영역 보관, 조회 성능 향상

   잠금 발생 최소화

   배치작업, 백업작업 수행의 빠른 완료

 - SQL 성능 튜닝 프로세스

   데이터 모델 확인 : 테이블의 구조, 관계 확인

   인덱스 컬럼 조사 : 조회 조건에 자주 사용되는 컬럼을 인덱스로 지정

   인덱스 비교, 선택 : 인덱스 컬럼과 SQL에 들어오는 상수 값을 비교해서 쓸 인덱스 선택

   인덱스 효율성 검증 : 단일/복합 인덱스 판단, 복합일 경우 선두 컬럼 인덱스에 대해 값이 들어오는 지 판단

   드라이빙 테이블 선택 : 인덱스 이용 테이블 선택, 데이터 건수 파악, 인덱스 유형(UNIQUE, RANGE, FULL) 파악

   조인 유형 선택 : NESTED LOOP, SORT MERGE, HASH 조인 중 선택

   함수 인/라인 뷰 선택 : EXIST/IN, INLINEVIEW/SUBQUERY 사용, UNION/IN/OR, DECODE/SIGN함수 사용

 - SQL 문장의 파싱된 정보를 찾기 위한 라이브러리 캐시 검색절차

   SQL 문장에 해시함수를 적용한 결과 값으로 라이브러리 캐시와 해시버킷의 체인리스트 검색

   같은 SQL 스트림을 갖는 문장 검색

   일치하는 버전 검색

 - DB OPTIMIZER

   힌트 사용 : 항상 최적화된 실행계획을 수립하는 건 아니므로 힌트 사용

                  (USE_NL, USE_NL_WITH, USE_MERGE, USE_HASH)

   인덱스 활용 : 인덱스가 있어도 SQL 잘못 고재로 인덱스를 사용 못하는 일을 막아야 함

                     NOT, NULL, NOT NULL 등 SQL operator 사용 제한

   조인 방식, 순서 조정

   병렬 쿼리 : 배치 작업의 경우 하나의 SQL을 여러 개의 CPU가 병렬로 분할 처리, 처리 속도 향상

   SQL 바인딩 변수 사용 : 리터럴 값을 SQL에 삽입하면 프리컴파일할 때마다 재 컴파일 발생으로 속도 저하

 

 

2) SQL 부분 범위 처리

 - 개념 : 조건 만족 전체 범위X, 운반단위까지만 처리 추출

 - 목적 : 스캔 범위 나누어 운반 단위를 빨리 채워서 처리 속도 향상

           일부만 처리하고도 정확한 결과 도출, 처리 범위가 없어도 빠른 속도를 얻기 위함

 - SQL 부분 범위 처리 원칙

   자격 : 논리적으로 일부만 처리한 결과가 전체처리 결과와 같을 때

   부분 범위 처리를 못하는 경우 : ORDER BY가 사용 됐을 때 (인덱스를 이용해서 ORDER BY를 없앰)

                                            UNION, MINUS, INTERSECT 등 조회 후 추가 연산했을 때

                                            (EXISTS, NOT EXISTS, IN, NOT IN 등으로 대체)

 

 

* 부분 범위 처리

특징 : 처리할 범위가 아무리 넓어도 그 범위 중 일부만 처리

스캔 방법 : 드라이빙 조건은 만족하는 범위 차례대로

체크조건 처리방법 : 체크조건 검증 후 성공한 건 바로 운반단위로 보냄

결과추출 방법 : 운반단위가 채워지면 수행을 멈추고 결과 추출

 

* 전체 범위 처리

특징 : 범위가 너무 넓으면 수행속도 저하

스캔방법 : 드라이빙 조건은 만족하는 범위 모두

체크조건 처리방법 : 체크조건 검증 후 성공한 건 임시저장 공간에 저장

결과추출 방법 : 저장이 완료되면 필요한 2차가공을 한 후 운반단위만큼 추출하고 다음 요구까지 일단 멈춤