대용량 데이터베이스 구축 및 관리 팁

40
대대대 대대대대대대 대대 대 대대 대대대 대대대대대대 대대 대 대대 대대대 대대대 ( ( [email protected] [email protected] ) ) Database Consultant Database Consultant

Upload: nathan-ayers

Post on 02-Jan-2016

93 views

Category:

Documents


1 download

DESCRIPTION

대용량 데이터베이스 구축 및 관리 팁. 하성희 ( [email protected] ) Database Consultant. 대용량 환경 구축. 대부분의 DBMS 에 대해 일반적으로 적용되는 규칙이 적용되지 않음 Auto-tuning 이 적합하지 않음 전체 플랫폼 , 하드웨어 , OS, SQL Server Configuration 에 대한 이해가 필요함 99% 의 일반적인 응용 프로그램에는 적합한 디폴트 설정을 변경해야 할 수도 있음 DOP, Recovery Interval 등 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 대용량 데이터베이스 구축 및 관리 팁

대용량 데이터베이스 구축 대용량 데이터베이스 구축 및 관리 팁및 관리 팁

하성희 하성희 (([email protected]@empal.com))

Database ConsultantDatabase Consultant

Page 2: 대용량 데이터베이스 구축 및 관리 팁

대용량 환경 구축대용량 환경 구축 대부분의 대부분의 DBMSDBMS 에 대해 일반적으로 적용되는 규칙이 에 대해 일반적으로 적용되는 규칙이

적용되지 않음적용되지 않음 Auto-tuningAuto-tuning 이 적합하지 않음이 적합하지 않음 전체 플랫폼전체 플랫폼 , , 하드웨어하드웨어 , OS, SQL Server , OS, SQL Server

ConfigurationConfiguration 에 대한 이해가 필요함에 대한 이해가 필요함 99%99% 의 일반적인 응용 프로그램에는 적합한 디폴트 의 일반적인 응용 프로그램에는 적합한 디폴트

설정을 변경해야 할 수도 있음설정을 변경해야 할 수도 있음 DOP, DOP, Recovery Interval Recovery Interval 등등 Query / Index Query / Index 힌트힌트 Table lock escalationTable lock escalation 백업백업 // 로딩 전략로딩 전략 데이터 로딩 전략데이터 로딩 전략

어렵지만어렵지만 , , 가능함가능함 . . 대용량 경험과 노하우 필요대용량 경험과 노하우 필요

Page 3: 대용량 데이터베이스 구축 및 관리 팁

대용량 환경 구축에 필요한 대용량 환경 구축에 필요한 기능기능 FilegroupFilegroup Partitioned ViewPartitioned View Indexed ViewIndexed View 부분 백업부분 백업 , , 부분 복원부분 복원 병렬 데이터 로딩병렬 데이터 로딩

Page 4: 대용량 데이터베이스 구축 및 관리 팁

Configuration OptionConfiguration Option

awe enabledawe enabled max server memory (MB)max server memory (MB) min server memory (MB) min server memory (MB) cost threshold for parallelismcost threshold for parallelism max degree of parallelismmax degree of parallelism lightweight poolinglightweight pooling affinity maskaffinity mask query governor cost limitquery governor cost limit network packet size (B)network packet size (B)

Page 5: 대용량 데이터베이스 구축 및 관리 팁

Degree of ParallelismDegree of Parallelism max degree of parallelism max degree of parallelism 다중 프로세서가 하나의 쿼리를 실행다중 프로세서가 하나의 쿼리를 실행 디폴트 값 디폴트 값 = = 0 0 모든 프로세스 사용 모든 프로세스 사용 (( 최대 최대 33

22)) 스레드들이 스레드들이 CPUCPU 의 대다수를 사용할 때 문제 의 대다수를 사용할 때 문제

발생발생 Context switchingContext switching 잘못 작성된 쿼리로 인해 발생하는 경우가 잘못 작성된 쿼리로 인해 발생하는 경우가

종종 있음종종 있음 일반적인 권고 사항일반적인 권고 사항 : :

운영 장비운영 장비 : : DOP=0DOP=0 프로세서 개수프로세서 개수 >8: >8: DOP=8DOP=8

Page 6: 대용량 데이터베이스 구축 및 관리 팁

메모리메모리 일반적으로일반적으로 , , 메모리가 많을수록 좋다메모리가 많을수록 좋다

