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

More Related Content

What's hot

Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.xInBum Kim
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)Hyosung Jeon
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
Cassandra education material
Cassandra education materialCassandra education material
Cassandra education materialYoungki Kim
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
구글의 분산스토리지
구글의 분산스토리지구글의 분산스토리지
구글의 분산스토리지juhyun
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox떠리 이
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) InBum Kim
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트흥배 최
 
pg_hba.conf 이야기
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기PgDay.Seoul
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차seung-hyun Park
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
HTTP 완벽가이드 7장 캐시
HTTP 완벽가이드 7장 캐시HTTP 완벽가이드 7장 캐시
HTTP 완벽가이드 7장 캐시박 민규
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
구글의 공룡화
구글의 공룡화구글의 공룡화
구글의 공룡화juhyun
 
MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)InBum Kim
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)InBum Kim
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 

What's hot (20)

Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
Mongo db 2.x to 3.x
Mongo db 2.x to 3.xMongo db 2.x to 3.x
Mongo db 2.x to 3.x
 
Mongo db 복제(Replication)
Mongo db 복제(Replication)Mongo db 복제(Replication)
Mongo db 복제(Replication)
 
Mongodb cluster
Mongodb clusterMongodb cluster
Mongodb cluster
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
Cassandra education material
Cassandra education materialCassandra education material
Cassandra education material
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
구글의 분산스토리지
구글의 분산스토리지구글의 분산스토리지
구글의 분산스토리지
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
pg_hba.conf 이야기
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
HTTP 완벽가이드 7장 캐시
HTTP 완벽가이드 7장 캐시HTTP 완벽가이드 7장 캐시
HTTP 완벽가이드 7장 캐시
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
구글의 공룡화
구글의 공룡화구글의 공룡화
구글의 공룡화
 
MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 

Viewers also liked

Tools in android sdk
Tools in android sdkTools in android sdk
Tools in android sdkMinchul Jung
 
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위HyeonSeok Choi
 
서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4HyeonSeok Choi
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1HyeonSeok Choi
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇Minchul Jung
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1HyeonSeok Choi
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6HyeonSeok Choi
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템HyeonSeok Choi
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다HyeonSeok Choi
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9HyeonSeok Choi
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9HyeonSeok Choi
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatHyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3HyeonSeok Choi
 
Apprenticeship patterns 7
Apprenticeship patterns 7Apprenticeship patterns 7
Apprenticeship patterns 7Minchul Jung
 

Viewers also liked (20)

Tools in android sdk
Tools in android sdkTools in android sdk
Tools in android sdk
 
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
대용량아키텍처와성능튜닝 8장성능엔지니어링정의와범위
 
서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4서버인프라를지탱하는기술3_4
서버인프라를지탱하는기술3_4
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇[Http완벽가이드] 9장 웹로봇
[Http완벽가이드] 9장 웹로봇
 
Domain driven design ch1
Domain driven design ch1Domain driven design ch1
Domain driven design ch1
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
 
Code1_2
Code1_2Code1_2
Code1_2
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 
Apprenticeship patterns 7
Apprenticeship patterns 7Apprenticeship patterns 7
Apprenticeship patterns 7
 

Similar to 7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)

대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4ukjinkwoun
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Gruter
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK TelecomGruter
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Gruter
 
refactoring database
refactoring databaserefactoring database
refactoring database기룡 남
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기ksdc2019
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache TajoGruter
 
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Jiho Lee
 
Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Sanghee Lee
 
대규모 서비스를 가능하게 하는 기술
대규모 서비스를 가능하게 하는 기술 대규모 서비스를 가능하게 하는 기술
대규모 서비스를 가능하게 하는 기술 Hyungseok Shim
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGruter
 
DBMS 아키텍처
DBMS 아키텍처DBMS 아키텍처
DBMS 아키텍처HaksunLEE6
 
Tajo korea meetup oct 2015-spatial tajo
Tajo korea meetup oct 2015-spatial tajoTajo korea meetup oct 2015-spatial tajo
Tajo korea meetup oct 2015-spatial tajoBD
 
AWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil Kim
AWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil KimAWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil Kim
AWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil KimAmazon Web Services Korea
 
Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018
Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018
Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018Amazon Web Services Korea
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1Kay Kim
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 

Similar to 7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장) (20)

대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4
 
Mongodb index
Mongodb indexMongodb index
Mongodb index
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo,  and application case of SK TelecomSQL-on-Hadoop with Apache Tajo,  and application case of SK Telecom
SQL-on-Hadoop with Apache Tajo, and application case of SK Telecom
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014Elastic Search Performance Optimization - Deview 2014
Elastic Search Performance Optimization - Deview 2014
 
refactoring database
refactoring databaserefactoring database
refactoring database
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache Tajo
 
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
 
elasticsearch
elasticsearchelasticsearch
elasticsearch
 
Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313
 
