DP-MSQ 쿼리 최적화 가이드 쿼리 최적화 방법 2014년 7월.

Slides:



Advertisements
Similar presentations
1 넷스팟 MAC ID 설정 방법 ( 서울캠퍼스 기준 ) 각종 스마트폰의 WiFi 를 이용시 각종 스마트폰의 WiFi 를 이용시 MAC ID 설정을 하는 방법 입니다. 아이폰의 경우는 별도의 설정없이 바로 사용이 가능하오니, 사용이 어려울 경우, 고객센터로 문의하시면 됩니다.
Advertisements

스마트 KTC 사용자 매뉴얼 스마트폰용 모바일학생증 앱 설치 및 기본기능. 강원관광대 스마트 KTC 앱 설치 강원관광대학교 모바일학생증 앱 ( 이하 ‘ 스마트 KTC’ 로 명명 ) 은 안드로이드폰은 Google Play Store, 아이폰 은 App Store 에서 무료로.
I. 프로젝트 동기 II. 프로젝트 목표 III. 파일시스템 IV. 암호화 및 복호화 V. 인터페이스 VI. FBR READ/WRITE VII. 프로그램 흐름도 VIII. 미 구현 사항 IX. 프로젝트 기대효과 X. 프로그램 요구사항 및 팀원 역할분담 XI. 시연 XII.
PowerBuilder Stored Procedure DW
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
SQL Injection Member 최병희, 김상우, 조용준, 유창열.
1 ENT 출고확정 처리방법 ? 1. 발주관리 > 주문전체 보기 내 필드 추가 확인 ? ENT 주문관리 페이지에서 그림
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
오라클 데이터베이스 성능 튜닝.
MySQL 및 Workbench 설치 데이터 베이스.
Windows Server 장. 사고를 대비한 데이터 백업.
11 테이블 관리와 데이터 딕셔너리 데이터베이스 응용 프로젝트 개발 테이블 구조 변경 데이터 딕셔너리.
3장. 데이터베이스 구축의 전체 과정 미리 실습하기
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
Windows 8 Ksystem G&I 설치.
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
8장. 원격지 시스템 관리하기.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SELECT empno, ename, job, sal, dname FROM emp, dept
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
DP-ORA 쿼리 최적화 가이드 쿼리 최적화 방법 2014년 7월.
KIM HEESANG PL/SQL 2 KIM HEESANG
11장. 1차원 배열.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
셍산관리시스템 작업일보 등록 ☞ ☞ 작업일보등록 - 실행화면 C B A 사용설명
환경 설정 예제 데이터베이스 생성 - 그림 3.34의 SQL Server 관리 스튜디오 창의 왼쪽 영역의 데이터베
7가지 방법 PowerPoint에서 공동 작업하는 다른 사용자와 함께 편집 작업 중인 사용자 보기
JDBC Lecture 004 By MINIO.
2015학년도 PHP 기말 레포트 로그인 홈페이지 제작.
3장. SQL Server 2008 전체 운영 실습 및 DB와 프로그램의 연동
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
뇌를 자극하는 Windows Server 2012 R2
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
8장. spss statistics 20의 데이터 변환
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
CHAP 21. 전화, SMS, 주소록.
S-Work 2.0 DRM 신규 버전 설치 가이드 SOFTCAMP
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
How I Approach Tuning a SQL Statement
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
오라클 11g 보안.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
14 뷰(View) 뷰의 개념 뷰 관리.
Chapter 10 데이터 검색1.
IPC 펌웨어 업그레이드 방법 안내 ** 반드시 IPC를 NVR POE 포트 연결 전에 작업 하시기 바랍니다. IPC를 NVR POE 포트에 연결 하실 경우 IP 대역폭을 마추셔야 하는 작업이 필요합니다. **
MIS 플2 회계- 마감후이월(2007).
14 뷰(View) 뷰의 개념 뷰 관리.
 6장. SQL 쿼리.
구글 계정 생성가이드.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
fastestslowest 실제 질의문에서 사용 타입 추천 인덱스 SELECT list Default
6 객체.
연구실안전관리시스템 안전교육 이수방법 사무국 시설과.
Presentation transcript:

DP-MSQ 쿼리 최적화 가이드 쿼리 최적화 방법 2014년 7월