데이터 캐시와 실행 계획 캐시가 빠르므로데이터 캐시와 실행 계획 캐시가 빠르므로 4GB RAM4GB RAM 의 경우에는의 경우에는 , , 디폴트로 디폴트로 OSOS 가 가 2GB2GB 를 를

사용하고 사용하고 SQL ServerSQL Server 가 가 2GB2GB 를 사용한다를 사용한다 SQL ServerSQL Server 가 가 33GBGB 를 사용하도록 하려면 를 사용하도록 하려면 /3/3gb gb

옵션을 지정옵션을 지정 메모리가 메모리가 44GBGB 를 초과하는 경우에는를 초과하는 경우에는 , , AWEAWE 와 와 PAE PAE

옵션을 사용한다옵션을 사용한다 메모리 크기와 메모리 크기와 Boot.ini Boot.ini 플래그 설정플래그 설정

4 4 GB GB /3GB/3GB 8 GB 8 GB /3GB /PAE/3GB /PAE 16 GB 16 GB /3GB /PAE/3GB /PAE 16 GB 16 GB 이상 이상 (16 (16 ~~ 64 64 GB)GB) /PAE/PAE

Page 7: 대용량 데이터베이스 구축 및 관리 팁

VLDB(OLTP) VLDB(OLTP) 시스템 환경시스템 환경성능 측면성능 측면

잠금과 블로킹잠금과 블로킹 성능 이슈 또는 교착상태성능 이슈 또는 교착상태 (Deadlock)(Deadlock) 를 를

유발하는 유발하는 Lock escalation Lock escalation 제거제거 로그 병목 제거로그 병목 제거 비효율적인 저장 프로시저 재컴파일 제거비효율적인 저장 프로시저 재컴파일 제거

Page 8: 대용량 데이터베이스 구축 및 관리 팁

잠금과 블로킹잠금과 블로킹VLDB VLDB 환경환경

블로킹 감소 방안블로킹 감소 방안 쿼리 최적화 쿼리 최적화 테이블 스캔 방지 테이블 스캔 방지

Table LockTable Lock 으로 인한 문제 유발으로 인한 문제 유발 인덱스 튜닝인덱스 튜닝 보다 향상된 데이터 로딩 계획보다 향상된 데이터 로딩 계획 파티셔닝과 같은 파티셔닝과 같은 scale-out scale-out 전략 활용전략 활용

Page 9: 대용량 데이터베이스 구축 및 관리 팁

LockingLocking 과 과 Lock EscalationLock Escalation Lock EscalationLock Escalation

특정 비율의 메모리가 특정 비율의 메모리가 locklock 에 사용되거나 시스템이 에 사용되거나 시스템이 25002500 개개(SS SP2(SS SP2 에서는 에서는 5000)5000) 의 의 locklock 을 할당한 경우에는 을 할당한 경우에는 SQL SQL ServerServer 가 가 table locktable lock 으로 전환시킨다으로 전환시킨다

Table Lock escalationTable Lock escalation 은 할당되는 메모리양은 줄여 주지만 은 할당되는 메모리양은 줄여 주지만 deadlockdeadlock 이나 기타 잠금으로 인한 문제를 유발시킬 수 있다이나 기타 잠금으로 인한 문제를 유발시킬 수 있다

해결책해결책 :: 강제로 강제로 page lockpage lock 을 사용하도록 함으로써 할당되는 을 사용하도록 함으로써 할당되는 locklock

의 수를 줄인다의 수를 줄인다 또는 다음과 같은 팁을 사용한다또는 다음과 같은 팁을 사용한다

더미 데이터를 더미 데이터를 insertinsert 한다 한다 (( 예예 :9999 99 99999 999 :9999 99 99999 999 999)999)

InsertInsert 한 레코드에 대해서 한 레코드에 대해서 update lockupdate lock 을 확보한다을 확보한다 이렇게 하면 동일 테이블에 이미 다른 이렇게 하면 동일 테이블에 이미 다른 locklock 이 걸려 이 걸려

있으므로있으므로 , , 그 다음에 수행되는 스레드에서는 그 다음에 수행되는 스레드에서는 table locktable lock을 걸 수 없게 된다을 걸 수 없게 된다

최악의 경우최악의 경우 – – Lock escalationLock escalation 을 방지하는 을 방지하는 trace flag trace flag 사용 가능사용 가능 . . 주의 요망주의 요망

일반적인 잠금 관련 툴들을 통해 모니터링한다일반적인 잠금 관련 툴들을 통해 모니터링한다 : : 프로필러프로필러 , , sp_who, sp_who2, sp_lock … sp_who, sp_who2, sp_lock …

