개발자도 알아야 하는 dbms튜닝

78
Keynote DBMS 성성 성성성 성성성성 성성성 성성 Keynote

Upload: -

Post on 15-Apr-2017

2.245 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: 개발자도 알아야 하는 DBMS튜닝

Keynote

DBMS 성능 높이기개발자도 알아야 하는

Keynote

Page 2: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

강사소개

Page 3: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ 강사 프로필 이 름 : 이 정 해 주 사용 DB : DB2, MS-SQL, MySQL,Oracle

■ 수행 프로젝트 삼성화재 상품 , 배치 DB2 Database Server Migration 및 Version Upgrade 국민카드 보험통판 Database 신규 구축 현대중공업 PLM Database 구축 SK Telecom 시스템 고도화 프로젝트 아주캐피탈 차세대 시스템 구축 다크에덴 DB Upgrade 및 모니터링 시스템 구축 - 수행중

■ 주 관심사 인프라 기술 Cloud - Open Stack SWIFT

Page 4: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

차 례

Page 5: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

1. DBMS 의 Brain : Optimizer

2. 나의 데이터 저장소 : Tablespace, Table

3. 조리있게 명령을 내리자 : SQL

3. 지름길 안내 : Index

4. LOB 의 성능을 높이자 - Inline Lob

Page 6: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

INTRO

Page 7: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ 즐거운 여행• 서울에서 부산을 가자 !

1. 목표를 설정했습니다 .2. 네비게이션에 목표를 입력합니다 .3. 네비게이션이 목표를 찾습니다 .4. 이제 즐겁게 여행을 떠납시다 . 고고고 ~!5. 네비게이션은 실시간 정보를 받아 어디가 빠를지 계속 안내합니다 .6. 목적지에 도착 후 즐겁게 여행을 즐깁니다 .

7

Page 8: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

select /*+ INDEX_DESC (tab1 idx01) */ A.Col1, B.Col2 from Table1 as tab1 Left Outer Join Table2 as tab2 on tab1.col1 = tab2.col1 and tab1.col2 = tab1.col2 where 1=1 and tab1.col3 = 1 and tab2.col4 = ‘A’ order by col1 desc, col2 asc

Page 9: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ 즐거운 여행• 서울에서 부산을 가자 !

1. 목표를 설정했습니다 . - 사용자 SQL 입력2. 네비게이션에 목표를 입력 하고 추천 목표지를 받습니다 . -Optimizer 의 실행계획3. 이제 즐겁게 여행을 떠납시다 . - 테이블 데이터 ( 여행정보 )4. 네비게이션은 실시간 정보를 받아 어디가 빠를지 계속 안내합니다 .- Index5. 목적지에 도착 후 즐겁게 여행을 즐깁니다 . - Table Data, LOB Data[ 추억쌓기 , 사진 , 음악등 .]

9

Page 10: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

DBMS 의 핵심이자 두뇌 !

Optimizer

Page 11: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer 란 ?

11

옵티마이저 (Optimizer) 는 SQL을 가장 빠르고 효율적으로 수행할 최적 ( 최저비용 ) 의 처리경로를 생성해 주는 DBMS 내부의 핵심엔진

Page 12: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• 방식의 정의 - CBO – Cost Based Optimizer

12

Page 13: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer - 통계정보 및 실행계획

1. 인덱스 상태 . 2. 데이터 분포 .3. Key 종류 .4. 테이블 참조제약 .5. 기타 .

13

Page 14: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer - 통계정보 및 실행계획

1. 사용자가 질의한 SQL 문에 대해 최적의 실행 방법을 결정하는 역할을 수행

14

Page 15: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer - 통계정보 및 실행계획

Page 16: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer - 통계정보 및 실행계획

Page 17: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer - 통계정보 및 실행계획

Page 18: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer - 통계정보 및 실행계획

Page 19: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• 쿼리 리라이트 – 최적의 여행코스를 짜보자 .

