ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

70
성성 성성성 성성 성성성성성성 성성성성 성성 성 성성 성성성 성성성 DB 성 성성성 , 성성성

Upload: cranbe95

Post on 18-Jun-2015

3.096 views

Category:

Technology


0 download

DESCRIPTION

sql server

TRANSCRIPT

Page 1: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

성능 향상을 위한 데이터베이스 아키텍쳐 구축

및 개발 가이드㈜넥슨DB 팀

임현수 , 박숙봉

Page 2: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

목차1. Intro

DB 성능에 관심을 가져야 하는 이유DB 성능에 영향을 주는 요소

2. 데이터베이스 아키텍쳐 구축I/O 성능 이슈 사례이슈 해결 방안

3. T-SQL 개발 가이드이슈 해결 사례

4. Q&A

Page 3: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

01. Intro

Page 4: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

DB 성능에 관심을 가져야 하는 이유

언제 많이 발생하나 ?서비스 오픈주요 기능 추가동시접속자 증가

Page 5: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

DB 성능에 관심을 가져야 하는 이유

문제 해결은 바로 가능할까 ?SQL 개발 이슈인 경우 바로 처리 가능 ,

하드웨어 성능 또는 시스템 구성 변경의 경우 일정 기간 필요

사전에 예방하는 것이 중요

Page 6: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

DB 성능에 영향을 주는 요소

하드웨어 구성CPUMemoryDisk (I/O)

DB 시스템 구성DB 설계 ( 모델링 )SQL 개발

Page 7: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

DB 성능에 영향을 주는 요소

하드웨어 구성CPUMemoryDisk (I/O)

DB 시스템 구성DB 설계 ( 모델링 )SQL 개발

Page 8: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

02. 데이터베이스 아키텍쳐 구축

(I/O 성능 이슈 / 해결 방안 )

Page 9: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

I/O 성능 이슈 사례1. 스토리지 성능 이슈

2. Checkpoint 시점의 I/O 병목3. MMORPG 게임에서 Cache 서버 미사용

Page 10: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

스토리지 성능 이슈현상매일 동일한 시간대에 게임서버와 DB 간 연결이 끊기는 현상

Page 11: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

스토리지 성능 이슈원인 분석새벽에 랭킹 배치작업 수행 시 I/O 지연 발생

클러스터링 구성이 되어 있어 대기 서버로 전환해당 시점에 게임서버와 연결이 끊김

2008-11-05 02:22:31.340 spid2s       SQL Server has encountered 1

occurrence(s) of I/O requests taking longer than 15 seconds to