Page 10: 대용량 데이터베이스 구축 및 관리 팁

인덱스 옵션인덱스 옵션 sp_indexoptionsp_indexoption

sp_indexoption ‘table’, ‘AllowRowLocks|sp_indexoption ‘table’, ‘AllowRowLocks|AllowPageLocks’, TRUE|FALSEAllowPageLocks’, TRUE|FALSE

Page 11: 대용량 데이터베이스 구축 및 관리 팁

로그 병목 제거로그 병목 제거 로그를 별도의 드라이브 또는 별도의 로그를 별도의 드라이브 또는 별도의 RAID 10 RAID 10

stripe setstripe set 에 배치에 배치 로그가 로그가 SANSAN 에 있는 경우에는 전용 에 있는 경우에는 전용

Controller Controller 또는 전용 또는 전용 LUN(s) LUN(s) 할당할당 로그에서 대기가 발생하고 있지 않는지 확인 로그에서 대기가 발생하고 있지 않는지 확인

(Waitstats (Waitstats 모니터링모니터링 ) – DBCC waitstats) – DBCC waitstats DBCC SQLPERF (Waitstats, clear)DBCC SQLPERF (Waitstats, clear) gogo DBCC SQLPERF (Waitstats)DBCC SQLPERF (Waitstats)

Page 12: 대용량 데이터베이스 구축 및 관리 팁

Create Waitstats ScriptCreate Waitstats ScriptDBCC sqlperf(waitstats,clear)DBCC sqlperf(waitstats,clear) -- wait statistics -- wait statistics 클리어클리어drop table waitstatsdrop table waitstatscreate table waitstats (Wait_Type varchar(80), create table waitstats (Wait_Type varchar(80),

Requests numeric(18,1),Requests numeric(18,1),Wait_Time numeric (18,1),Wait_Time numeric (18,1),Signal_Wait_Time numeric(18,1),Signal_Wait_Time numeric(18,1),timenow datetime default getdate())timenow datetime default getdate())

declare @start int, @finish intdeclare @start int, @finish intselect @start = 1, @finish = 10select @start = 1, @finish = 10while (@start < @finish)while (@start < @finish)beginbegin

Begin transactionBegin transaction insert into waitstats (Wait_Type, Requests, insert into waitstats (Wait_Type, Requests,

Wait_Time,Signal_Wait_Time)Wait_Time,Signal_Wait_Time)

exec ('DBCC sqlperf(waitstats)')exec ('DBCC sqlperf(waitstats)')commitcommit

select @start = @start + 1select @start = @start + 1waitfor delay '00:00:10'waitfor delay '00:00:10' -- 10-- 10 초 간격으로 수행초 간격으로 수행

EndEnd

Select * FROM WAITSTATS order by wait_time descSelect * FROM WAITSTATS order by wait_time desc

Page 13: 대용량 데이터베이스 구축 및 관리 팁

재컴파일은 다음에 의해 유발된다재컴파일은 다음에 의해 유발된다 SET SET 옵션의 변경옵션의 변경 DML/DDL DML/DDL 혼합 사용혼합 사용 Tempdb Tempdb 행 변경 등행 변경 등

감소 방안감소 방안 ?? Temp tableTemp table 을 을 table table 변수로 변경변수로 변경 먼저 필요한 먼저 필요한 INSERT INSERT 작업을 모두 수행작업을 모두 수행 가능하다면 동일한 저장 프로시저 내에서 가능하다면 동일한 저장 프로시저 내에서 temp tabletemp table 을 만들고 을 만들고

삭제삭제 전체 이름을 지정전체 이름을 지정 옵션 사용 옵션 사용 : “: “keep plan” keep plan” 또는또는 “ “ keepfixedplan” keepfixedplan” 저장 프로시저를 분해저장 프로시저를 분해

MSDNMSDN 에 있는 참고가 될 만한 에 있는 참고가 될 만한 white paper white paper 자료자료http://msdn.microsoft.com/library/default.asp?url=/library/en-http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql2k/html/sql_queryrecompilation.aspus/dnsql2k/html/sql_queryrecompilation.asp

비효율적인 저장 프로시저 비효율적인 저장 프로시저 재컴파일 제거재컴파일 제거

Page 14: 대용량 데이터베이스 구축 및 관리 팁

TempDB TempDB 속도 저하속도 저하 !! Peak Peak 시점에 성능 저하시점에 성능 저하