19

서울 휴게소우동 , 짜장면등중간 경유지명소 , ETC

고속도로 공사중우회길 탐색

다른 고속도로

국도부산 도착

Page 20: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• 쿼리 리라이트 – 쿼리 재작성 및 재조합 .

1. 사용자 조인을 조정 .2. 사용자 컬럼 캐스팅 조정 .3. 조인 순서 변경4. 조인 값 추가5. 기타 여러가지 재조정 .

20

Page 21: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• 쿼리 리라이트 – 중요한 힌트 !

1. 나의 SQL 이 어떻게 바뀌었는지 알 수 있다 .2. 흐름 과정을 이해할 수 있다 .3. SQL 을 어떻게 작성할 것인지에 대한 힌트를 얻을 수 있다 .4. 구간구간 병목 구간을 유추해볼 수 있다 .5. 버그 유무를 알 수 있다 .

21

Page 22: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• 쿼리 리라이트 - 쿼리 재작성 및 재조합 .

Page 23: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer Level - Optimizer Mode

1. 서울에서 부산으로 가는 방법

23

교통 수단에 따른 방법KTX, 고속버스 , 자가용자가용을 사용시 경로에 따른 방법서울 오른쪽 부산서울 가운데 부산서울 왼쪽 부산

Page 24: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer Level – Optimizer Mode

1. 쿼리 복잡시 DBMS 기본 Optimizer 순위 혹은 상위 설정 .- RDBMS 에 Optimizer 연산을 맡겨 빠른 경로를 찾게 함 .- SQL 쿼리 복잡도가 높다면 사람이 계산할 수 있는 한계가 있기 때문에 옵티마이저가 최대의 연산을 할 수 있도록 도움 . DBMS 자원의 상태를 보고 어떤 실행계획이 빠른지 모든 연산을 동원함 .

24

Page 25: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer Level – Optimizer Mode

2. 쿼리 단순시 옵티마이저 레발 혹은 모드를 낮춤 .- 단순 DML Query 라면 옵티마이저 레벨을 낮추는게 유리 .- 누가봐도 이게 정답인 거라면 낮추는게 유리 . 필요이상의 연산 방지 .

25

Page 26: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Optimizer Level – Optimizer Mode

3. 시스템 세션에서 바로 변경이 가능 .- 프로그램 개발시 단순 쿼리라면 현 세션 변수를 통해 Optimizer Level을 낮추는게 가능 .- 레벨을 낮추어 쓸데없는 연산을 늘리지 말고 바로 수행할 수 있도록 컨트롤 .

26

Page 27: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Driving Table

27

- TABLE 에 대한 JOIN 시 먼저 ACCESS 되서 ACCESS PATH 를 주도하는 TABLE

- 어느 TABLE 이 먼저 ACCESS 되느냐에 따라 속도의 차이가 크게 날 수 있으므로 매우중요

27

Page 28: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Driving Table

28

where 1=1 and 주민번호 = ‘998745-1265998’ and 휴대폰번호=‘010-1010-1010’ and 이메일주소 =‘[email protected]

where 1=1 and 성별 = ‘남’ and 병역필 = ‘ 필’ and 시군구 = ‘ 서울시’

Page 29: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Optimizer• Cardinality - 유일성

1. 유일성- 컬럼데이터 중 중복 값을 제거한 유일한 데이터 갯수

29

11223344

남남남남남남남

ABOAABOA

Cardinality : 4 Cardinality : 2 Cardinality : 3

Page 30: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

나의 데이터 저장소TableSpace, Table

Page 31: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table Space• Table Row 의 크기 - Page Size Or Block Size

31

4K Row

Page size : 한 Row 가 가질 수 있는 Row 의 길이

8K Row8K Row

16K Row16K Row

32K Row32K Row

Page 32: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table Space• Table Row 의 크기 - Page Size Or Block Size

