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

Post on 18-Jun-2015

3.100 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

sql server

TRANSCRIPT

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

및 개발 가이드㈜넥슨DB 팀

임현수 , 박숙봉

목차1. Intro

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

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

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

4. Q&A

01. Intro

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

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

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

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

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

사전에 예방하는 것이 중요

DB 성능에 영향을 주는 요소

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

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

DB 성능에 영향을 주는 요소

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

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

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

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

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

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

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

스토리지 성능 이슈원인 분석새벽에 랭킹 배치작업 수행 시 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….

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

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

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

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

소요시간약 20 일

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

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

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

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

Checkpoint 와 I/O 병목

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

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

소요 기간약 30 일

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

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

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

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

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

소요 기간약 2 달

그래서 ?!

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

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

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

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

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

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

DB 서버에 비하여 확장 용이

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 호출수가 높다 .

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 에서 수용 가능한

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

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

다 .

- 구조가 복잡하며 , 개발

리소스가 들어간다 .

[ 단점 ]

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

다 .

- 구조가 복잡하며 , 개발

리소스가 들어간다 .

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

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)

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

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

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

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

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

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

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

03. T-SQL 개발 가이드

DISK

MEMORY

select name from dbo.table where id = 10000

Id = 10000

Name = 박숙봉

Id = 10000

Name = 박숙봉

메모리

T-SQL 개발 가이드

페이징 복권 이벤트PLAN CACHE POLLUTION

데드락

페이징

페이징일반적

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

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

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

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

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

시작번호 : 100

시작번호 : 최근글

페이징

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

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

복권 아이템 발급

CPU 가 ..80 이 넘었 ..

복권당첨이벤트가있었던

주말…

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

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

FROM dbo.Lotto ORDER BY NEWID()

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

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

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

복권 아이템 발급이만큼 ~

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

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

PLAN CACHE POLLUTION

Plan cache 과다 점유PLAN CACHE?

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

Plan cache 과다 점유중국 B 게임

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

40%

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

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

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...

... ... ...

왜 이런 일이…

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%

어떻게 해야 하는가 ?

Parameter Type, Size FIX

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

Plan cache 과다 점유

데드락

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

데드락왜 ?

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

Owner IS Owner IX

Request ISRequest IX

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

WITH(NOLOCK)

Owner IS Owner IX

Request IX

데드락이었어

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

데드락아 ..?

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

( 인덱스 ) ( 데이터 )

Owner S Owner X

Request X Request S

데드락데드락 피하기

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

tit_table_daadlocktest tii_IDX NONCLUSTERED IDX name, nickname, registdate

Owner S

Request X

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

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

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

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

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

END.

top related