목차 개요 암호화 동작원리 VTI 모드 쿼리 최적화 방법 API 모드 쿼리 최적화 방법 최적화된 쿼리 검증 방법 주의사항 쿼리 최적화란? 암호화 적용 시 쿼리 최적화 대상 암호화 동작원리 VTI 모드 동작원리 암호화 적용 이후 객체 변화 API 모드 VTI 모드 쿼리 최적화 방법 API 모드 쿼리 최적화 방법 최적화된 쿼리 검증 방법 주의사항

개요 쿼리 최적화란? 암호화 적용 시 쿼리 최적화 대상

I. 개요 1. 쿼리 최적화란? 개요 - 쿼리 최적화란? D’Amo는 암호화 후에도 기존 쿼리를 동일하게 사용할 수 있는 기능을 제공하고 있습니다. 일부 쿼리의 경우 암호화 후 불필요한 암복호화로 인해 성능이 저하되거나, MSQcle 특성상 기존의 쿼리를 사용하기 어려운 경우들이 있습니다. 이러한 경우 쿼리를 적절하게 변경함으로써, 문제를 해결할 수 있으며, 이러한 과정을 “쿼리 최적화”라고 부릅니다. 암호화 후 변경 내역 view/trigger process 추가 일부 경우 execution plan 변경 쿼리 최적화 암호화 쿼리 최적화 필요성 성능 개선! 서버 부하 감소! View로 인한 쿼리 Syntax 제약 해결! DP-MSQ 쿼리 최적화 가이드

개요 - 암호화 적용 시 쿼리 최적화 대상 (1/2) 불필요한 암복호화 방지 View 제약 2. 암호화 적용 시 쿼리 최적화 대상 개요 - 암호화 적용 시 쿼리 최적화 대상 (1/2) 불필요한 암복호화 방지 실제 암호화 값에 대한 복호화 값이 query를 실행하는 도중 일시적으로만 사용되거나, 단순 비교만을 위해 사용되는 경 우에는 암호화 값을 직접 사용하여 복호화 과정을 줄이거나 생략할 수 있습니다. 대표적인 사례로는 다음과 같습니다. Sub Query에서 암호화 컬럼에 대한 참조가 대량으로 참조하는 경우 암호화 컬럼 간 조인 암호화 데이터 간의 복제 암호화 컬럼이 group/having 절에 있는 쿼리 View 제약 View는 일종의 가상의 테이블로 실제 테이블에 적용 가능한 Query의 경우 동일하게 사용할 수 있지만 아래와 같은 일 부 쿼리의 경우 MSQcle의 특성상 view에 적용하는 것이 불가능합니다. Syntax 에러 발생 Return rowid, merge into Partition을 명시한 query rowid를 이용한 쿼리 LOB 컬럼의 처리 DP-MSQ 쿼리 최적화 가이드

개요 - 암호화 적용 시 쿼리 최적화 대상 (2/2) Plan 변경 기존 Table에 적용되어 있던 Trigger DML 2. 암호화 적용 시 쿼리 최적화 대상 개요 - 암호화 적용 시 쿼리 최적화 대상 (2/2) Plan 변경 암호화 적용 후에는 기존 query들은 view를 이용하게 되고, 암호화 컬럼에 대한 인덱스가 변경되므로 execution plan이 변경될 수 있습니다. plan이 비효율적으로 변경되는 경우, view대신에 table을 직접 이용하도록 변경함으로써 plan을 개 선할 수 있습니다. 다음의 경우에는 암호화 후에 실행 계획이 비효율적으로 개선되는 사례들입니다. 암호화 컬럼을 이용한 조인 (outer 조인 포함) 복잡한 쿼리 (sub query+order+group가 포함된 경우) 전방위 검색 (%plain%) Hint 가 들어있는 쿼리 DB link와 연관 쿼리 기존 Table에 적용되어 있던 Trigger 기존 table에 적용되어 있던 trigger의 구문은 새로 추가된 view의 trigger의 영향으로 오동작하거나, 결과가 달라질 수 있습니다. 따라서 view 대신에 암호화 테이블을 참조하도록 수정하는 것이 바람직합니다. DML Insert/update 구문의 경우 암호화 후에는 view의 trigger를 이용하게 됩니다. 따라서 실행 시에 암호화 부하에 더불어 trigger사용에 따른 부하가 추가됩니다. 그러므로 trigger를 이용하지 않도록 수정함으로써 성능을 향상시킬 수 있다. DP-MSQ 쿼리 최적화 가이드

