Chuyển đến nội dung chính

SQL Server: Filegroup

Filegroup là cách gọi cho một nhóm data file trong SQL Server.
Filegroup không phải là nơi trực tiếp chứa dữ liệu mà nó chỉ là định nghĩa ở mức logic về các data file nằm trong nó, như:
- Logical Name của data file.
- File Type của data file (Rows Data, Log, FILESTREAM Data).
- Dung lượng khởi tạo (Initial Size) của data file.
- Giá trị tự tăng trưởng (Autogrowth) / Giá trị giới hạn (Maxsize) của data file.
- Đường dẫn chứa data file (Path).
- Tên data file (File Name).
USE [AdventureWorks]
GO

-- Lấy thông tin filegroup của Database [AdventureWorks]
SELECT * FROM sys.filegroups

-- Lấy thông tin data file
SELECT * FROM sys.database_files





Filegroup trong SQL Server và Tablespace trong Oracle là cái khái niệm tương đối giống nhau, chúng đều dùng để chứa các data file của Database.
Filegroup mặc định của SQL Server có tên gọi là PRIMARY, đây là Filegroup được tạo cùng với khi bạn tạo ra một Database. Filegroup mặc định này có chứa một data file (.mdf).

Như kết quả ở query trên, ta có thể thấy ID của Filegroup PRIMARY là 1. Filegroup này có chứa một data file với file_id = 1.

Các objects của Database (Tables, Indexes ...) khi được khởi tạo sẽ được lưu vào Filegroup mặc định (nếu không dùng mệnh đề "ON Filegroup_Name" để chỉ định nơi chứa các object).
Muốn chỉ định Filegroup sẽ chứa object, cần phải sử dụng mệnh đề ON:

CREATE TABLE dbo.Table_name (Column_1 INT, Column_2 NVARCHAR(10) NOT NULL) ON FILEGROUP_DATA_1
GO

CREATE INDEX IX_Table_name_Column_1 ON dbo.Table_name (Column_1) ON FILEGROUP_IDX_1
GO

Ở ví dụ trên, chúng ta đã tạo một table ở trên Filegroup tên là FILEGROUP_DATA_1 và một index ở trên Filegroup tên là FILEGROUP_IDX_1

Trong mọi trường hợp, người dùng nên tạo thêm các Filegroup để lưu trữ dữ liệu của Database (không nên sử dụng Filegroup PRIMARY mặc định để lưu trữ dữ liệu).
Lý do là vì PRIMARY Filegroup là nơi lưu trữ các meta data của Database, các thông tin định nghĩa như: bảng, user, các thủ tục... nếu lưu trữ chung dữ liệu của Database vào Filegroup PRIMARY sẽ có thể xảy ra xung đột về mặt I/O giữa dữ liệu và meta data.

Để tạo thêm Filegroup và các data file trong Filegroup, người dùng có thể sử dụng đoạn lệnh sau:
-- Tạo mới filegroup
ALTER DATABASE [AdventureWorks] ADD FILEGROUP FILEGROUP_DATA_1
ALTER DATABASE [AdventureWorks] ADD FILEGROUP FILEGROUP_IDX_1

-- Thêm data file vào các Filegroup
ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'FILEGROUP_DATA_01_01', FILENAME = N'F:\SQL_Data\FILEGROUP_DATA_01_01.ndf') TO FILEGROUP FILEGROUP_DATA_1
ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'FILEGROUP_DATA_01_02', FILENAME = N'G:\SQL_Data\FILEGROUP_DATA_01_02.ndf') TO FILEGROUP FILEGROUP_DATA_1
ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'FILEGROUP_IDX_01_01', FILENAME = N'F:\SQL_Data\FILEGROUP_IDX_01_01.ndf') TO FILEGROUP FILEGROUP_IDX_1

Mỗi Filegroup có thể chứa nhiều hơn 1 data file.
Như ở ví dụ trên, Filegroup FILEGROUP_DATA_1 chứa 2 data file, hai data file này được đặt ở trên 2 Volumn khác nhau (F và G). Khi lưu trữ dữ liệu vào data file, nếu một Filegroup có chứa nhiều hơn 1 data file, SQL sẽ dùng cơ chế Round-Robin để lần lượt ghi dữ liệu vào các data file. Do vậy, ta có thể nhìn thấy dung lượng của các data file này cùng tăng lên.