대규모 서비스를 가능하게 하는 기술
대규모 서비스를 가능하게 하는 기술 대규모 서비스를 가능하게 하는 기술
대규모 서비스를 가능하게 하는 기술
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
 
DBMS 아키텍처
DBMS 아키텍처DBMS 아키텍처
DBMS 아키텍처
 
Tajo korea meetup oct 2015-spatial tajo
Tajo korea meetup oct 2015-spatial tajoTajo korea meetup oct 2015-spatial tajo
Tajo korea meetup oct 2015-spatial tajo
 
AWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil Kim
AWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil KimAWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil Kim
AWS Innovate: Best Practices for Migrating to Amazon DynamoDB - Sangpil Kim
 
Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018
Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018
Amazon Aurora 신규 서비스 알아보기::최유정::AWS Summit Seoul 2018
 
Hadoop Overview 1
Hadoop Overview 1Hadoop Overview 1
Hadoop Overview 1
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 

7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)

  • 1. 7부. 애플리케이션 입장에 서의 SQL 튜닝(1~8장) 실무로 배우는 시스템 성능 최적화 아꿈사 스터디 - 정민철
  • 2. 텍스트 기본방향 ▸애플리케이션 최적화 전문가: 시스템 업무 전반적 최적화 ▸애플리케이션 SQL 튜닝 중점 항목 ▸중복 수행 제거 ▸불필요한 수행 제거 ▸최적 수행 ▸수행 통합 ▸집합처리 ▸트랜젝션 처리
  • 4. 텍스트 중복수행 SQL 제거 ▸CBD(Component Based Development) 개발의 문제점
  • 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차 쿼리: 전체 탐색 ▸다른 입력값을 바탕으로 파티션 키값 범위 설정 ▸파티션 키와의 연관관계를 유추해 탐색 범위를 줄임
  • 14. 텍스트 조회항목 사용 여부 ▸고성능 쿼리 ▸반드시 필요한 컬럼만 제공해서 성능 향상 ▸필요없는 컬럼 제거 ▸조인 테이블 최소화 및 제거
  • 15. 텍스트 쿼리통합 ▸쿼리통합 ▸SELECT의 집합처리 ▸여러번 수행할 쿼리를 한번에 수행해 성능 개선 ▸메인/서브 쿼리로 나눠 실행되는 것을 1개로 통합 ▸병렬쿼리 통합: 여러개의 개별 조회문으로 구성된 쿼리를 Union all이나 1:1 JOIN형태로 통합
  • 16. 텍스트 DB 집합처리 ▸배치에서 입력/수정/삭제 집합 처리(Array Batch) ▸한 트랜젝션 내에서 동일한 테이블에 CUD를 여러건 처리하 는 작업은 집합 처리 적용 ▸집합 처리 시 자바 힙 메모리 부족에 주의(적절하게 건수 조절 )
  • 17. 텍스트 트랜잭션 처리 ▸트랜젝션 처리 시 쿼리가 락을 점유하는 시간을 최소화
  • 18. 텍스트 복합적인 기능을 수행하는 쿼리 제거 ▸복합 기능 쿼리: 하나의 쿼리에 1개 이상의 기능이 담긴 쿼리 ▸한개의 실행 계획만 가지고 실행 => 다양한 조건의 실행 계획 수립 불가 ▸쿼리 분리: 적절한 인덱스를 선택 기준 ▸Union all을 이용해 하나의 쿼리에 여러 개의 select 구성 ▸실행 조건문 추가: 입력값에 따라 테이블 접근 제한 ▸NVL, DECODE, 힌트 활용 ▸검색 조건으로 분산도가 좋은 항목이 필수 입력항목이 되도록 업 무협의
  • 19. 텍스트 스칼라 서브쿼리 사용 시 주의사항 ▸스칼라 서브 쿼리: SELECT절에 사용된 쿼리 ▸서브쿼리에 분산도가 좋은 적절한 인덱스 사용 ▸전체 쿼리결과가 소량인 경우 사용 ▸조인 처리해서 성능 개선
  • 20. 텍스트 페이징 처리 ▸목록 전체 접근: 전체 건수조회, 전체 페이지 수 표시 ▸필요없거나 무의미한 전체 조회 제거 ▸초기에 전체 건수 및 페이지 수 생성 후 재활용(변경이 적은 경우) ▸3~4 페이지 캐시 후 대상 목록 변경 시 재 생성 ▸정렬된 결과를 얻기 위해 Order by를 사용해서 전체 접근 ▸Order by 순서와 일치하는 페이징 인덱스 생성 ▸페이징 인덱스 칼럼 값을 페이지 이동 시 다음 키값으로 사용 ▸동적 정렬은 필수적인 경우에만 제한적으로 제공
  • 21. 텍스트 페이징 처리 ▸분산도가 좋은 필수 입력항목이 없어 넓은 범위 접근 ▸분산도가 좋은 입력 항목을 필수 항목으로 지정 및 자동 초 기값 지정 ▸기간 조회는 조회 가능 최대기한 설정, 기본 기간은 작게 설 정