암호화 동작원리 VTI 모드 동작원리 암호화 적용 이후 객체 변화 API 모드

암호화 동작원리 – VTI 모드 DP-MSQ VTI 모드의 동작 원리 TRIGGER 암호화 전 암호화 후 II. 암호화 동작원리 1. VTI 모드 암호화 동작원리 – VTI 모드 DP-MSQ VTI 모드의 동작 원리 암호화 후 원본 테이블이 변경되기 때문에, 암호화 전 테이블과 동일한 형식을 가진 VIEW를 통해 사용자에게 정보를 보 여줍니다. 이때 VIEW를 통해 정보를 보여주기 위해 데이터 입력 조회 시 원본테이블과 VIEW사이에서 데이터 암복호화 가 이루어집니다. MEMBER (TABLE) MEMBER_DAMO (TABLE) (MODIFY) A B C JUMIN_NO 8104191024363 RENAME A B C SEC_JUMIN_NO 81041910321D2FCD121E35 복 호 화 암 호 화 기 존 접 근 경 로 A B C JUMIN_NO 8104191024363 암호화 후 접근 경로 MEMBER (VIEW) 사용자 TRIGGER 암호화 전 암호화 후 sIMEMBER, sUMEMBER, sDMEMBER (TRIGGER) DP-MSQ 쿼리 최적화 가이드

암호화 동작원리 – API 모드 DP-MSQ API 모드의 동작 원리 암호화 전 암호화 후 A B C JUMIN_NO II. 암호화 동작원리 2. API 모드 암호화 동작원리 – API 모드 DP-MSQ API 모드의 동작 원리 암호화 후 원본 테이블이 변경되지만, 별도의 VIEW/TRIGGER는 생성하지 않고, 암/복호화 쿼리를 삽입하여 암호화 테이 블에서 직접 암호화 데이터를 조회/수정 합니다. MEMBER (TABLE) MEMBER (TABLE) (MODIFY) A B C JUMIN_NO 8104191024363 A B C JUMIN_NO 81041910321D2FCD121E35 기 존 접 근 경 로 SELECT A,B,C,JUMIN_NO FROM MEMBER SELECT A,B,C,dbo.decrypt_var(‘AES’,JUMIN_NO,’’) JUMIN_NO FROM dbo.MEMBER 암호화 후 접근 경로 사용자 암호화 전 암호화 후 DP-MSQ 쿼리 최적화 가이드

VTI 모드 쿼리 최적화 방법

