h3 2011 대형사이트 구축을 위한 mysql 튜닝전략_데이터지능팀_성동찬

52

Click here to load reader

Upload: kth-

Post on 24-May-2015

1.220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

플랫폼 개발팀 I DBA 성동찬

대형 사이트 구축을 위한 MySQL 튜닝 전략

Page 2: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

대형 사이트 구축을 위한 MySQL 튜닝 전략

MySQL DBMS 특성 Nested Loop Join Multiple Storage Engine Data Replication

01

대형 사이트 구축 전략 서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

02

사례 03

Page 3: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

MySQL DBMS 특성 01 Nested Loop Join Multiple Storage Engine Data Replication

Page 4: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

단일 코어, SQL처리

Core 1 Core 3

Core 2 Core 4

단순 SQL

Outer Join (1분)

무거운 SQL

(3시간)

Core 1

Core 2

Core 3

단일 코어, SQL처리

Page 5: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Nested Loop Join

Nested Loop Join

Sort Merge Join

Hash Join

Inner Join? Outer Join?

Sub-Query?

Nested Loop Join

Only Nested Loop Join!

Page 6: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Nested Loop Join & 단일 코어, SQL처리

DataWarehouse?

OnLine Transaction Processing!

Page 7: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

MySQL DBMS 특성 01 Nested Loop Join Multiple Storage Engine Data Replication

Page 8: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Multiple Storage Engine

MyISAM Federated

InnoDB Memory

Archive NDB

3rd Engine

MyISAM

InnoDB

Archive

다양한 스토리지 엔진

Page 9: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

스토리지 제한

트랜잭션

Locking 레벨

인덱스

Cache

파티셔닝

Cluster Index

Foreign Key

비고

Multiple Storage Engine

MyISAM

256TB

No

Table

B-Tree

Index

YES

No

No

백그라운드

로그 수집

InnoDB

64TB

Yes

Row

B-Tree

Data/Index

YES

YES

Yes

OLTP

Archive

None

No

Row

NO

NO

YES

No

No

원시 로그 수집

64TB

Yes

Row

B-Tree

Data/Index

YES

YES

Yes

None

No

Row

NO

NO

YES

No

No

256TB

No

Table

B-Tree

Index

YES

No

No

대용량 처리

Page 10: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Multiple Storage Engine - InnoDB

JOB4

ROW01 ROW02 ROW03

ROW04 ROW05 ROW06

ROW07 ROW08 ROW09

TABLE

트랜잭션 + 행 단위 잠금

JOB1

JOB2

JOB3

Page 11: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Multiple Storage Engine - InnoDB

10

1

data1

data2

data3

data4

20

9

data1

data2

data3

data4

30

2

data1

data2

data3

data4

30

3

data1

data2

data3

data4

30

4

data1

data2

data3

data4

B+ Tree

PK

Data

21

30

data1

data2

data3

data4

데이터는 Primary Key 순!!

이동

Page 12: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

30

2

data1

data2

30

3

data1

data2

30

4

data1

data2

20

9

data1

data2

10

1

data1

data2

PK

Multiple Storage Engine - InnoDB

100 7 23 3 22 INDEX

22

10

1

23

30

4

100

30

2

7

30

3

3

20

9

KEY

VALUE

B+ Tree

인덱스는 PK를 Value로..

Page 13: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

MySQL DBMS 특성 01 Nested Loop Join Multiple Storage Engine Data Replication

Page 14: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Data Replication

데이터 변경

Active!!

Passive!!

“1” 마스터, “다중” 슬레이브

Page 15: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Data Replication

MySQL Replication Oracle RAC

공유 스토리지

VS

디스크는 물리적으로 독립

Page 16: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Data Replication

Asynchronous

Replication

Statement Row Statement Row

Mixed

로그 기반 데이터 동기화

Page 17: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

Master Slave

Data Replication

Session01

Session02

Session03

Database

Dump

Relay Log Binary Log

IO Thread SQL Thread

Database

슬레이브는 단일 Thread 처리

Page 18: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

대형 사이트 구축 전략 02

Page 19: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 - 프로세서

Scale Up? Scale Out? VS

프로세서는 빠르게!!

Page 20: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 - 메모리

메모리는 최대한 크게!!

Page 21: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

RAID0

서버 구성 전략 - 디스크

RAID1 RAID1

“RAID1+0”, RAID5, RAID1

Striping

Mirroring

Page 22: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 - 네트워크

NIC1

NIC2

기가 비트 NIC로 이중화

Insert

Delete

Update

Select

Page 23: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 - 네트워크

서비스용, 내부 통신용 분리

NIC1

NIC2

NIC7

NIC8

NIC5

NIC6

NIC3