1. Oracle 에는 Block Size 라 표기하고 DB2와 기타 다른 RDBMS 는 Page size 라고 부름

2. OLTP : Online Transaction Processing Oracle, MS-SQL, MySQL 등3. OLAP : Online Analytical Processing DB2. Sybase 등

32

Page 33: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table Space• Table Row 의 크기 - Page Size Or Block Size

1. Page 크기에 따른 DB 용도

33

OLTP OLAP

Page 34: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table• 데이터 입력 성능을 높이기 위한 팁

1. 데이터 입력속도 높이기- DBMS 마다 데이터를 입력하는 명령어가 2 가지 이상 방법 존재 .- 하나는 Import, 하나는 LOAD.- 이 두가지 방법은 DBMS메카니즘으로 차이가 있음 .

34

Page 35: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table• 데이터 입력 성능을 높이기 위한 팁

2. IMPORT- 테이블의 모든 제약을 점검하면서 데이터를 입력 .- 테이블의 인덱스를 모두 체크하고 입력 . - Primary, Unique Key 등등 .- ROW By ROW 로 입력하기 때문에 DBMS 입장에서는 안전한 입력방법 .- Table 이 깨질시에도 복구가 쉬움 .- 주로 몇십MB 의 데이터 입력시 사용 .

35

Page 36: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table• 데이터 입력 성능을 높이기 위한 팁

3. LOAD- 일단 데이터의 입력 공간을 만들어 놓고 데이터를 밀어넣음 .- 후에 테이블의 인덱스를 체크 . - Primary, Unique Key 등등 .- 대량의 큰 데이터를 한번에 입력할때 사용 . 혹은 데이터 초기 적재때 사용 .- Table 이 깨질 위험이 있으며 DBMS 부하도 높음 .- 주로 몇 GB 이상 데이터 입력시 사용 .

36

Page 37: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Table• 데이터 입력 성능을 높이기 위한 팁

4. 데이터 입력 성능을 높이기 위한 방법- 정렬 (SORT) 메모리 크기를 늘림 .- Bulk Load 를 위한 메모리 크기를 늘림 .- TEMP Space 사이즈를 크게 늘려줌 .- 참조제약을 제거하고 입력 . 입력 완료 후 다시 제약조건 설정- 인덱스 DROP(삭제 ) 후 재생성 .- 아카이브 로그 작성 일시 OFF- 빠른 속도를 가지고 있는 디스크로 교체

37

Page 38: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

RDBMS 를 컨트롤하는단 하나의 언어SQL

Page 39: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Structured Query Language

1.데이터베이스에 접근할 수 있는 데이터베이스 하부 언어 . 구조화 질의어 .2.간단히 데이터 베이스에서 데이터를 읽어올때 DBMS 에 명령을 내릴 수 있는 언어 .

39

Page 40: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Database 를 제어하는 언어

40

DDL

Create

Drop

Alter

DML

Insert

Update

Delete

DCL

Commit

Rollback

Transaction

Page 41: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• 성격 맞추기

41

C1 C2 C3 C4Int Char Varchar Date

WEHRE C1=‘1234’AND C2 = 1AND C3 = ‘C’AND C4 = ‘2015-05-06’

Page 42: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Char vs Varchar

1. Char - size 4byte

42

필 립 스 ’’

삼 성 ’’ ‘'

파 나 소 닉

아 이 와 ’’

Page 43: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Char vs Varchar

1. Varchar(10)

43

아 메 리 카 노

카 라 멜 마 키 아 토

프 라 푸 치 노

밀 크 쉐 이 크

Page 44: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Date VS Varchar

44

Date Column

Varchar Column

Page 45: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Date VS Varchar

45

DATE 컬럼을 쓴 데이터 조회 : 속도 빠름SELECT ... FROM ... WHERE 기준일자 BETWEEN to_date('20091020', 'yyyymmdd') and to_date('20091021', ‘yyyymmdd)