많은 동시 사용자들이 임시 테이블들을 많은 동시 사용자들이 임시 테이블들을 생성하는 경우생성하는 경우

성능 저하성능 저하 SysprocessesSysprocesses 에서 에서 DBID=2 (TempDB) DBID=2 (TempDB) 에 에

대한 대한 lock lock 정보가 확인됨정보가 확인됨 해결책해결책

TempDB TempDB 파일그룹에 파일 추가파일그룹에 파일 추가 TempDBTempDB 를 보다 많은 를 보다 많은 spindlespindle 에 걸쳐 배치에 걸쳐 배치 단일 페이지 할당을 비활성화하는 단일 페이지 할당을 비활성화하는 trace flag trace flag 사용 사용

가능가능 , , 주의 요망주의 요망

Page 15: 대용량 데이터베이스 구축 및 관리 팁

인덱스 생성인덱스 생성VLDB VLDB 기법기법

인덱스 생성인덱스 생성 크기가 큰 인덱스의 경우에는 병렬 수행크기가 큰 인덱스의 경우에는 병렬 수행

SMPSMP 의 경우 디폴트의 경우 디폴트 보다 작은 크기의 인덱스들의 생성 작업은 보다 작은 크기의 인덱스들의 생성 작업은

동시에 수행동시에 수행 Bulk_Logged Bulk_Logged 복구 모델복구 모델 클러스터된 인덱스의 경우에는 작업 휴지 가능 클러스터된 인덱스의 경우에는 작업 휴지 가능

시간과 재구성 작업 소요 시간 고려시간과 재구성 작업 소요 시간 고려 대용량 테이블의 경우에는 대용량 테이블의 경우에는 Partitioned ViewPartitioned View

를 사용하는 것이 좋음를 사용하는 것이 좋음

Page 16: 대용량 데이터베이스 구축 및 관리 팁

인덱스 재구성 인덱스 재구성 VLDB VLDB 유의 사항유의 사항

DBCC DBREINDEXDBCC DBREINDEX 즉시 중단되지 않음즉시 중단되지 않음 작업 가능 시간이 제한적인 경우작업 가능 시간이 제한적인 경우 , , 롤백 소요 롤백 소요

시간 감안시간 감안

Page 17: 대용량 데이터베이스 구축 및 관리 팁

인덱스 관리인덱스 관리Partitioned ViewPartitioned View 과 단일 테이블과 단일 테이블 비교비교

목표목표 : : 단편화 제거단편화 제거 , , 데이터 로딩 시 페이지 분할 최소화데이터 로딩 시 페이지 분할 최소화 DBCC SHOWCONTIG : DBCC SHOWCONTIG : 단편화 확인단편화 확인

단일 테이블 관리 팁단일 테이블 관리 팁 인덱스 삭제와 재생성이 용이하지 않음인덱스 삭제와 재생성이 용이하지 않음 DBCC INDEXDEFRAG – DBCC INDEXDEFRAG – 온라인 수행 가능하지만 온라인 수행 가능하지만

시간이 오래 소요시간이 오래 소요 CREATE INDEX … WITH DROP_EXISTINGCREATE INDEX … WITH DROP_EXISTING

Partitioned ViewPartitioned View 가 훨씬 더 빠르고 단순가 훨씬 더 빠르고 단순 파티션별로 인덱스 재생성 관리파티션별로 인덱스 재생성 관리 어떤 파티션이 가득 채워지고 일단 한번 어떤 파티션이 가득 채워지고 일단 한번 reindex reindex

작업을 수행하기만 하면작업을 수행하기만 하면 , , 그 인덱스에 대해서는 관리 그 인덱스에 대해서는 관리 불필요불필요

Page 18: 대용량 데이터베이스 구축 및 관리 팁

시일이 경과된 데이터의 삭제시일이 경과된 데이터의 삭제

일반적으로 일정 기간 동안일반적으로 일정 기간 동안 (24(24 개월 또는 개월 또는 3636 개월개월 )) 의 데이터를 유지의 데이터를 유지 , , 주기적으로 주기적으로 오래된 데이터 삭제오래된 데이터 삭제

Sales_Sales_AllAll

단일 테이블 단일 테이블

……

Sales_Sales_200201200201

Sales_Sales_200202200202

Sales_Sales_200212200212

Partitioned ViewPartitioned View

V_Sales_V_Sales_AllAll

}}Sales_Sales_

