먼저 쿼리 하나를 보겠습니다.
CREATE DATABASE [SampleDB]
ON PRIMARY -- Primary Group
( NAME = 'SampleDB_01', -- Primary Group 의 파일1
FILENAME = 'C:\Data\SampleDB_01.mdf',
SIZE = 5MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1MB ),
( NAME = 'SampleDB_02', -- Primary Group 의 파일2
FILENAME = 'D:\Data\SampleDB_02.mdf',
SIZE = 5MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1MB ),
FILEGROUP [SECONDARY] -- Secondary Group
( NAME = 'SampleDB_03', -- Secondary Group 의 파일1
FILENAME = 'E:\Data\SampleDB_03.mdf',
SIZE = 5MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1MB ),
( NAME = 'SampleDB_04', -- Secondary Group 의 파일2
FILENAME = 'F:\Data\SampleDB_04.mdf',
SIZE = 5MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1MB )
LOG ON -- Log 파일 ( Group 과 상관 없음 )
( NAME = 'SampleDB_log',
FILENAME = 'G:\Backup\SampleDB_log.ldf',
SIZE = 1MB,
MAXSIZE = 100MB,
FILEGROWTH = 10% )
위의 쿼리처럼 SQL Server 는 다수의 파일그룹과 하나의 파일그룹 내에 다수의 데이터파일을 지원합니다.
로그 파일은 파일 그룹 내에 속하지 않으므로 여기에서는 다루지 않을 예정입니다.
옵션의 의미도 설명하지 않습니다.
파일그룹에서 PRIMARY 그룹은 필수로 존재해야 합니다. (생략되는 경우 SQL Server 엔진이 생성합니다.)
이 후의 SECONDARY 그룹은 필요유무에 따라 생성 여부를 정할 수 있습니다.
참고로 이번 테스트의 경우는 각 파일별로 물리적으로 다른 디스크에 생성되었다고 가정하고 진행됩니다.
CREATE DATABASE [SampleDB] 만 작성한 경우
PRIMARY 그룹이 생성되고 해당 그룹에는 데이터를 저장할 수 있는 파일이 한 개 생성됩니다.
이 때 모든 옵션은 기본값을 사용하게 됩니다.
PRIMARY 그룹에 파일을 2개 생성한 경우
이번에는 PRIMARY 그룹에 파일이 2개 생성됩니다.
데이터를 저장할 때 내부 엔진은 RAID 방식으로 해당 데이터를 파일에 공평하게 나눠서 저장하게 됩니다.
이 공평하게는, 파일 용량에 비례해서 데이터의 양을 나눠서 저장한다는 의미입니다.
만약 SampleDB_01 이 10G, SampleDB_02 가 5G 이고 들어오는 데이터가 3G 라면 SampleDB_01 에는 2G, SampleDB_02 에는 1G 가 저장됩니다.
그러나 그룹이 한개밖에 없으므로 데이터 저장과 동시에 일어나는 인덱스에 대한 작업이 같은 파일을 사용하게 된다면 경합이 일어날 수 있습니다.
이 때 당연히 SQL Server의 성능은 느려지게 될 것입니다.
SECONDARY 그룹을 생성한 경우
이번에는 그룹이 2개로 늘었습니다.
각 그룹별로 RAID 방식으로 해당 데이터를 각 그룹에 속한 파일에 공평하게 나눠서 저장하게 됩니다.
이번에는 PRIMARY 그룹에는 데이터를, SECONDARY 그룹에는 인덱스를 저장하게 설정하였다고 가정합니다.
USE SampleDB
CREATE TABLE dbo.SampleDBTable (C1 INT) ON [PRIMARY];
CREATE INDEX SampleDBTable_IDX_C1 ON dbo.SampleDBTable (C1) ON [SECONDARY];
위에서 그룹은 한개만 사용했을 경우의 경합이 이번에는 발생하지 않게 됩니다.
'SQL Server > SQL Server 기타' 카테고리의 다른 글
[MSSQL] COLLATE 데이터 정렬. Korean_Wansung_CI_AS 및 각 옵션에 대한 설명 (0) | 2019.04.03 |
---|---|
[MSSQL] 사이즈가 큰 하나의 로그 파일 vs 사이즈가 작은 다수의 로그 파일. 어떤걸 선택할까? (0) | 2019.04.03 |
[MSSQL] CREATE TABLE AS SELECT 출력된 결과물로 테이블 생성하기 (0) | 2019.03.27 |
[MsSQL] sp_readerrorlog 와 xp_readerrorlog 의 차이점 (0) | 2019.03.20 |
[MsSQL] 파일그룹이란? (0) | 2019.03.18 |