Varchar 컬럼을 쓴 데이터 조회 : 데이터 품질 저하SELECT ... FROM ... WHERE 기준일자 BETWEEN '20091020' and '20091021'

Page 46: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• 정수형 - Integer

46

INT BIGINT

4 Byte 8 Byte

- 일반적으로 Integer뒤에 나오는 숫자는 표현 자리수를 의미- 화면상에 나타날 소숫점 자리 혹은 정수자리의 자릴수를 표시- NUM INT(10) - 10 자리 미만은 0 으로 채우겠다는 의미 .Insert Into T1 values(12345) = 0000012345- 벤더사마다 의미가 틀릴 수 있음 .

Page 47: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Group by vs Distinct

47

Page 48: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• Group by vs Distinct

48

공통의 목적 : 중복 제거정렬의 목적 : Distinct -> 중복만 제거 정렬안됨 . Group by -> 중복제거 후 정렬된 값 도출 .

속도비교 : Group by 가 오라클에서는 더 빠르다고 함 . 타벤더는 데이터 구성이나 방식에 따라 차이가 좀 있을 수도 있음 .

결과의 목적 : Group by 는 Having Count 를 쓸 수 있음 .

Page 49: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• 성능을 높이기 위한 팁

1. 사용자제할 Function.- DECODE - CPU Overhead 발생 . 최대한 Case 문으로 변경할것 .- Or 문 : Full Table Scan 가능성 높아짐 . Union All 혹은 In, Exist를 사용해서 OR 문 제거할것 .- Distinct : 정렬작업을 수반함 . 불필요한 Distinct 사용남발 자제

49

Page 50: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• 성능을 높이기 위한 팁

2. 인덱스 사용 .- 부정형보다 긍정형 조건을 사용 . [예 ) <> 대신에 AND ]- 가능한 PK Index 사용할것 .- 명확환 Where 조건 사용 . 인위적 변경은 인덱스를 타지 못하게 한다 .

50

Page 51: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• 성능을 높이기 위한 팁

2. 인덱스 사용 .

51

CREATE TABLE T1 (RDATE DATETIME);CREATE INDEX IDX_RDATE ON T1(RDATE);INSERT INTO T1 VALUES NOW();

SELECT * FROM T1 WHERE RDATE = SUBSTR(RDATE,1,8)

위의 SQL 은 인덱스를 탈까요 안탈까요 ?만약에 인덱스를 탄다면 정상일까요 ? 비정상일까요 ?

Page 52: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• 성능을 높이기 위한 팁

3. Data Type 일치- Data Type 이 일치하도록 한다 .- Data Type 이 일치하지 않으면 Casting 연산이 추가로 들어가게 된다 . 추가 연산이 들어간다는 것은 추가적인 부하 (OverHead) 가 들어간다는 얘기가 된다 .

52

Page 53: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• ANSI SQL

1. ANSI SQL 의 정의- 최초의 SQL-86 표준과 관계형 DBMS 의 폭발적인 정성기를 주도했던

ANSI/ISO SQL2( 이하 SQL2) 세대를 지나면서 많은 기술적인 발전- SQL2 의 경우 표준 SQL 에 대한 명세가 부족한 부분이 있었고 , DBMS벤더 별로 문법이나 사용되는 용어의 차이가 너무 커져서 상호 호환성이나

SQL학습 효율이 많이 부족한 문제가 발생- 이에 향후 SQL 에서 필요한 기능을 정리하고 호환 가능한 여러 기준을 제정한 것이 1999년에 정해진 ANSI/SQL3( 이하 SQL3) 이다 . 이후 가장 먼저 SQL3 의 기능을 시현한 것이 Oracle 8i/9i 버전이라 할 수 있다 . ( 현재 오라클 사의 공인 SQL 교육은 ANSI 표준 SQL 로 실시 )- 이 후 2003년 ANSI/ISO SQL 기준이 소폭 추가 개정되었고 , 현재 사용되는 데이터베이스는 대부분 SQL-2003 표준을 기준으로 하고 있다 .