200201200201

Page 19: 대용량 데이터베이스 구축 및 관리 팁

데이터 삭제데이터 삭제 : : 단일 테이블단일 테이블

작업이 느리다작업이 느리다 대개 한번에 대개 한번에 3030 일 내지 일 내지 9090 일 간의 일 간의

데이터를 삭제데이터를 삭제 삭제 작업 중의 로그 파일 크기 증가삭제 작업 중의 로그 파일 크기 증가 블로킹 이슈 발생블로킹 이슈 발생 Lock escalation Lock escalation 주의주의 휴지 시간이 아닌 시간대에 수행하게 휴지 시간이 아닌 시간대에 수행하게

되면 데이터 로딩과 수행되는 쿼리들에 되면 데이터 로딩과 수행되는 쿼리들에 영향을 미칠 수 있다영향을 미칠 수 있다

Page 20: 대용량 데이터베이스 구축 및 관리 팁

데이터 삭제데이터 삭제 : : 단일 테이블단일 테이블 클러스터된 인덱스의 범위를 사용하여 삭제할 클러스터된 인덱스의 범위를 사용하여 삭제할

것것 Delete from <table> where Delete from <table> where

<clustered_index_key> between <clustered_index_key> between <values><values>

여러 단계로 나누어서 삭제여러 단계로 나누어서 삭제 범위를 여러 개로 나누고 병렬 삭제 가능범위를 여러 개로 나누고 병렬 삭제 가능 작업으로 인한 잠금 결과를 받아들이기 어려운 작업으로 인한 잠금 결과를 받아들이기 어려운

경우에는 커서 사용 고려경우에는 커서 사용 고려 :: 삭제할 영역에 대하여 커서 오픈삭제할 영역에 대하여 커서 오픈 Delete ‘where current of’Delete ‘where current of’ 10001000 개 행 단위로 커밋개 행 단위로 커밋

Page 21: 대용량 데이터베이스 구축 및 관리 팁

데이터 삭제데이터 삭제 : Partitioned : Partitioned ViewView 작업이 간단하고 신속하다작업이 간단하고 신속하다 Partitioned ViewPartitioned View 에서의 삭제는 다음의 두 에서의 삭제는 다음의 두

단계로 수행 가능하며 신속하게 수행 가능단계로 수행 가능하며 신속하게 수행 가능 :: 오래된 데이터가 존재하는 테이블을 제외한 오래된 데이터가 존재하는 테이블을 제외한 뷰를 다시 생성뷰를 다시 생성

삭제 대상 테이블 삭제삭제 대상 테이블 삭제

Page 22: 대용량 데이터베이스 구축 및 관리 팁

PartitionedPartitioned View View 사용 시 사용 시 팁팁 데모데모

Page 23: 대용량 데이터베이스 구축 및 관리 팁

데이터베이스 일관성 점검 데이터베이스 일관성 점검 VLDB VLDB 기법기법 전체 점검을 위해서는 전체 점검을 위해서는 TempDB TempDB 공간을 충분하게 공간을 충분하게

확보할 것확보할 것 필요 스페이스 확인 필요 스페이스 확인 : ESTIMATEONLY : ESTIMATEONLY 옵션옵션

물리적 점검물리적 점검 PHYSICAL_ONLY PHYSICAL_ONLY 옵션옵션

한번에 데이터베이스의 일부분씩 점검할 것한번에 데이터베이스의 일부분씩 점검할 것 파일그룹별로 점검파일그룹별로 점검 수정 빈도에 따라 점검 주기 차별화 전략수정 빈도에 따라 점검 주기 차별화 전략

Read only Cool Hot

Page 24: 대용량 데이터베이스 구축 및 관리 팁

데이터베이스 축소 작업이 너무 오래 걸리는 데이터베이스 축소 작업이 너무 오래 걸리는 경우경우 TRUNCATEONLY TRUNCATEONLY 옵션을 사용하여 옵션을 사용하여

스페이스 회수 스페이스 회수

데이터베이스 축소데이터베이스 축소VLDB VLDB 기법기법

Page 25: 대용량 데이터베이스 구축 및 관리 팁

대용량 테이블 스키마 변경대용량 테이블 스키마 변경 VLDB VLDB 기법기법 NOT NULL NOT NULL 컬럼 추가컬럼 추가

DEFAULT DEFAULT 정의 요정의 요 테이블 테이블 Sch-M lockSch-M lock 으로 인한 문제 유발으로 인한 문제 유발 DEFAULT DEFAULT 정의 적용 불가한 경우 작업 팁정의 적용 불가한 경우 작업 팁