III. VTI 모드 쿼리 최적화 방법 1. 쿼리 최적화 방법 VTI모드 쿼리 최적화 방법 쿼리 최적화하는 방법은 매우 다양한 경우가 존재하지만 기본적으로 다음의 방식 중 하나 또는 복수의 방 법들을 사용합니다. 복호화 된 값 대신에 암호화 값을 직접 이용하도록 변경 view 대신에 암호화 테이블을 직접 참조하도록 대상 테이블 수정 쿼리에서 직접 암복호화 함수를 호출 인덱스의 효율을 높이기 위해 암호화 인덱스에 사용되는 인덱스 함수를 호출 DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – 암복호화 함수 (1/2) III. VTI 모드 쿼리 최적화 방법 2. 암복호화 함수 VTI모드 쿼리 최적화 방법 – 암복호화 함수 (1/2) 암호화 함수 암호화 함수명(‘소유자’, ’테이블’, ’컬럼’, 암호화 하고자 하는 값) 컬럼 type에 따라 각기 다른 암호화 함수를 사용. 함수 인자는 모두 동일. ENCODE TYPE에 따라 사용 해야 하는 함수 명이 각각 다름에 주의 해야 한다. 암호화 함수 정보는 암호화 테이블의 SIT_**** Trigger Script에서 얻을 수 있음 DAMO.ENC_VARCHAR(‘DEV’, ‘dbo.CUST’, ‘SOC_NO’,SEC_SOC_NO) -- In case that type of “SOC_NO” is varchar NCHAR NVARCHAR CHAR VARCHAR VARBINARY ENC_NCHAR ENC_NVARCHAR ENC_CHAR ENC_VARCHAR HEX ENC_NCHAR_HEX ENC_NVARCHAR_HEX ENC_CHAR_HEX ENC_VARCHAR_HEX B64 ENC_NCHAR_B64 ENC_NVARCHAR_B64 ENC_CHAR_B64 ENC_VARCHAR_B64 부분암호화 ENC_NCHAR_PE ENC_NCHAR_PE_B64 ENC_NVARCHAR_PE ENC_NVARCHAR_PE_B64 ENC_CHAR_PE ENC_CHAR_PE_B64 ENC_VARCHAR_PE ENC_VARCHAR_PE_B64 DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – 암복호화 함수 (2/2) III. VTI 모드 쿼리 최적화 방법 2. 암복호화 함수 VTI모드 쿼리 최적화 방법 – 암복호화 함수 (2/2) 복호화 함수 복호화 함수명(‘소유자’, ’테이블’, ’컬럼’, 일반값) 컬럼 type에 따라 각기 다른 복호화 함수를 사용. 함수 인자는 모두 동일. ENCODE TYPE에 따라 사용 해야 하는 함수 명이 각각 다름에 주의 해야 한다. 복호화 함수 정보는 암호화 테이블의 ****_ROOT View Script에서 얻을 수 있음 DAMO.DEC_VARCHAR(‘DEV’, ‘dbo.CUST’, ‘SOC_NO’,SEC_SOC_NO) -- In case that type of “SOC_NO” is varchar NCHAR NVARCHAR CHAR VARCHAR VARBINARY DEC_NCHAR DEC_NVARCHAR DEC_CHAR DEC_VARCHAR HEX DEC_NCHAR_HEX DEC_NVARCHAR_HEX DEC_CHAR_HEX DEC_VARCHAR_HEX B64 DEC_NCHAR_B64 DEC_NVARCHAR_B64 DEC_CHAR_B64 DEC_VARCHAR_B64 부분암호화 ENC_NCHAR_PE ENC_NCHAR_PE_B64 ENC_NVARCHAR_PE ENC_NVARCHAR_PE_B64 ENC_CHAR_PE ENC_CHAR_PE_B64 ENC_VARCHAR_PE ENC_VARCHAR_PE_B64 DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – 인덱스 함수 평문값 인덱스 함수 III. VTI 모드 쿼리 최적화 방법 3. 인덱스 함수 VTI모드 쿼리 최적화 방법 – 인덱스 함수 평문값 인덱스 함수 평문암호화 인덱스 함수(‘소유자’,’테이블’,’컬럼’,값) : 평문값을 인덱스용 암호화 값으로 변환함. DAMO.DBO.PRED_META_PLAIN_V(‘710101-1234567’, ‘DEV’, ‘dbo.CUST’, ‘SOC_NO’) VARCHAR CHAR PRED_META_PLAIN_V PRED_META_PLAIN_C DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – 단방향 함수 단방향(HASH) 함수 III. VTI 모드 쿼리 최적화 방법 4. 단방향 함수 VTI모드 쿼리 최적화 방법 – 단방향 함수 단방향(HASH) 함수 단방향 함수(값) : 평문을 단방향(HASH) 알고리즘으로 암호화 변환함. 단방향 함수의 경우 알고리즘 선택을 단방향 함수 스크립트(SCRIPT) 내 숫자 선택 수정으로 설정함. 알고리즘 파라미터 변경 후 HASH_STR_DATA 함수 재 생성 해야 적용됨 1: SHA256, 2: SHA512 ****기본값 : 1: SHA256 DAMO.DBO.HASH_STR_DATA(‘1234567890’) DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – SELECT문 변경 (1/5) III. VTI 모드 쿼리 최적화 방법 5. SELECT문 변경 VTI모드 쿼리 최적화 방법 – SELECT문 변경 (1/5) 대량의 데이터를 처리하는 Inline Sub-Query 의 변경 불필요한 대량의 복호화 작업을 우회하여 암호화 값 자체로 비교하여 처리 Inline Sub-Query 결과 : 10만 건, 최종 결과값 : 20건  10만 건의 모든 데이터를 복호화 하는 것은 매우 큰 성능저하를 불러옴  10만 건의 모든 데이터를 복호화 하는 것 대신 사용자에게 보여줄 최종 결과인 20건에 대한 복호화만 하도록 쿼리 수 정을 통하여 성능 개선 SELECT A.A, A.SOC_NO, B.DEPT_NAME FROM (SELECT A, SOC_NO FROM CUST) A, CUST_DEP B WHERE A.A = B.A; SELECT A.A, SUBSTRB(DAMO.DBO.DEC_VARCHAR (‘DEV’, ‘dbo.CUST’, ‘SOC_NO’, A.SOC_NO),1,14), B.DEPT_NAME FROM (SELECT A, SEC_SOC_NO as SOC_NO FROM dbo.CUST_DAMO) A, CUST_DEP B WHERE A.A = B.A; DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – SELECT문 변경 (2/5) III. VTI 모드 쿼리 최적화 방법 5. SELECT문 변경 VTI모드 쿼리 최적화 방법 – SELECT문 변경 (2/5) 암호화 컬럼으로 일치 검색(=) 최적화 방안 (암호화 값 자체 인덱스로 비교) 암호화 컬럼에 인덱스가 존재한다면 암호화 마이그레이션시 인덱스 암호화 컬럼도 생성하였을 것이기에 인덱스 암호화 컬럼을 사용한다. 암호화 적용 시 반드시 IV모드는 Column IV로 설정 인덱스 컬럼절 (A, SOC_NO, B) -> (A, SEC1_SOC_NO, B) SELECT A, SOC_NO, B, C FROM CUST WHERE A = 1 AND SOC_NO = ‘710101-1234567’ AND B = 1000; SELECT A, SUBSTRB(DAMO.DBO.DEC_VARCHAR (‘DEV’, ‘CUST’, ‘SOC_NO’, SEC_SOC_NO),1,14), B FROM CUST_DAMO WHERE A = 1 AND SEC1_SOC_NO = DAMO.DBO.PRED_META_PLAIN_V(‘DEV’,’CUST’,’SOC_NO’, ‘710101-1234567’) AND B = 1000; DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – SELECT문 변경 (3/5) III. VTI 모드 쿼리 최적화 방법 5. SELECT문 변경 VTI모드 쿼리 최적화 방법 – SELECT문 변경 (3/5) 암호화 컬럼 간에 JOIN 검색인 경우 암호화 컬럼간에 Join 검색인 경우 쿼리 수정을 하지 않는다면 Full Table Scan으로 처리되어 성능 저하 크게 발생 Join 테이블의 두 개의 암호화 대상 컬럼(SEC_컬럼)에 일반 인덱스(Normal INDEX)를 설정 암호화 적용 시 두 개의 Join 대상 암호화 컬럼 모두 Column IV와 동일한 Key로 암호화 적용 (필수) SELECT A.A, A.SOC_NO, B.DEPT_NAME FROM CUST A, CUST_DEP B WHERE A.SOC_NO = B.SOC_NO; SELECT A.A, SUBSTRB(DAMO.DEC_VARCHAR (‘DEV’, ‘CUST’, ‘SOC_NO’, A.SEC_SOC_NO),1,14), B.DEPT_NAME FROM CUST_DAMO A, CUST_DEP_DAMO B WHERE A.SEC1_SOC_NO = B.SEC1_SOC_NO; DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – SELECT문 변경 (4/5) III. VTI 모드 쿼리 최적화 방법 5. SELECT문 변경 VTI모드 쿼리 최적화 방법 – SELECT문 변경 (4/5) 암호화 컬럼 간에 JOIN 검색과 값에 의한 일치 검색 함께 공존하는 경우 암호화 컬럼간에 Join 검색이 들어간 쿼리의 경우 최적화를 하지 않는다면 Full Table Scan으로 성능 저하 발생 Join 테이블의 두 개의 암호화 대상 컬럼(SEC1_컬럼)에 일반 인덱스(Normal INDEX)를 설정 암호화 적용 시 두 개의 Join 대상 암호화 컬럼 모두 Fixed IV와 동일한 Key로 암호화 적용 (필수) SELECT A.A, A.SOC_NO, B.DEPT_NAME FROM CUST A, CUST_DEP B WHERE A.SOC_NO = B.SOC_NO AND A.SOC_NO = ‘710101-1234567’; SELECT A.A, SUBSTRB(DAMO.DEC_VARCHAR (‘DEV’, ‘CUST’, ‘SOC_NO’, A.SEC_SOC_NO),1,14), B.DEPT_NAME FROM CUST_DAMO A, CUST_DEP_DAMO B WHERE A.SEC1_SOC_NO = B.SEC1_SOC_NO AND A.SEC1_SOC_NO = DAMO.ENC_VARCHAR (‘DEV’, ‘CUST’, ‘SOC_NO’, ‘710101-1234567’); DP-MSQ 쿼리 최적화 가이드