53

Page 54: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• ANSI SQL

54

SELECT t1.c1, t2.c1 FROM table t1, table t2 WHERE t1.c1 = t2.c1(+) AND t1.c2 = ‘ResNo’ AND t2.c2 = ‘TelNo’

어떤것이 Left Outer Join일까요 ???그리고 어떤것이 Right Outer Join일까요 ??

SELECT t1.c1, t2.c1 FROM table t1, table t2 WHERE t1.c1(+) = t2.c1 AND t1.c2 = ‘ResNo’ AND t2.c2 = ‘TelNo’

Page 55: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ SQL• ANSI SQL

55

SELECT t1.c1, t2.c1 FROM table t1 LEFT OUTER JOIN table t2 ON t1.c1 = t2.c1 WHERE t1.c2 = ‘ResNo’ AND t2.c2 = ‘TelNo’

왼쪽이 Left Outer Join오른쪽이 Right Outer Join 입니다 .

SELECT t1.c1, t2.c1 FROM table t1 RIGHT OUTER JOIN table t2 ON t1.c1 = t2.c1 WHERE t1.c2 = ‘ResNo’ AND t2.c2 = ‘TelNo’

Page 56: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

DBMS 의 고속도로Index

Page 57: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 란

1. 간단히 정의- 각 테이블들의 Row 에 색인 달기

2. 고급지게 정의 .- 테이블에 저장된 데이터를 빠르게 조회하기 위한 데이터베이스 객체- B-Tree 구조를 가짐 (B-Tree Index 의 경우 )- Index 는 논리적 /물리적으로 테이블과 독립적임

57

Page 58: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 의 구조 – 이론 .

58

Page 59: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index와 Data 의 분리

1. Data Table Space와 Index Table Space 를 분리 .- 대부분의 RDBMS 는 테이블을 정의할때 Data 저장장소와 Index저장장소를 명시해서 만든다 .- Index 의 저장장소를 명시하지 않으면 Data 저장 장소를 Index 의 저장 장소로 같이 쓰인다 .

59

Page 60: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Primary Index

1. 프리머리 인덱스란 ?- 테이블 내의 복수개의 tuple들 중 해당 키 값을 가지고 있는 tuple 은 오직 하나임을 나타내준다 .

2. 간단히 테이블안의 특정 컬럼에는 어떤한 값도 중복되지 않고 존재한다 . 즉 유일하다 .

60

Page 61: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Primary Index

1. Primary Key 생성법

61

CREATE TABLE Person(SEQ INT AUTO_INCREMENT,주민번호 CHAR(14),이름 VARCHAR(15),이메일 VARCHAR(40),전화번호 CHAR(13)CONSTRAINT pk_key PRIMARY KEY (SEQ))

ALTER TABLE PersonsADD CONSTRAINT pk_seq PRIMARY KEY (SEQ)

Page 62: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Primary Index

2. Primary Key 사용 이유- 데이터의 중복값을 허용하지 않음 . - 제일 빠른 검색의 조건- Primary Key 생성시 Primary Index 자동생성 .이로 인해 데이터 검색 속도 향상- 테이블 관계조건을 맺는 용도로 사용 .- 데이터 통합 및 역공학시 기준점으로 사용되어 작업이 편리해짐 .

62

Page 63: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Clustering Index - 정의

1. 테이블에 데이터가 Key 배열에 순서적으로 입력되어 있음 .2. SQL 에서 WHERE 조건을 검색할 때 클러스터링 인덱스를 최우선으로 두고 검색을 시작함 . 즉 우선순위가 높음 .3. 대용량 처리시 일반 인덱스보다 2 배정도 처리 성능이 우월함 .

63

Page 64: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Clustering Index - 모습

