SQL Server 데이터베이스 파티셔닝
데이터베이스 테이블 파티셔닝이란 무엇입니까?
기본적으로 테이블의 데이터는 Primary라는 하나의 파일 그룹에 있습니다. 파티셔닝을 사용하면 큰 테이블을 데이터베이스의 둘 이상의 파일 그룹에 분산될 수 있는 단위로 나누고 테이블에서 대량의 데이터를 빠르게 로드 및 제거할 수 있는 방법을 제공할 수 있습니다. 더 작은 단위로 분할하면 검색할 데이터가 적기 때문에 데이터의 일부에만 액세스하는 쿼리가 더 빠르게 실행될 수 있습니다.
파티셔닝의 이점
작업이 전체 테이블이 아닌 데이터의 하위 집합만을 대상으로 하기 때문에 유지 관리 작업을 신속하게 수행합니다.
데이터 컬렉션의 무결성을 유지하면서 데이터 하위 집합을 빠르고 효율적으로 전송하거나 액세스할 수 있습니다.
전.
테이블에 데이터 로드(ETL)
쿼리가 전체 테이블이 아닌 특정 파티션 또는 파티션만 검색할 수 있으므로 쿼리가 향상될 수 있습니다.
파티션의 종류
테이블은 열을 기준으로 여러 테이블로 나뉩니다.
테이블은 행 수가 적은 동일한 수의 열을 가진 여러 개로 나뉩니다.
SQL 서버에서 수평 분할을 만듭니다.
CREATE DATABASE PartitionTest
GO
USE PartitionTest
CREATE TABLE Orders
(
OrderID INT IDENTITY NOT NULL,
OrderDate DATETIME NOT NULL ,
OrderMonth INT NOT NULL
);
생성Partition function . 파티션 수를 정의합니다. 파티션을 만들고 채우기 위해 파티션 함수에서 사용할 테이블 또는 인덱스의 열( Partition Column )이 필요합니다. 분할 열의 각 값은 분할 값을 반환하는 분할 함수에 대한 입력입니다.
분할 열(OrderMonth)
CREATE PARTITION FUNCTION PartitionByMonth (INT)
AS RANGE RIGHT
FOR VALUES (202201, 202202, 202203);
--Create File Group
ALTER DATABASE PartitionTest ADD FILEGROUP FGJan
GO
ALTER DATABASE PartitionTest ADD FILEGROUP FGFeb
GO
ALTER DATABASE PartitionTest ADD FILEGROUP FGMarch
GO
--Create files and attach to File Group
ALTER DATABASE PartitionTest
ADD FILE
(
NAME = [File_Month_Jan],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\File_Month_Jan.ndf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10 MB
) TO FILEGROUP FGJan
ALTER DATABASE PartitionTest
ADD FILE
(
NAME = [File_Month_Feb],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\File_Month_Feb.ndf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10 MB
) TO FILEGROUP FGFeb
ALTER DATABASE PartitionTest
ADD FILE
(
NAME = [File_Month_March],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\File_Month_March.ndf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10 MB
) TO FILEGROUP FGMarch
--Create the partition scheme
CREATE PARTITION SCHEME OrdersPS
AS PARTITION PartitionByMonth
TO ([Primary], FGJan, FGFeb, FGMarch);
여기에서 기본 기본 파일 그룹을 포함한 모든 파일 그룹을 언급해야 합니다.
사용 가능한 파일 그룹을 가져오기 위한 쿼리
SELECT name AS AvailableFilegroups
FROM sys.filegroups
WHERE type = 'FG'
--Create Index
CREATE CLUSTERED INDEX IX_Orders ON [dbo]. [Orders]
(
[OrderMonth]
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON OrdersPS(OrderMonth)
SELECT p.partition_number AS PartitionNumber,
f.name AS PartitionFilegroup,
p.rows AS NumberOfRows
FROM sys.partitions p
JOIN sys.destination_data_spaces dds ON p.partition_number = dds.destination_id
JOIN sys.filegroups f ON dds.data_space_id = f.data_space_id
WHERE OBJECT_NAME(OBJECT_ID) = 'Orders'
| 파티션 파일 그룹 | 파티션 번호 | NumberOfRows |
| ------------------ | --------------- | ------------ |
| 기본 | 1 | 0 |
| FG1월 | 2 | 0 |
| FGFeb | 3 | 0 |
| FGMarch | 4 | 0 |
테스트 데이터 삽입
INSERT INTO PartitionTest.dbo.Orders (OrderDate, OrderMonth)
VALUES (N'2022-01-18 17:25:05.000', 202201);
INSERT INTO PartitionTest.dbo.Orders (OrderDate, OrderMonth)
VALUES (N'2022-02-18 17:25:39.000', 202202);
INSERT INTO PartitionTest.dbo.Orders (OrderDate, OrderMonth)
VALUES (N'2022-03-18 17:25:58.000', 202203);
행이 각 파일 그룹에 분산되어 있는 것을 볼 수 있습니다.
| 파티션 파일 그룹 | 파티션 번호 | NumberOfRows |
| ------------------ | --------------- | ------------ |
| 기본 | 1 | 0 |
| FG1월 | 2 | 1 |
| FGFeb | 3 | 1 |
| FGMarch | 4 | 1 |
쿼리 완료
CREATE DATABASE PartitionTest
GO
USE PartitionTest
CREATE TABLE Orders
(
OrderID INT IDENTITY NOT NULL,
OrderDate DATETIME NOT NULL,
OrderMonth INT NOT NULL
);
CREATE PARTITION FUNCTION PartitionByMonth (INT)
AS RANGE RIGHT
FOR VALUES (202201, 202202, 202203);
--Create File Group
ALTER DATABASE PartitionTest ADD FILEGROUP FGJan
GO
ALTER DATABASE PartitionTest ADD FILEGROUP FGFeb
GO
ALTER DATABASE PartitionTest ADD FILEGROUP FGMarch
GO
--Create files and attach to File Group
ALTER DATABASE PartitionTest
ADD FILE
(
NAME = [File_Month_Jan],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\File_Month_Jan.ndf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10 MB
) TO FILEGROUP FGJan
ALTER DATABASE PartitionTest
ADD FILE
(
NAME = [File_Month_Feb],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\File_Month_Feb.ndf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10 MB
) TO FILEGROUP FGFeb
ALTER DATABASE PartitionTest
ADD FILE
(
NAME = [File_Month_March],
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\File_Month_March.ndf',
SIZE = 5 MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10 MB
) TO FILEGROUP FGMarch
GO
--Create the partition scheme
CREATE PARTITION SCHEME OrdersPS
AS PARTITION PartitionByMonth
TO ([Primary],FGJan, FGFeb, FGMarch);
--Create Index
CREATE CLUSTERED INDEX IX_Orders ON [dbo].[Orders]
(
[OrderMonth]
) WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON OrdersPS(OrderMonth)
-- Insert Test Data
INSERT INTO PartitionTest.dbo.Orders (OrderDate, OrderMonth)
VALUES (N'2022-01-18 17:25:05.000', 202201);
INSERT INTO PartitionTest.dbo.Orders (OrderDate, OrderMonth)
VALUES (N'2022-02-18 17:25:39.000', 202202);
INSERT INTO PartitionTest.dbo.Orders (OrderDate, OrderMonth)
VALUES (N'2022-03-18 17:25:58.000', 202203);
-- View File Groups
SELECT name AS AvailableFilegroups
FROM sys.filegroups
WHERE type = 'FG'
-- View Row counts of Partitions
SELECT p.partition_number AS PartitionNumber,
f.name AS PartitionFilegroup,
p.rows AS NumberOfRows
FROM sys.partitions p
JOIN sys.destination_data_spaces dds ON p.partition_number = dds.destination_id
JOIN sys.filegroups f ON dds.data_space_id = f.data_space_id
WHERE OBJECT_NAME(OBJECT_ID) = 'Orders'
참조
Reference
이 문제에 관하여(SQL Server 데이터베이스 파티셔닝), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeevanvj/sql-server-database-partitioning-23jo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)