💾DataBase/RDBMS

[MSSQL] 기존 DB에 새로운 파일 그룹 생성 및 파일 생성

뉴발자 2024. 1. 19.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그림 1-1. MSSQL

 

 

파일 그룹

구성

논리적 관점으로 데이터베이스에는 PRIMARY라는 하나의 기본 파일 그룹이 있고 그 안에 하나의 데이터 파일이 있다.

 

그리고 트랜잭션 로그 파일도 포함하고 있지만, 파일 그룹과는 관련이 없다.

 

즉, 파일 2개와 그룹 1개인 최소한의 구조로 구성되고, 기본적인 파일 그룹 PRIMARY의 이름은 변경 및 제거할 수 없다.

 

물리적인 관점에서 본다면 생성된 데이터베이스는 하나의 하드디스크에 데이터 파일과 트랜잭션 로그파일로 구성된다.

 

사용 이유

데이터베이스에 동시다발적으로 데이터가 대규모로 입력되는 상황이 발생한다고 가정해본다.

 

데이터베이스에서 하나의 디스크로 동시에 접근한다면 성능이 저하될 수 밖에 없다.

 

이때 파일 그룹을 사용하면 데이터를 분산시켜 성능을 향상시킬 수 있다.

 

권장 사항

하나의 그룹에 여러 개의 데이터 파일을 사용하는 것 보다는 파일을 별도의 그룹으로 분리하여 관리하는 것을 권장한다.

 

분리된 그룹의 파일을 서로 다른 디스크에 배치한다면 디스크의 입출력 속도가 향상되고 SQL Server의 성능도 향상된다.

 

더 자세한 파일 그룹 권장 사항은 공식 홈페이지에서 확인 가능하다.

https://learn.microsoft.com/ko-kr/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-ver16

 

데이터베이스 파일 및 파일 그룹 - SQL Server

데이터베이스 파일 및 할당 및 관리 목적으로 SQL Server에서 파일 그룹을 만드는 방법에 대해 알아봅니다. 예제, 규칙, 권장 사항을 살펴봅니다.

learn.microsoft.com

 

 

사용 예시

A라는 테이블은 PRIMARY 파일 그룹에 생성하고, 인덱스는 SECONDARY 파일 그룹에 생성한다면, 이 테이블을 검색할 때 성능이 향상 된다.

 

테이블 검색 시에 대개 인덱스도 동시에 접근하게 되므로, 테이블과 인덱스를 서로 다른 파일에 저장했을 경우에는 서로 다른 디스크에 동시에 접근하게 되는 효과를 내게 되기 때문이다.

 

 

DB 및 파일 그룹 생성

다음은 MSSQL 공식 문서에 나와있는 예제 SQL 쿼리이다.

 

'MyDB'라는 데이터베이스를 생성하고 'MyDB_FG1'라는 파일 그룹을 생성한 후 기본 파일 그룹으로 설정한다.

USE master;
GO
-- Create the database with the default data
-- filegroup, filestream filegroup and a log file. Specify the
-- growth increment and the max size for the
-- primary data file.
CREATE DATABASE MyDB
ON PRIMARY
  ( NAME='MyDB_Primary',
    FILENAME=
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf',
    SIZE=4MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
FILEGROUP MyDB_FG1
  ( NAME = 'MyDB_FG1_Dat1',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
  ( NAME = 'MyDB_FG1_Dat2',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM
  ( NAME = 'MyDB_FG_FS',
    FILENAME = 'c:\Data\filestream1')
LOG ON
  ( NAME='MyDB_log',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf',
    SIZE=1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB);
GO
ALTER DATABASE MyDB 
  MODIFY FILEGROUP MyDB_FG1 DEFAULT;
GO

-- Create a table in the user-defined filegroup.
USE MyDB;
CREATE TABLE MyTable
  ( cola int PRIMARY KEY,
    colb char(8) )
ON MyDB_FG1;
GO

-- Create a table in the filestream filegroup
CREATE TABLE MyFSTable
(
	cola int PRIMARY KEY,
  colb VARBINARY(MAX) FILESTREAM NULL
)
GO

 

 

테이블 생성 시 파일 그룹을 별도로 지정하고 싶다면 다음의 쿼리를 사용하면 된다.

CREATE TABLE 테이블명 (
	id int PRIMARY KEY,
)
ON 파일 그룹명;

 

 

생성한 테이블에 지정된 파일 그룹 확인 시 다음의 쿼리를 사용하면 된다.

sp_help 테이블명;

 

 

참고 사이트

https://learn.microsoft.com/ko-kr/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-ver16

 

데이터베이스 파일 및 파일 그룹 - SQL Server

데이터베이스 파일 및 할당 및 관리 목적으로 SQL Server에서 파일 그룹을 만드는 방법에 대해 알아봅니다. 예제, 규칙, 권장 사항을 살펴봅니다.

learn.microsoft.com

 

https://mozi.tistory.com/293

 

[MsSQL] 파일그룹이란?

MS-SQL 에는 파일 그룹이라는 개념이 있습니다. 논리적인 관점으로 특정 데이터베이스에는 PRIMARY 라는 하나의 기본 그룹이 있고 그 안에 하나의 데이터 파일이 있습니다.그리고 트랜잭션 로그 파

mozi.tistory.com

 

 

 

 

 

 

 

 

 

 

728x90

댓글