Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Di chuyển bảng máy chủ SQL sang nhóm tệp khác nhau

Giới thiệu

Một bảng là một cấu trúc logic. Khi bạn tạo một bảng, bạn thường sẽ không quan tâm đến ổ đĩa nào mà nó nằm trên lớp lưu trữ. Tuy nhiên, nếu bạn là quản trị viên cơ sở dữ liệu, kiến ​​thức này có thể trở nên cần thiết nếu bạn cần di chuyển các phần cơ sở dữ liệu nhất định sang dung lượng hoặc bộ lưu trữ thay thế. Sau đó, bạn có thể muốn các bảng xác định nằm trên một ổ đĩa hoặc bộ đĩa cụ thể.

Nhóm tệp trong SQL Server cung cấp lớp trừu tượng cho phép chúng tôi kiểm soát vị trí thực tế của các cấu trúc lôgic của chúng tôi - bảng, chỉ mục, v.v.

Nhóm tệp

Nhóm tệp là một cấu trúc logic để nhóm các tệp dữ liệu trong SQL Server. Nếu chúng tôi tạo một nhóm tệp và liên kết nó với một tập hợp các tệp dữ liệu, thì bất kỳ đối tượng logic nào được tạo trên nhóm tệp đó sẽ được đặt trên thực tế trên tập hợp các tệp vật lý đó.

Mục đích chính của việc phân nhóm tệp vật lý như vậy là phân bổ dữ liệu và vị trí dữ liệu. Ví dụ:chúng tôi muốn dữ liệu giao dịch của mình được lưu trữ trên một bộ đĩa nhanh. Đồng thời, chúng tôi cần dữ liệu lịch sử được lưu trữ trên một bộ đĩa khác ít tốn kém hơn. Trong một kịch bản như vậy, chúng tôi sẽ tạo ra Trần trên nhóm tệp TXN và TranHist trên một nhóm tệp HIST khác. Tiếp theo trong bài viết này, chúng ta sẽ xem điều này có nghĩa như thế nào khi có dữ liệu trên các đĩa khác nhau.

Tạo nhóm tệp

Cú pháp để tạo nhóm tệp được hiển thị trong Liệt kê 1 . Lưu ý :Bối cảnh cơ sở dữ liệu là chính cơ sở dữ liệu. Khi phát hành các câu lệnh, chúng tôi đang sửa đổi cơ sở dữ liệu DB2 bằng cách thêm các nhóm tệp mới vào nó. Về cơ bản, các nhóm tệp này chỉ là cấu trúc logic vào thời điểm này. Chúng không chứa bất kỳ dữ liệu nào.

-- Listing 1: Creating File Groups
USE [master]
GO
ALTER DATABASE [DB2] ADD FILEGROUP [HIST]
GO
ALTER DATABASE [DB2] ADD FILEGROUP [TXN]
GO

Thêm tệp vào nhóm tệp

Bước tiếp theo là thêm tệp vào từng nhóm tệp. Chúng tôi có thể thêm nhiều hơn một tệp, nhưng chúng tôi giữ cho nó đơn giản cho mục đích trình diễn. Lưu ý rằng mỗi tệp hoàn toàn nằm trên một ổ đĩa khác nhau và cú pháp cho phép chúng tôi chỉ định nhóm tệp dự định.

-- Listing 2: Adding Files to Filegroups
USE [master]
GO
ALTER DATABASE [DB2] ADD FILE ( NAME = N'DB2_HIST_01', FILENAME = N'E:\MSSQL\Data\DB2_HIST_01.ndf' , SIZE = 102400KB , FILEGROWTH = 131072KB ) TO FILEGROUP [HIST]
GO
ALTER DATABASE [DB2] ADD FILE ( NAME = N'DB2_TXN_01', FILENAME = N'C:\MSSQL\Data\DB2_TXN_01.ndf' , SIZE = 102400KB , FILEGROWTH = 131072KB ) TO FILEGROUP [TXN]
GO

Tạo bảng thành nhóm tệp

Ở đây chúng tôi đảm bảo các bảng nằm trên các đĩa mong muốn. Cú pháp tạo bảng cho phép chúng tôi chỉ định nhóm tệp mà chúng tôi muốn.

-- Listing 3: Creating a table on Filegroups TXN and HIST
USE [DB2]
GO

CREATE TABLE [dbo].[tran](
	[TranID] [int] NULL
	,TranTime [datetime]
	,TranAmt [money]
) ON [TXN]
GO

CREATE CLUSTERED INDEX [IX_Clustered01] ON [dbo].[tran]
(
	[TranID] ASC
) ON [TXN]
GO


CREATE TABLE [dbo].[tranhist](
	[TranID] [int] NULL
	,TranTime [datetime]
	,TranAmt [money]
) ON [HIST]
GO

Lùi lại một bước, chúng tôi lưu ý rằng chúng tôi hiện đã đạt được những điều sau:

  1. Đã tạo hai nhóm tệp.
  2. Đã xác định tệp dữ liệu (và đĩa) được liên kết với từng nhóm tệp.
  3. Đã xác định các bảng được liên kết với từng nhóm tệp.