NIC4

Master Slave

Select

Insert

Delete

Update

Select

Page 24: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

대형 사이트 구축 전략 02

Page 25: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

스토리지 엔진 선정 전략

스토리지 엔진 선정

동시처리?

트랜잭션? 로그전용?

서비스 특성을 고려!!

Page 26: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

DISK

스토리지 엔진 선정 전략

서비스 데이터

InnoDB Buffer Pool (Memory)

I/O

단순 LOG 데이터

Flush

엔진을 잘못 선정하면?

Page 27: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

스토리지 엔진 선정 전략

INNODB MyISAM Archive

업데이트?

로그전용?

읽기전용?

동시처리?

트랜잭션?

Page 28: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

대형 사이트 구축 전략 02

Page 29: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

인덱싱 전략

인덱스는 많을 수록

무조건 좋다??

Page 30: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

인덱싱 전략

분포도 고려하여 “가장 적게”

중복된 데이터 많으면 대상 제외! 1

2

3

인덱스 많을 수록 효율은 떨어짐!!

인덱스도 데이터!

Page 31: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

인덱싱 전략

작은 데이터 타입으로..

문자열 인덱스는 최대한 회피 1

2

3

CRC32+Trigger로 대체 인덱스 구성

인덱스도 데이터! × 𝟐

Page 32: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

인덱싱 전략

NULL 허용 금지!!

NULL 허용 시 추가 1 Byte 소요 1

2 인덱스도 데이터!!!

Page 33: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

대형 사이트 구축 전략 02

Page 34: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

파티셔닝 전략

Data File

File01

File01

파티셔닝?

Page 35: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

파티셔닝 전략

파티셔닝 적용?

랜덤 PK시 Clustering 비효율 개선 1

2 대용량 데이터 날짜 별 관리

Page 36: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

파티셔닝 전략

주의 사항

Foreign key 사용 불가 1

2 Full-text 및 Spatial 인덱싱 사용 불가

3 파티셔닝 키는 PK안에 존재해야 함

4 조회 조건에 파티셔닝 키 포함

Page 37: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

대형 사이트 구축 전략 02

Page 38: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

리플리케이션 전략

“Async”hronous!!

슬레이브는 1 Thread에서만 반영 1

2 Master-Slave 동기화 지연 발생 가능

Page 39: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

리플리케이션 전략

DB

버그

무거운

SQL

과도한

트래픽 에러

무거운

SQL

동기화 지연 발생 원인

Page 40: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

리플리케이션 전략

MIXED? ROW!

Create

Table

As

Select

Insert

into

Select

세션 별 Binary Log 포멧 변경

Page 41: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

리플리케이션 전략

DB

버그

무거운

SQL

과도한

트래픽 에러

과도한

트래픽

동기화 지연 발생 원인

Page 42: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

파티셔닝 전략

Must Primary Key!!

5.1.57 이전 버전 버그 존재!! 1

2 Binary Log가 “ROW” 시 비효율 발생!!

Page 43: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

리플리케이션 전략

user

log

service A

S1

S2

S3

M

user

log

service A

특정 DB만 동기화 전략!

Page 44: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

리플리케이션 전략

슬레이브를 고 스펙으로!!

Page 45: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

서버 구성 전략 스토리지 엔진 선정 전략 인덱싱 전략 파티셔닝 전략 리플리케이션 전략 캐시 전략

대형 사이트 구축 전략 02

Page 46: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

캐시 전략

Query Cache Type

ON

OFF

DEMAND

서비스 특성을 고려!!

Page 47: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

캐시 전략

제약 조건

SQL의 Hash 값을 키로 사용 1

2 테이블 변경 시 연관된 캐시 전체 소멸

3 쿼리 가지 수가 많으면 비효율 발생

Page 48: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

캐시 전략

Page 49: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

MySQL은 단순 데이터 처리에 강한 관계형 DBMS이다!! 단일 코어에서 Nested Loop으로 SQL처리

1

맺음말

Page 50: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

MySQL에서 대용량 처리는 InnoDB가 적합하다. 트랜잭션과 행 단위 잠금으로 데이터 처리!!

2

맺음말

InnoDB에서 Primary Key는 Cluster Index로 구성!!

추가 인덱스는 Primary Key를 Value로..

Page 51: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

MySQL에서 Replication 으로 데이터를 분산 가능하다. 단일 마스터, 다중 슬레이브 구조로 디스크는 독립적

3

맺음말

로그 기반으로 비동기적으로 데이터를 복제

슬레이브는 단일 Thread로 데이터를 반영

Page 52: H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬

감사합니다. 플랫폼개발실 / 공통플랫폼팀 대리 / DBA 성동찬

[email protected]

@gywndi