데모데모 NOT NULL NOT NULL 속성의 컬럼 추가 시에 속성의 컬럼 추가 시에 NOT NOT

NULLNULL 로 정의하는 것이 왜 좋은가로 정의하는 것이 왜 좋은가 ??

Page 26: 대용량 데이터베이스 구축 및 관리 팁

ReplicationReplication VLDB VLDB 기법기법 구독 데이터 초기화구독 데이터 초기화

Automatic/None Automatic/None 모드모드 대용량 데이터 동기화대용량 데이터 동기화

Auto Auto 모드를 사용할 수 없는 경우모드를 사용할 수 없는 경우 사전 동기화사전 동기화 , None , None 모드 사용모드 사용 백업 복원백업 복원 , Log-shipping , Log-shipping 활용활용

Page 27: 대용량 데이터베이스 구축 및 관리 팁

백업 방식백업 방식 전체 데이터베이스 백업전체 데이터베이스 백업 트랜잭션 로그 백업트랜잭션 로그 백업 차등 백업차등 백업 파일 그룹파일 그룹 , , 파일 백업파일 백업

업무 단위 백업업무 단위 백업 // 복원 가능복원 가능 VLDB(Very Large Database)VLDB(Very Large Database) 에 에

효과적인 방식효과적인 방식

백업과 복원백업과 복원

Page 28: 대용량 데이터베이스 구축 및 관리 팁

백업과 복원백업과 복원

B-1 B-2

원본 파일 그룹

B-1 File1

파일 / 파일 그룹 단위

File2 File3

B-1_SUN

LOG_MON

LOG_TUE

LOG_WED

LOG_THU

LOG_FRI

::전체 데이터베이스 단위

<< 백업 예 >>

Page 29: 대용량 데이터베이스 구축 및 관리 팁

백업과 복원백업과 복원 대용량 대용량 TB+ TB+ 데이터베이스의 경우데이터베이스의 경우

어떤 백업 미디어를 사용해야 하는가어떤 백업 미디어를 사용해야 하는가 ?? 가장 빠르고가장 빠르고 , , 가장 합리적이며가장 합리적이며 , , 가장 비용 효율적인 가장 비용 효율적인

방법은 무엇일까방법은 무엇일까 ?? 특히 복원 측면에서 어떤 방법이 가장 신뢰성이 높을특히 복원 측면에서 어떤 방법이 가장 신뢰성이 높을까까 ??

파일그룹과 파일을 사용하면 부분적인 복원 가능파일그룹과 파일을 사용하면 부분적인 복원 가능 복구에 소요되는 시간과 다운타임의 비용을 비교 계산 요복구에 소요되는 시간과 다운타임의 비용을 비교 계산 요

Page 30: 대용량 데이터베이스 구축 및 관리 팁

권장 사항권장 사항 대부분의 데이터베이스에는 하나의 데이터 파일과 대부분의 데이터베이스에는 하나의 데이터 파일과

하나의 로그 파일만 있으면 됨하나의 로그 파일만 있으면 됨 여러 파일을 사용할 때여러 파일을 사용할 때 : : 두 번째 파일 그룹 추가 두 번째 파일 그룹 추가 & &

그 파일 그룹을 기본 파일 그룹으로 지정 그 파일 그룹을 기본 파일 그룹으로 지정 주 주 파일에는 시스템 파일과 개체만 있게 함파일에는 시스템 파일과 개체만 있게 함

파일 그룹을 사용하여 특정 물리적 디스크에 파일 그룹을 사용하여 특정 물리적 디스크에 오브젝트를 배치함오브젝트를 배치함

같은 조인 쿼리에서 사용되는 여러 테이블은 여러 같은 조인 쿼리에서 사용되는 여러 테이블은 여러 파일 그룹에 배치함 파일 그룹에 배치함 조인된 데이터에서 병렬 조인된 데이터에서 병렬 디스크 디스크 I/O I/O 검색을 하기 때문에 성능이 향상됨검색을 하기 때문에 성능이 향상됨

자주 액세스되는 테이블과 그 테이블에 속하는 자주 액세스되는 테이블과 그 테이블에 속하는 클러스터되지 않은 인덱스를 여러 파일 그룹에 배치 클러스터되지 않은 인덱스를 여러 파일 그룹에 배치