VTI모드 쿼리 최적화 방법 – SELECT문 변경 (5/5) III. VTI 모드 쿼리 최적화 방법 5. SELECT문 변경 VTI모드 쿼리 최적화 방법 – SELECT문 변경 (5/5) 전체 암호화 컬럼으로 범위 검색 최적화 방안 전체 암호화 컬럼으로 범위 검색인 경우 기본적으로 암호화 인덱스를 사용하여 빠른 결과값을 얻을 수 있지만 옵티마이 져(Optimizer)의 판단에 따라 Full Table Scan으로 처리되면 성능 저하 크게 발생 이 경우는 반드시 쿼리 수정을 해야 하며 Join 테이블의 두 개의 SEC1_컬럼에 일반 인덱스를 설정하여 처리해야 합니다 주민번호 컬럼으로 범위 검색 예시 SELECT A.A, A.SOC_NO, B.DEPT_NAME FROM CUST A, CUST_DEP B WHERE A.SOC_NO = B.SOC_NO AND A.SOC_NO LIKE ’71%’; SELECT A.A, SUBSTRB(DAMO.DBO.DEC_VARCHAR (‘DEV’, ‘CUST’, ‘SOC_NO’, A.SEC_SOC_NO),1,14), B.DEPT_NAME FROM CUST_DAMO A, CUST_DEP_DAMO B WHERE A.SEC1_SOC_NO = B.SEC1_SOC_NO AND A.SEC1_SOC_NO LIKE DAMO.DBO.PRED_META_PLAIN_V(’71’, ‘DEV’, ‘CUST’, ‘SOC_NO’) || ‘%’; DP-MSQ 쿼리 최적화 가이드