Về bản chất, nhóm tệp là lớp trừu tượng .

Kiểm tra Nhóm Tệp nào mà Bàn của Chúng tôi đặt trên

Để kiểm tra xem mỗi bảng thuộc về nhóm tệp nào, chúng tôi sẽ thực thi mã trong Liệt kê 4. Chúng tôi sử dụng hai chế độ xem danh mục hệ thống chính: sys.indexes sys.data_spaces . sys.data_spaces chế độ xem danh mục chứa thông tin về nhóm tệp và phân vùng cũng như cấu trúc logic chính nơi các bảng và chỉ mục được lưu trữ.

Lưu ý:Chúng tôi không sử dụng sys.tables . Máy chủ SQL liên kết các chỉ mục trong một bảng với không gian dữ liệu thay vì bảng, như chúng ta có thể nghĩ trực quan.

-- Listing 4: Check the filegroup of an index or table

USE DB2
GO

select object_name(i.object_id) [Table Name]
, i.name [Index Name]
, i.type_desc [Index Type]
, d.name [FileGroup]
from sys.indexes i inner join sys.data_spaces d
on i.data_space_id=d.data_space_id
where d.name<>'PRIMARY'

Đầu ra của truy vấn trong Liệt kê 4 hiển thị hai bảng mà chúng tôi vừa tạo. Lưu ý rằng tranhist bảng không có chỉ mục. Tuy nhiên, nó vẫn hiển thị trong tập kết quả, được xác định là đống .

A đống là bảng không có chỉ mục phân cụm xác định dữ liệu thứ tự được lưu trữ vật lý trong bảng. Chỉ có thể có một chỉ mục được nhóm trong một bảng.

Lập bảng Trần

Bây giờ, chúng tôi phải thêm một vài bản ghi vào tran bảng sử dụng mã sau:

-- Listing 5: Populate the Tran Table

USE DB2
GO
SELECT * FROM [tran];

INSERT INTO [tran] VALUES (1, GETDATE(),12.00);
INSERT INTO [tran] VALUES (2, GETDATE(),13.00);
INSERT INTO [tran] VALUES (3, GETDATE(),15.40);
INSERT INTO [tran] VALUES (4, GETDATE(),16.20);
INSERT INTO [tran] VALUES (5, GETDATE(),11.10);

SELECT * FROM [tran];

Di chuyển bảng sang nhóm tệp khác

Để di chuyển tran bảng sang một nhóm tệp khác, chúng tôi chỉ cần xây dựng lại chỉ mục được nhóm và chỉ định nhóm tệp mới trong khi thực hiện xây dựng lại. Liệt kê 5 cho thấy cách tiếp cận này.

Chúng tôi thực hiện hai bước:đầu tiên, giảm chỉ mục, sau đó, tạo lại nó. Ở giữa, chúng tôi kiểm tra để xác nhận rằng dữ liệu và vị trí của hai bảng chúng tôi đã tạo trước đó vẫn còn nguyên vẹn.

-- Listing 6: Check what filegroup an index or table belongs to

USE [DB2]
GO

DROP INDEX [IX_Clustered01] ON [dbo].[tran] WITH ( ONLINE = OFF )
GO

CREATE CLUSTERED INDEX [IX_Clustered01] ON [dbo].[tran]
(
	[TranID] ASC
) ON [HIST]
GO

Khi loại bỏ chỉ mục được nhóm khỏi tran , chúng tôi đã chuyển đổi nó thành một heap :

Khi chúng tôi tạo lại chỉ mục được phân nhóm, nó cũng được chỉ ra trong đầu ra của Liệt kê 4.

Bây giờ chúng tôi có tran trên nhóm tệp HIST.

Kết luận

Bài viết này đã trình bày mối quan hệ giữa các bảng, chỉ mục, tệp và nhóm tệp về mặt lưu trữ dữ liệu SQL Server của chúng tôi. Chúng tôi cũng đã giải thích việc di chuyển một bảng từ nhóm tệp này sang nhóm tệp khác bằng cách tạo lại chỉ mục được phân nhóm.

Kỹ năng này sẽ hữu ích khi bạn cần di chuyển dữ liệu sang bộ nhớ mới (đĩa nhanh hơn hoặc đĩa lưu trữ chậm hơn). Trong các tình huống nâng cao hơn, bạn có thể sử dụng nhóm tệp để quản lý vòng đời dữ liệu bằng cách triển khai phân vùng bảng.

Tài liệu tham khảo

  1. Tệp Cơ sở dữ liệu và Nhóm tệp
  2. Chuyển ra khỏi các phân vùng trong bảng - Hướng dẫn sử dụng

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tập lệnh để lưu dữ liệu varbinary vào đĩa

  2. Truy vấn đơn giản để lấy giá trị tối đa cho mỗi ID

  3. Cách chỉnh sửa tùy chọn máy chủ được liên kết bằng T-SQL

  4. Sao lưu cơ sở dữ liệu trong SQL Server 2017

  5. Chỉ chèn một hàng nếu nó chưa có ở đó