트랜잭션 로그 파일과 다른 파일 및 파일 그룹을 트랜잭션 로그 파일과 다른 파일 및 파일 그룹을 같은 물리적 디스크에 배치하지 않음같은 물리적 디스크에 배치하지 않음

파일 그룹과 파일파일 그룹과 파일

Page 31: 대용량 데이터베이스 구축 및 관리 팁

백업과 복원 전략백업과 복원 전략 파일 그룹과 파일을 사용하면 관리 용이파일 그룹과 파일을 사용하면 관리 용이

파일 그룹과 파일은 개별적으로 백업 및 복원 파일 그룹과 파일은 개별적으로 백업 및 복원 가능함가능함

데이터의 확장이 용이함데이터의 확장이 용이함 파일 그룹과 파일을 사용하여 테이블과 파일 그룹과 파일을 사용하여 테이블과

인덱스 재배치인덱스 재배치 쿼리 성능 향상쿼리 성능 향상 다중 다중 CPUCPU 의 경우에 병렬 스캔의 경우에 병렬 스캔

특정 데이터를 특정 데이터를 Read-Only Read-Only 파일그룹에 파일그룹에 위치위치

Page 32: 대용량 데이터베이스 구축 및 관리 팁

백업 및 복원백업 및 복원VLDB VLDB 기법기법

온라인 백업온라인 백업 파일 백업과 로그 백업 사용파일 백업과 로그 백업 사용 파일 차등 백업 고려파일 차등 백업 고려

복구 시간 단축복구 시간 단축 자주 수정되지 않는 파일그룹은 자주 백업하지 자주 수정되지 않는 파일그룹은 자주 백업하지

않는다않는다

Page 33: 대용량 데이터베이스 구축 및 관리 팁

VLDB VLDB 시나리오시나리오파일 그룹과 파일 백업 복원파일 그룹과 파일 백업 복원 신중한 계획이 필요신중한 계획이 필요 복원 시 복원 시 integrityintegrity 를 위해서는 를 위해서는 Transactional Log Transactional Log

Backup Backup 필요필요 Crash Crash 발생 시점에 발생 시점에 BACKUP LOG WITH BACKUP LOG WITH