complete on file [U:\#####.ndf] in database [#####] (6).  The OS file

handle is 0x00000B34.  The offset of th….

Page 12: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

스토리지 성능 이슈디스크 구성디스크 4 장을 Raid 5 로 구성

일반적으로는DB 서버의 경우 성능을 고려하여 Raid 10 구성

Raid 5 로 구성할 경우 쓰기 성능이 느려서 대량 처리시 지연이 발생

Page 13: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

스토리지 성능 이슈해결디스크 증설 요청DB 서버 이중화 구성 제거

소요시간약 20 일

Page 14: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

I/O 성능 이슈 사례1. 스토리지 성능 이슈

2. Checkpoint 시점의 I/O 병목3. MORPG 게임에서 Cache 서버 미사용

Page 15: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Checkpoint 와 I/O 병목현상피크타임에 간헐적으로 로그인 지연 / 실패

Page 16: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Checkpoint 와 I/O 병목원인 분석쿼리가 지연될 때 어디서 병목이 발생하는지 확인 필요Perfmon/Profiler 데이터 수집 & 분석

Page 17: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Checkpoint 와 I/O 병목

Page 18: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Checkpoint 와 I/O 병목해결디스크 장비 성능 개선 (write cache)

SQL Server 버전 업그레이드Recovery Interval 변경

소요 기간약 30 일

Page 19: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

I/O 성능 이슈 사례1. 스토리지 성능 이슈

2. Checkpoint 시점의 I/O 병목3. MORPG 게임에서 Cache 서버 미사용

Page 20: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

캐시서버 미사용현상신규 게임 CBT 진행제한된 사용자만 접근하였음에도 게임 DB 서버의 쿼리호출수가 매우 높음

Page 21: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

캐시서버 미사용원인 분석몬스터 사냥 시 아이템 획득 , 경험치 변경 사항을 게임 DB 에 바로 반영

Page 22: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

캐시서버 미사용해결게임 서버와 DB 서버 사이에 비동기 데이터 관리 해주는 미들웨어를 추가 (Cache server)캐시 서버 추가 후 DB 서버의 부하가 400% 감소

소요 기간약 2 달

Page 23: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

그래서 ?!

Page 24: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

이슈 해결 방안1. 장비 성능 향상2. 캐시서버 활용3. I/O 성격에 따라 파일을 분산

Page 25: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

1. 장비 성능 향상Scale up단일 장비 업그레이드를 통한 성능 향상에는 한계가 있음

Scale out동일한 성능의 장비를 계속 늘려가는 구조로 한계가 없음개발 시 분산 처리에 대한 고려 필요

Page 26: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

2. 캐시 서버 활용한번 읽은 데이터 재사용DB 에서 읽은 데이터를 캐시서버에서 보관함으로써 이 후 동일 데이터 요청 시 바로 처리 가능

데이터 변경 빈도 제어 가능캐시서버에서 일정 주기마다 DB 서버에 기록

완충장치 역할캐시서버까지만 작업이 완료되면 DB 지연이 발생하더라도 서비스에 영향이 없음

DB 서버에 비하여 확장 용이

Page 27: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

2. 캐시 서버 활용Middle layer 가 없는 경우

Middle LayerMiddle Layer

Server LayerServer Layer

Client LayerClient Layer

Game Server (or IIS)

DB Server

(Game DB)

DB Server

(GameLog DB)

UsersUsers [ 장점 ]

- 구조가 단순하다 .

- 데이터 변경 내용이 DB 에

즉시 반영된다 .

[ 장점 ]

- 구조가 단순하다 .

- 데이터 변경 내용이 DB 에

즉시 반영된다 .

[ 단점 ]

- DB 의 성능이 게임 플레이에

바로 영향을 준다 .

- DB 호출수가 높다 .

[ 단점 ]

- DB 의 성능이 게임 플레이에

바로 영향을 준다 .

- DB 호출수가 높다 .

Page 28: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

2. 캐시 서버 활용Middle layer 가 있는 경우 (Cache server)

Middle LayerMiddle Layer

Server LayerServer Layer

Client LayerClient Layer

Game Server (or IIS)

DB Server

(Game DB)

DB Server

(GameLog DB)

UsersUsers

Cache ServerQueue

(Async)

[ 장점 ]

- DB 호출수 줄어든다 .

- DB 에서 수용 가능한

범위내에서 처리한다 .

[ 장점 ]

- DB 호출수 줄어든다 .

- DB 에서 수용 가능한

범위내에서 처리한다 .[ 단점 ]

- 데이터 유실이 발생할 수 있

다 .

- 구조가 복잡하며 , 개발

리소스가 들어간다 .

[ 단점 ]

- 데이터 유실이 발생할 수 있

다 .

- 구조가 복잡하며 , 개발

리소스가 들어간다 .

Page 29: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

3. I/O 부하 분산데이터 파일과 로그 파일을 물리적으로 분리데이터 파일은 랜덤 읽기 / 쓰기로그 파일은 순차 쓰기

Page 30: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

3. I/O 부하 분산게임 DB 와 게임 로그 DB 를 분리게임 플레이에 필요한 데이터만 개별적으로 관리

Middle LayerMiddle Layer

Server LayerServer Layer

Client LayerClient Layer

Game Server (or IIS)

DB Server

(Game DB)

DB Server

(GameLog DB)

Cache ServerQueue

(Async)

Page 31: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

전면광고게임로그에 대해서 관심 있는 분은 이번 주 금요일 오후 금요일 오후 22 시시 !!

비공개 세션이지만 많은 관심 부탁드립니다많은 관심 부탁드립니다 !!

Page 32: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

정리DB 성능 저하의 주범은디스크 I/O, 높은 실행수

DB 성능 향상을 위해서성능을 고려한 구조 설계캐시 서버 활용I/O 부하 분산

Page 33: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

마지막 한마디*. 나쁜 기술은 없습니다 .

*. 모든 기술에는 장점과 단점이 존재하며해당 기술을 이해하고 적절하게 활용하는 것이 중요하다고 생각합니다 .

*. 앞서 이야기 드린 내용도 절대적인 요소는 아니며 본인 환경에 맞게 적절히 사용하기를 바랍니다 .

Page 34: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

03. T-SQL 개발 가이드

Page 35: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

DISK

MEMORY

select name from dbo.table where id = 10000

Id = 10000

Name = 박숙봉

Id = 10000

Name = 박숙봉

메모리

Page 36: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

T-SQL 개발 가이드

페이징 복권 이벤트PLAN CACHE POLLUTION

데드락

Page 37: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징

Page 38: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Page 39: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징일반적

Page 40: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

뒤로 갈수록 느려져 .....

Page 41: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징조금 개선 방안반으로 뚝 .

Page 42: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징조금 더 개선 방안블럭 단위로

시작번호 : 100시작번호 : 110

Page 43: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징현실에서는 이렇게…첫 블록은 최신 글

시작번호 : 100

시작번호 : 최근글

Page 44: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징

Page 45: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

페이징부하를 최소화 하기 위한 다른 방법들

1.삭제된 게시물 노출 2.바로 전 /후 단계만

Page 46: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

복권 아이템 발급

Page 47: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

CPU 가 ..80 이 넘었 ..

복권당첨이벤트가있었던

주말…

Page 48: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

복권 아이템 발급 무엇이 문제 ?이번 주부터 A 게임 복권 이벤트 ..

--NEWID 로 모두 정렬SELECT TOP 1 IDX

FROM dbo.Lotto ORDER BY NEWID()

Page 49: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

복권 아이템 발급어떻게 개선 하였나Rand 함수 사용

-- 고유번호의 MAX 값을 변수에 저장SELECT @A = MAX(IDX) FROM dbo.Lotto

-- 변수의 랜덤 값을 이용 SELECT TOP 1 IDX FROM dbo.Lotto WHERE IDX < (@A * RAND()) ORDER BY IDX DESC

Page 50: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

복권 아이템 발급이만큼 ~

검색 수 5, 논리적 읽기 수 2884, CPU 시간 = 2214밀리 초 , 경과시간 = 5228밀리 초

검색 수 1, 논리적 읽기 수 3, CPU 시간 = 0밀리 초 , 경과시간 = 84밀리 초

Page 51: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

PLAN CACHE POLLUTION

Page 52: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Plan cache 과다 점유PLAN CACHE?

Page 53: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

아까운 메모리 엉뚱한데 쓰고 있지 않나요 ?

Page 54: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Plan cache 과다 점유중국 B 게임

1.높은 CPU2.PLAN Cache2.4GB/6.0GB

40%

Page 55: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Plan cache 과다 점유어떤 종류의 쿼리가 문제인가 ?

objtype cacheobjtype bucket_cnt cnt size_in_bytes usecounts

Proc Extended Proc 16 17 139264 119269

Check Parse Tree 8 8 180224 717

UsrTab Parse Tree 2 3 483328 11

Prepared Compiled Plan 14092 17438 629841920 38536769

Adhoc Compiled Plan 178 179 13967360 141125

Adhoc Compiled Plan Stub 3866 4043 1206608 61150

View Parse Tree 106 382 42901504 155288

Trigger Compiled Plan 1 1 73728 516

Proc Compiled Plan 140 163 55640064 47457523

Page 56: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Plan cache 과다 점유무엇이 문제 ?!

(@p0 bigint output,@p1 datetime output,@p2 char(6),@p3 tinyint,@p4 varchar(36),@p5 int,@p6 varchar(15),@p7 varchar(32),@p8 tinyint,@p9 char(2),@p10 tinyint,@p11 int,@p12 int,@p13 bigint,@p14 tinyint,@p15 int,@p16 varchar(8000),@p17 varch

ar(10),@p18 smallint,@p19 bit,@p20 varchar(12),@RETURN_VALUE int output)EXEC @RETURN_VALUE = [dbo].[sp_name] @session_no = @p0 OUTPUT, @session_datetime = @p1 OUTPUT, @service_code = @p2, @server_no = @p3, @user_game_id = @p4, @permission_no = @p5, @session_ip = @p6, @session_mid = @p7, @authorize_result = @p8, @authorize_type = @p9, @message_type = @p10, @message_option = @p11, @agency_no = @p12, @grc = @p13, @deny_result = @p14, @user_no = @p15, @user_name = @p16, @session_option = @p17, @limit_id_count = @p18, @use_exp_id = @p19, @connect_ip = @p20

(@p0 bigint output,@p1 datetime output,@p2 char(6),@p3 tinyint,@p4 varchar(17),@p5 int,@p6 varchar(11),@p7 varchar(32),@p8 tinyint,@p9 char(2),@p10 tinyint,@p11 int,@p12 int,@p13 bigint,@p14 tinyint,@p15 int,@p16 varchar(8000),@p17 varch

ar(10),@p18 smallint,@p19 bit,@p20 varchar(8),@RETURN_VALUE int output)EXEC @RETURN_VALUE = [dbo].[sp_name] @session_no = @p0 OUTPUT, @session_datetime = @p1 OUTPUT, @service_code = @p2, @server_no = @p3, @user_game_id = @p4, @permission_no = @p5, @session_ip = @p6, @session_mid = @p7, @authorize_result = @p8, @authorize_type = @p9, @message_type = @p10, @message_option = @p11, @agency_no = @p12, @grc = @p13, @deny_result = @p14, @user_no = @p15, @user_name = @p16, @session_option = @p17, @limit_id_count = @p18, @use_exp_id = @p19, @connect_ip = @p20

Page 57: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Plan cache 과다 점유얼마나 쌓인 거야 ?

cnt size_in_bytes parsed

16285 547962880 @RETURN_VALUE = [dbo].[sp_name] @s...

70 1654784 @RETURN_VALUE = [dbo].[sp_name_2] @s...

69 1564672 @RETURN_VALUE = [dbo].[sp_name_3] @u...

67 1925120 @RETURN_VALUE = [dbo].[sp_name_4] @s...

9 172032 @RETURN_VALUE = [dbo].[sp_name_8] @a...

... ... ...

Page 58: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

왜 이런 일이…

Memory Allocated To Plan Caching

Plan cache 과다 점유

MSSQL VERSION

SIZE 2000 2005 ~SP1 2005 SP2~

0~8GB 4G 75% 75%

8~64GB   50% 10%

64GB~   25% 5%

Page 59: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

어떻게 해야 하는가 ?

Parameter Type, Size FIX

강제 매개변수화PLAN CACHE 초기화mssql 2008 : Optimize for ad-hoc query

Plan cache 과다 점유

Page 60: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락

Page 61: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

작업 실패 ..또 재처리해야대 ..ㅡㅡ ;

Page 62: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락왜 ?

테이블명 인덱스명 인덱스 종류 키컬럼명CACHETABLE CTI_USERID NONCLUSTERED USERID

Owner IS Owner IX

Request ISRequest IX

Page 63: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락해결 방법격리 수준 조정

WITH(NOLOCK)

Owner IS Owner IX

Request IX

Page 64: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락이었어

Page 65: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락모랑 모가 겹친 거지 ?

Page 66: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락아 ..?

테이블명 인덱스명 인덱스 종류 키컬럼명 포괄열tit_table_deadlocktest tii_IDX NONCLUSTERED IDX name, nickname

( 인덱스 ) ( 데이터 )

Owner S Owner X

Request X Request S

Page 67: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락데드락 피하기

테이블명 인덱스명 인덱스 종류 키컬럼명 포괄열

tit_table_daadlocktest tii_IDX NONCLUSTERED IDX name, nickname, registdate

Owner S

Request X

Page 68: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

데드락데드락을 최소화 하려면

트랜잭션을 짧게트랜잭션 흐름 일관화적절한 격리 수준 조정엑세스 패턴 파악

Page 69: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

Q&A데이터베이스 아키텍쳐 구축I/O 성능 이슈 사례

스토리지 성능 이슈Checkpoint 시점의 I/O 병목캐시 서버 미사용

이슈 해결 방안T-SQL 개발 가이드이슈 해결 사례페이징복권 아이템 발급Plan cache데드락

Page 70: Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드

END.