5. 텍스트
중복수행 SQL 제거
▸중복 수행의 문제점
▸DB 수행 시간 외의 시간(네트워크, DB드라이버)이 쌓여서
늘어남
▸수 많은 JDBC 객체 생성으로 GC에 영향을 줌
▸해결책은 캐시 사용
6. 텍스트
애플리케이션 캐시의 종류
캐시 분류 공유 범위 데이터 생명주기
적용 데이터
의 양
캐시 수 적용
블록 함수 사용 함수 내 소량 수행중인 해당 함수의 수 개발자 코드
요청 서비스 서비스 요청 소량 수행중인 스레드 수 프레임워크
세션 사용자 요청
세션 타임아웃, 로그아
웃
극소량 시스템 내 사용자 세션 수
HTTP세션,
사용자 세션
프로세스 인스턴스
타임아웃, 개수, 기간
등
중량 인스턴스당 1개
프레임워크,
솔루션
프로세스간
공유
시스템 전체
타임아웃, 개수, 기간
등
대량 시스템당 1개 이상 솔루션
9. 텍스트
불필요한 SQL 수행 제거
▸공통모듈
▸여러 업무정보를 전부 제공해주려는 경향이 있음
▸따라서 사용 시 필요하지 않은 정보를 추가 조회 하는 경우가 많음
▸불필요한 쿼리 개선 시 고려사항
▸공통기능 수행 모듈 우선 대상
▸조회결과 단위 분류(쿼리, 내부 서브모듈 단위로)
▸결과값 중 주로 사용하는 값 유형 조사
▸잘못 사용할 경우 전체 소스 대상으로 패턴 확인
▸사용값을 패턴과 모듈 구성에 따라 개선하는 방안 도출
10. 텍스트
최적수행: ROWNUM 추가
▸Fetch 크기: 한번에 보내는 레코드 건수, 여러건 조회의 경우
값이 클수록 효율 증가
▸Rownum 조건을 where문에 지정
▸1건만 조회 혹은 사용: 1로 지정하여 추가DB접근 방지
▸카운트 쿼리 중 필요 이상 건수를 구하는 경우: ROWNUM
<= 1
▸우선순위에 따른 선택 수행을 위해: ROWNUM = 1
12. 텍스트
최적수행: 파티션 키 추가
▸파티션 테이블 사용 목적
▸탐색 범위 축소
▸입력 시 부하분산
▸장애 시 부분 백업 및 복구
▸글로벌 인덱스: 모든 파티션을 인덱스 함
▸데이터 변경 시 재 생성 이전에 사용불가 상태가 됨
▸사용불가 시 해당 인덱스 사용하는 쿼리 급격한 성능저하
▸가급적 로컬 인덱스 사용 및 예외적인 경우만 글로벌 인덱스 사용
13. 텍스트
최적수행: 파티션 키 추가
▸파티션 키가 Where조건에 포함되지 않으면 전체 파티션 탐색
▸테이블이 파티션 된 경우 파티션 키가 업무 규칙상 필요 없어도
넣어야 함
▸파티션 키로 쿼리를 2개로 분리해 부분 범위탐색 시도
▸1차 쿼리: 파티션 키를 활용해 검색범위를 좁혀서 탐색
▸2차 쿼리: 전체 탐색
▸다른 입력값을 바탕으로 파티션 키값 범위 설정
▸파티션 키와의 연관관계를 유추해 탐색 범위를 줄임
18. 텍스트
복합적인 기능을 수행하는 쿼리 제거
▸복합 기능 쿼리: 하나의 쿼리에 1개 이상의 기능이 담긴 쿼리
▸한개의 실행 계획만 가지고 실행 => 다양한 조건의 실행 계획
수립 불가
▸쿼리 분리: 적절한 인덱스를 선택 기준
▸Union all을 이용해 하나의 쿼리에 여러 개의 select 구성
▸실행 조건문 추가: 입력값에 따라 테이블 접근 제한
▸NVL, DECODE, 힌트 활용
▸검색 조건으로 분산도가 좋은 항목이 필수 입력항목이 되도록 업
무협의
19. 텍스트
스칼라 서브쿼리 사용 시 주의사항
▸스칼라 서브 쿼리: SELECT절에 사용된 쿼리
▸서브쿼리에 분산도가 좋은 적절한 인덱스 사용
▸전체 쿼리결과가 소량인 경우 사용
▸조인 처리해서 성능 개선
20. 텍스트
페이징 처리
▸목록 전체 접근: 전체 건수조회, 전체 페이지 수 표시
▸필요없거나 무의미한 전체 조회 제거
▸초기에 전체 건수 및 페이지 수 생성 후 재활용(변경이 적은 경우)
▸3~4 페이지 캐시 후 대상 목록 변경 시 재 생성
▸정렬된 결과를 얻기 위해 Order by를 사용해서 전체 접근
▸Order by 순서와 일치하는 페이징 인덱스 생성
▸페이징 인덱스 칼럼 값을 페이지 이동 시 다음 키값으로 사용
▸동적 정렬은 필수적인 경우에만 제한적으로 제공
21. 텍스트
페이징 처리
▸분산도가 좋은 필수 입력항목이 없어 넓은 범위 접근
▸분산도가 좋은 입력 항목을 필수 항목으로 지정 및 자동 초
기값 지정
▸기간 조회는 조회 가능 최대기한 설정, 기본 기간은 작게 설
정