NO_TRUNCATENO_TRUNCATE 를 수행할 수 없는 경우에는를 수행할 수 없는 경우에는 , (, (서로 다른 파일서로 다른 파일 // 파일그룹에 있는 테이블들 간에 파일그룹에 있는 테이블들 간에 관계가 있는 경우에는 데이터 무결성을 보장하기 관계가 있는 경우에는 데이터 무결성을 보장하기 위해서는위해서는 ) ) 모든 파일모든 파일 // 파일그룹의 최신 백업본을 파일그룹의 최신 백업본을 복원해야 하며복원해야 하며 , , 가장 오래된 가장 오래된 transaction log transaction log 백업이 복원된 이후의 모든 트랜잭션 로그도 백업이 복원된 이후의 모든 트랜잭션 로그도 복원해야 한다복원해야 한다 . .

테이블과 인덱스 분리한 경우테이블과 인덱스 분리한 경우 파일그룹간의 파일그룹간의 interdependencyinterdependency 가 있는 경우가 있는 경우 참고 참고 : DB: DB 당 최다 당 최다 256 256 파일그룹파일그룹 , , 최다 최다 32767 32767 파일 파일

지원 가능지원 가능

Page 34: 대용량 데이터베이스 구축 및 관리 팁

기타 백업 방식기타 백업 방식 디스크로 백업디스크로 백업

차후 별도로 테이프로 백업차후 별도로 테이프로 백업 테이프로 직접 병렬 백업테이프로 직접 병렬 백업 전통적인 백업 기법을 사용하면 모든 경웨 전통적인 백업 기법을 사용하면 모든 경웨

상당량의 스페이스와 시간을 필요로 함상당량의 스페이스와 시간을 필요로 함

Page 35: 대용량 데이터베이스 구축 및 관리 팁

Split-Mirror Backup / Split-Mirror Backup / RestoreRestore High AvailabilityHigh Availability 에 유용에 유용 대개 수초 내에 데이터베이스 백업 완료대개 수초 내에 데이터베이스 백업 완료 복구도 신속복구도 신속 Standard SQL Server Standard SQL Server 백업 및 복구 기법에 백업 및 복구 기법에

비해 훨씬 신속하게 비해 훨씬 신속하게 secondary server secondary server 구축 구축 가능가능

Page 36: 대용량 데이터베이스 구축 및 관리 팁

대량 데이터 로딩대량 데이터 로딩 SQL ServerSQL Server 로의 데이터 로딩로의 데이터 로딩

데이터 변환이 필요한 경우에만 데이터 변환이 필요한 경우에만 DTSDTS 사용사용 성능 이슈가 발생할 수 있음성능 이슈가 발생할 수 있음 SQL SQL 외부에서 변환하는 것을 고려 요망외부에서 변환하는 것을 고려 요망

그 이외의 경우에는 그 이외의 경우에는 bulk loadbulk load 를 사용를 사용 8-8- 웨이의 경우에 초당 웨이의 경우에 초당 5050 만건의 레코드를 만건의 레코드를 처리할 수 있음처리할 수 있음

고객사들의 경우에 일일 고객사들의 경우에 일일 1010억건 처리하고 있음억건 처리하고 있음 프로세서가 많아지면 선형적으로 처리 능력이 프로세서가 많아지면 선형적으로 처리 능력이

향상됨향상됨

Page 37: 대용량 데이터베이스 구축 및 관리 팁

대량 데이터 로딩대량 데이터 로딩VLDB VLDB 기법기법 빈 테이블로의 초기 로딩빈 테이블로의 초기 로딩

데이터 로딩데이터 로딩 인덱스가 없는 상태에서 로딩인덱스가 없는 상태에서 로딩 BULK INSERT BULK INSERT 사용사용 데이터 파일을 분할하여 병렬 로드데이터 파일을 분할하여 병렬 로드 CPUCPU 당 하나의 로드 스트림당 하나의 로드 스트림 Bulk_Logged (Bulk_Logged ( 또는 가능한 경우 또는 가능한 경우 Simple) Simple)

복구 모델복구 모델 TABLOCK TABLOCK 옵션 사용옵션 사용

인덱스 생성인덱스 생성 원하는 복구 모델로 전환원하는 복구 모델로 전환 백업 수행백업 수행

Page 38: 대용량 데이터베이스 구축 및 관리 팁

데이터가 있는 테이블에 대한 로딩데이터가 있는 테이블에 대한 로딩 인덱스가 있는 상태에서 데이터 로드인덱스가 있는 상태에서 데이터 로드 성능과 성능과 concurrency concurrency 요건에 따라 요건에 따라 locking locking

단위를 결정단위를 결정 복구 모델 변경복구 모델 변경

Full Full Bulk_Logged Bulk_Logged

Point-in-time recoveryPoint-in-time recovery 가 필요한 가 필요한 경우가 아니라면 경우가 아니라면

Simple (Simple ( 변경 불필요변경 불필요 ))

대량 데이터 로딩대량 데이터 로딩VLDB VLDB 기법기법

Page 39: 대용량 데이터베이스 구축 및 관리 팁

Partitioned ViewPartitioned View 가장 신속한 로딩 방법가장 신속한 로딩 방법 로드 스크립트가 복잡로드 스크립트가 복잡

대량 데이터 로딩대량 데이터 로딩VLDB VLDB 기법기법

Page 40: 대용량 데이터베이스 구축 및 관리 팁

요약요약 77X24 X24 시스템은 이제 표준이 되었다시스템은 이제 표준이 되었다 . . 고가용 시스템의 고가용 시스템의

구축에 적절한 기술의 적용구축에 적절한 기술의 적용 , , 관련되는 모든 사람들의 관련되는 모든 사람들의 노력이 필요하다노력이 필요하다 ..

오늘날 오늘날 SQL ServerSQL Server 를 사용하여 를 사용하여 VLDB VLDB 시스템을 시스템을 구축하는 것이 가능할 뿐 아니라구축하는 것이 가능할 뿐 아니라 , , 진행되고 있다진행되고 있다 ..

VLDBVLDB 의 경우에는 의 경우에는 auto-tuning, auto configurationauto-tuning, auto configuration 에 에 의존해서는 안 되며의존해서는 안 되며 , , 특성과 요구 사항을 분석하여 특성과 요구 사항을 분석하여 적절한 대응이 따라야 한다적절한 대응이 따라야 한다 ..

대용량 시스템의 성공적인 구축 및 효율적인 관리를 대용량 시스템의 성공적인 구축 및 효율적인 관리를 위해서는 경험과 노하우위해서는 경험과 노하우 , , 그리고 그를 바탕으로 한 그리고 그를 바탕으로 한 전략이 필요하다전략이 필요하다 ..