64

Page 65: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Clustering Index

1. 생성방법

65

CREATE INDEX idx_seq_cluster ON Person(SEQ) CLUSTER;

Page 66: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• UNIQUE Index

1. Unique Index 의 특징 .- Primary Key와 마찬가지로 데이터 중복을 허용하지 않는 인덱스 .- Primary Key와의 차이는 Null 값도 데이터로 보기 때문에 허용하는것의 차이 .- 여러개 생성이 가능함 .- 그러나 분명한 차이가 있기 때문에 따로 만들어 둔것 .- Primary Key와 Unique Index 의 차이를 반드시 이해할 것 .

66

Page 67: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Unique Key

1. 생성방법

67

CREATE UNIQUE INDEX idx_seq ON Person (SEQ)CREATE UNIQUE INDEX idx_ 주민번호 ON Person ( 주민번호 )

Page 68: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 의 Include 옵션

1. Create index 의 Include 용도- Covering index 로 사용 .- SQL 의 WHERE 조건에서 평소에는 잘 사용하지 않으나 어쩌다 필요에 의해서 사용되는 컬럼에 사용 .

68

Page 69: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 의 Include 옵션

1. 이론- 일반적으로 복합인덱스 생성시 평소 잘 사용하지 않는 컬럼까지 복합 인덱스로 생성시 필요이상의 인덱스 깊이가 생기게 됨 .- 이로 인해 인덱스의 깊이가 깊어지게 되고 그에 따른 추가적인 디스크 용량이 더 필요하게 됨 .

69

Page 70: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 의 Include 옵션

1. 이론- 평소 잘 사용되지 않는 컬럼을 Include 옵션으로 빼두고 만약 필요할시 이용함 .- 이렇게 해두면 인덱스 깊이는 크게 늘어나지 않고 인덱스 크기도 크게 되지 않게 되어 디스크 용량도 줄어들게 됨 .

70

Page 71: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 유지보수

1. 한테이블당 인덱스 갯수- 가능하면 5 개 미만으로 유지 .

2. 중복되는 인덱스를 여러개 만들지 말것 .- SEQ, 주민번호 - 인덱스 1번- SEQ, 주민번호 , 이메일 - 인덱스 2번

71

Page 72: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ Index• Index 유지보수

3. 마스터 테이블은 Clustering Index 로 만들것 .- 클러스터링 비율이 1 이하이면 다시 생성 .

4. 정기적으로 Table index 재생성 .- 테이블에 DML 이 많이 일어나면 테이블 인덱스 효율이 떨어짐 .- 인덱스 재생성 만으로 2-10% 사이의 성능 향상을 기대해볼 수 있음 .

72

Page 73: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

나의 전용 방LOB

Page 74: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ LOB• LOB 컬럼의 정의 .

1. 일반적으로 테이블 생성시 큰 사이즈의 컬럼 저장장소를 따로 생성 .2. CHAR, VARCHAR, BIGINT 에서 만들 수 있는 허용범위를 벗어난 경우 이곳에 저장 .

74

Page 75: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ LOB• LOB 컬럼의 운용 - 일반적인 LOB 방식

75

Bufferpool

NormalTablespace

LOBTablespace

Database

Page 76: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ LOB• LOB 컬럼의 운용 - 일반적인 LOB 방식

76

NormalTablespace

LOBTablespace

Database

Bufferpool

Page 77: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

■ LOB• Inline LOB 컬럼의 문제점 .

1. 메모리 낭비가 심할 수 있음 .2. Prefetcher와 IO CLEAN 이 자주 일어날 수 있음 .3. 자주 사용되는 ROW 가 우선순위에서 밀려날 수 있음 .4. 보통 4000Byte 정도에서 사용할것을 권고합니다 .

77

Page 78: 개발자도 알아야 하는 DBMS튜닝

MariaDB 서버 구축하기

강의가 끝났습니다Keynote