API 모드 쿼리 최적화 방법

IV. API 모드 쿼리 최적화 방법 1. 쿼리 최적화 방법 API 모드 쿼리 최적화 방법 쿼리 최적화하는 방법은 매우 다양한 경우가 존재하지만 기본적으로 다음의 방식 중 하나 또는 복수의 방 법들을 사용합니다. 복호화 된 값 대신에 암호화 값을 직접 이용하도록 변경 쿼리, 프로시져, 패키지에서 직접 암복호화 함수를 호출 LIKE, BETWEEN 검색을 위한 암호화 인덱스 생성 및 암호화 인덱스 함수를 호출 비밀번호 암호화를 위한 단방향 암호화 함수를 호출 DP-MSQ 쿼리 최적화 가이드

API 모드 쿼리 최적화 방법 – 암복호화 함수 (1/2) IV. API 모드 쿼리 최적화 방법 2. 암복호화 함수 API 모드 쿼리 최적화 방법 – 암복호화 함수 (1/2) 암호화 함수 암호화 함수명(‘정책명’, ‘암호화 하고자 하는 값’, ‘로그 정보’) – 로그정보는 생략 가능 함. DAMO.DBO.ENCRYPT_VAR(‘AES_128’, ’8104191111111’, ‘’) DAMO.DBO.ENCRYPT_VAR(‘AES_128’, ’8104191111111’, ‘OWNER||TABLE||COLUMN’) NCHAR NVARCHAR CHAR VARCHAR VARBINARY ENCRYPT_NCHR ENCRYPT_NVAR ENCRYPT_CHR ENCRYPT_VAR HEX ENCRYPT_NCHR_HEX ENCRYPT_NVAR_HEX ENCRYPT_CHR_HEX ENCRYPT_VAR_HEX B64 ENCRYPT_NCHR_B64 ENCRYPT_NVAR_B64 ENCRYPT_CHR_B64 ENCRYPT_VAR_B64 부분암호화 ENC_NCHAR_PE ENC_NCHAR_PE_B64 ENC_NVARCHAR_PE ENC_NVARCHAR_PE_B64 ENC_CHAR_PE ENC_CHAR_PE_B64 ENC_VARCHAR_PE ENC_VARCHAR_PE_B64 DP-MSQ 쿼리 최적화 가이드