Trong thực tế, DBA thường tạo nhiều Filegroup cho một Database. Mỗi Filegroup sẽ dùng để chứa các loại object khác nhau. Ví dụ:
- Filegroup FILEGROUP_DATA_1 chứa các bảng dữ liêu của Database.
- Filegroup FILEGROUP_LOG_1 chứa các bảng log của Database.
- Filegroup FILEGROUP_IDX_1 chứa các index của các bảng dữ liệu.
- FilegroupFILEGROUP_LOG_IDX_1 chứa các index của các bảng log.
Việc phân chia các object của Database vào các Filegroup khác nhau sẽ làm giảm được hiện tượng phân mảnh dữ liệu trong các data file, đồng thời có thể tối ưu được I/O của các ổ cứng khi truy suất dữ liệu.




Ở hình trên, ta có thể thấy việc đọc và ghi dữ liệu vào Database SQL_Lab được chia ra xử lý ở 2 Filegroup độc lập, trên 2 Volumn khác nhau (D và F).

Việc phân chia thành nhiều Filegroup cũng giúp cho việc quản trị Database được dễ dàng hơn:
- Ta có thể dễ dàng chuyển một phần Database sang ổ cứng khác bằng cách chuyển một hoặc vài Filegroup.
- Ta có thể thực hiện backup riêng lẻ từng Filegroup thay vì phải backup cả một Database lớn.
...

Nhận xét

  1. Bài viết hay quá :) mong rằng sẽ có nhiều bài viết hay hơn nữa.

    Trả lờiXóa
  2. Cảm ơn bài viết của ad rất nhiều :D!!!

    Trả lờiXóa
  3. Nhận xét này đã bị quản trị viên blog xóa.

    Trả lờiXóa

Đăng nhận xét

POPULAR POSTS

SQL 2016 - Tăng hiệu suất bảng tạm (temporary table) và biến bảng (table variable) sử dụng tính năng tối ưu bộ nhớ (memory optimization)

Tăng hiệu suất bảng tạm (temporary table) và biến bảng (table variable) sử dụng tính năng tối ưu bộ nhớ (memory optimization) Nếu Database của bạn sử dụng các bảng tạm (temporary table), các biến bảng (table variable) hoặc các tham số có giá trị bảng (table-valued parameters hay còn được gọi là TVP), bạn hãy cân nhắc việc chuyển sang sử dụng tính năng "bảng tối ưu bộ nhớ" (memory-optimized table). Bạn đừng lo lắng về việc phải thay đổi quá nhiều phần code của bạn, việc thay đổi sẽ là rất ít. Bài viết này sẽ đề cập tới: Các kịch bản về sự chuyển đổi sang bảng In-memory. Các kỹ thuật để thực hiện chuyển đổi sang bảng In-memory. Các điều kiện bắt buộc phải thực hiện trước khi chuyển đổi sang bảng In-memory. Một ví dụ để cho thấy các lợi ích của tính năng tối ưu bộ nhớ (memory optimization). A. Khái niệm cơ bản của các biến bảng dùng tính năng tối ưu hóa bộ nhớ Trước đây, khi bạn tạo một bảng tạm ( #Table hoặc ##Table ) hoặc một biến bảng ( @Table ), các bả

Tuning Advisor: Một công cụ tốt để tìm kiếm các Index bị thiếu (Missing Indexes)

Trong nhiều trường hợp, các Index của SQL Server là những giải pháp tuyệt vời để giải quyết các vấn đề về hiệu năng của hệ thống. Thêm vào đó, các giải pháp này thường rất rẻ và có khả năng cải thiện hiệu năng một cách kỳ diệu. Trong bài viết này, tôi muốn chia sẻ một ví dụ về cách sử dụng SQL Server Turning Advisor, đây là một công cụ đi kèm với bộ cài SQL Server. Để sử dụng được công cụ Turning Advisor chúng ta sẽ cần sử dụng SQL Server Profiler để thu thập thông tin. Database Engine Tuning Advisor Turning Advisor là một công cụ được sử dụng để tìm ra các khuyến cáo về việc áp dụng các index, statistic và partition trong SQL Server. Các khuyến cáo này dựa trên thông tin từ các tập lệnh sql hoặc từ một file xml hoặc từ một file Profile trace. Công cụ này phân tích các câu truy vấn dữ liệu và đưa ra các khuyến cáo về các index, statistic và partition cho các bảng và các views trong cơ sở dữ liệu của bạn. Turning Advisor được đính kèm với mọi bản SQL Server trừ phiên bản Express.