API 모드 쿼리 최적화 방법 – 암복호화 함수 (2/2) IV. API 모드 쿼리 최적화 방법 2. 암복호화 함수 API 모드 쿼리 최적화 방법 – 암복호화 함수 (2/2) 복호화 함수 복호화 함수명(‘정책명’, ‘암호화 하고자 하는 값’, ‘로그 정보’) - 로그정보는 생략 가능 함. DAMO.DBO.DECRYPT_VAR(‘AES_128’, ’8104191111111’, ‘’) DAMO.DBO.DECRYPT_VAR(‘AES_128’, ’8104191111111’, ‘OWNER||TABLE||COLUMN’) NCHAR NVARCHAR CHAR VARCHAR VARBINARY DECRYPT_NCHR DECRYPT_NVAR DECRYPT_CHR DECRYPT_VAR HEX DECRYPT_NCHR_HEX DECRYPT_NVAR_HEX DECRYPT_CHR_HEX DECRYPT_VAR_HEX B64 DECRYPT_NCHR_B64 DECRYPT_NVAR_B64 DECRYPT_CHR_B64 DECRYPT_VAR_B64 부분암호화 DECRYPT_NCHR_PE DECRYPT_NCHR_PE_B64 DECRYPT_NVAR_PE DECRYPT_NVAR_PE_B64 DECRYPT_CHR_PE DECRYPT_CHR_PE_B64 DECRYPT_VAR_PE DECRYPT_VAR_PE_B64 DP-MSQ 쿼리 최적화 가이드

최적화된 쿼리 검증 방법

최적화된 쿼리 검증 방법 최적화된 쿼리 수행 결과 정합성 최적화된 쿼리 수행 전후 동일한 결과 보장 V. 최적화된 쿼리 검증 방법 최적화된 쿼리 검증 방법 최적화된 쿼리 수행 결과 정합성 최적화된 쿼리 수행 전후 동일한 결과 보장 쿼리를 최적화하기 이전의 쿼리 수행 결과와 쿼리를 최적화한 후의 쿼리 수행 결과는 동일한지 확인해야 합니다. 수행 결과 Rows 수행 결과 List 최적화된 쿼리에 대한 실행 계획 (Execution Plan) 점검 최적화된 쿼리의 실행 계획을 점검하여 의도한 바와 같이 실행 계획이 수립되었는지 확인해야 합니다. 암호화 작업을 반영한 실행 계획의 COST 가 절절한 수준인지 점검하는 것이 바람직합니다. DP-MSQ 쿼리 최적화 가이드

최적화된 쿼리 검증 방법 실행 계획 COST 확인 V. 최적화된 쿼리 검증 방법 최적화된 쿼리 검증 방법 실행 계획 COST 확인 SQL Server Management Studio에서 실행 계획 확인하기 실행계획 보여주기 버튼을 클릭 후 수행하고자 하는 SQL을 실행한 후 COST 확인 DP-MSQ 쿼리 최적화 가이드

주의사항

주의사항 최적화의 한계 최적화가 적합하지 않은 쿼리 유형 암호화 이전에 Tuning 된 쿼리의 최적화 기존 쿼리 로직 변경 VI. 주의사항 주의사항 최적화의 한계 최적화가 적합하지 않은 쿼리 유형 Sum, Avg 등과 같은 집합 함수는 쿼리를 수정해도 최적화 되지 않는 경우가 있습니다. 암호화 이전에 Tuning 된 쿼리의 최적화 많은 조합의 Hint로 이미 Tuning이 된 쿼리는 암호화 이후 최적화 과정에서 Tuning 효과를 상쇄시키는 경우가 발생할 수 있습 니다. 기존 쿼리 로직 변경 기존 쿼리의 로직 Format을 유지한 체, 쿼리를 최적화하는 경우 성능이 보장 되지 않는 경우가 있다. 이런 경우는 쿼리 수행 로 직 변경을 시도해 볼 수 있습니다. 인덱스의 변경 요구 결합 인덱스 구성 컬럼 중 일부만이 암호화 되어, 인덱스 효율 자체가 변경됨으로써 수행 속도 저하가 발생될 수 있다. 이런 경 우 암호화에 맞는 인덱스 생성 전략을 구사해 볼 수 있습니다. 추가 암호화 요구 복수개 테이블 컬럼의 JOIN 시 한쪽만 암호화되어 있고 다른 쪽이 안되어 있는 경우 최적화를 해도 성능 저하를 피할 수 없는 경우가 발생될 수 있습니다. 이런 경우 JOIN 되는 컬럼을 동일 키로 암호화 한 후 인덱스 전략과 병행하여 성능 향상을 시도해 볼 수 있습니다. DP-MSQ 쿼리 최적화 가이드