本文介绍如何管理SQL数据库的内存优化文件组。内存优化文件组包含内存优化表和表变量。我写了两篇文章,解释了如何将基于磁盘的表迁移到内存优化的表。现在,我们将学习如何在SQL数据库中添加内存优化的文件组。我将在本文中介绍以下主题。
1.使用SQL Server management studio和T-SQL查询在SQL数据库中添加内存优化的文件组
2.在特定文件组中创建内存优化表
我正在使用SQL Server 2019和stackoverflow2010数据库。Stackoverflow数据库包含表。首先,让我们看看如何添加内存优化的文件组。
使用SSMS添加内存优化文件组
要添加内存优化的文件组,请打开SSMS并连接到SQL Server数据库引擎🡪 扩展数据库🡪 右键单击Stackoverflow2010并选择属性。

将打开名为“数据库属性”的对话框。在对话框中,选择“文件组”选项。在内存优化文件组部分,单击添加文件组。

将在文件组网格视图中创建一行。在网格视图的“名称”列中指定内存优化文件组的所需名称。

单击“确定”创建文件组。现在,我们必须向FG_MemoryOptimized_Users文件组添加一个数据文件。为此,单击“数据库属性”对话框中的“文件”,然后单击“添加”。

数据库文件网格视图中的一行,将添加一行。指定以下详细信息:
1.逻辑名称:指定内存优化文件组的所需逻辑名称
2.文件类型:在文件类型列中选择文件流数据
3.文件组:将自动检索文件组名称
4.路径:在“路径”列中,指定要存储内存优化表的位置
下面是数据库属性的文件pan的屏幕截图。

单击“确定”添加数据文件。现在,运行以下查询以填充内存优化文件组的详细信息。
SELECT [databasefile].NAME AS [FileName],
[filegroup].NAME AS [File_Group_Name],
[filegroup].type_desc,
physical_name [Data File Location],
size / 128 AS [Size_in_MB],
state_desc [State of FILE],
growth [Data file growth]
FROM sys.database_files [databasefile]
INNER JOIN sys.filegroups [filegroup]
ON [databasefile].data_space_id = [filegroup].data_space_id
查询输出

如上图所示,创建了文件组。您可以在D:\FG_memoryooptimized_Users\FG_ MemoryOptimized_user位置查看内存优化文件组的数据文件。

现在,让我们使用T-SQL查询在SQL数据库中创建一个内存优化的文件组。
使用T-SQL查询添加内存优化的文件组
我们可以使用ALTER DATABASE ADD FILEGROUP CONTAINS语句在现有SQL数据库中添加文件组。添加内存优化文件组的语法如下:
ALTER DATABASE <database_name> ADD FILEGROUP <file_group_name> CONTAINS MEMORY_OPTIMIZED_DATA
在语法中:
1.database_name:指定要在其中添加内存优化文件组的数据库名称
2.file_group_name:指定要添加到SQL数据库的所需文件组名称
3.包含:您可以指定要存储在文件组中的数据类型。我们希望添加内存优化数据,因此指定memory_optimized_data
在我们的例子中,我们正在Stackoverflow2010数据库中添加FG_MemoryOptimized_Posts。为此,请运行以下查询语句。
ALTER DATABASE [Stackoverflow2010] ADD FILEGROUP [FG_MemoryOptimized_Posts] CONTAINS MEMORY_OPTIMIZED_DATA
添加文件组后,让我们将数据文件添加到FG_MemoryOptimized_Posts文件组。在内存优化文件组中添加数据文件。要添加数据文件,我们可以使用ALTER DATABASE add datafile To FILEGROUP语句。添加数据文件的语法如下:
ALTER DATABASE <database_name> ADD FILE (NAME= <logical_file_name>, FILENAME=<Memory_Optimized_Filegroup_Location> ) TO FILEGROUP <FILE_GROUP_NAME>
在语法中,
1.database_name:指定要在其中添加内存优化文件组的数据库名称
2.file_group_name:指定要添加到数据库的所需文件组名称
3.添加文件:指定要添加到文件组的数据文件的详细信息。在添加文件关键字中,我们必须指定以下参数
-
Logical_file_name:指定文件组的所需名称
-
Memory_Optimized_Filegroup_Location:指定要存储内存优化数据的目录的位置
4.FILE_GROUP_NAME:指定要在其中添加数据文件的文件组的名称。必须在TO filegroup关键字之后指定文件组名称
在本例中,我们希望在FG_MemoryOptimized_Posts文件组中添加一个名为DF_memoryOptiminized_Posts的数据文件。要添加数据文件,请运行以下命令。
ALTER DATABASE [Stackoverflow2010] ADD FILE ( NAME = N'DF_MemoryOptimized_Posts', FILENAME = N'D:\FG_MemoryOptimized_Posts' ) TO FILEGROUP [FG_MemoryOptimized_Posts]
添加数据文件后,运行以下查询以查看文件组列表。
use StackOverflow2010
go
SELECT [databasefile].NAME AS [FileName],
[filegroup].NAME AS [File_Group_Name],
[filegroup].type_desc,
physical_name [Data File Location],
size / 128 AS [Size_in_MB],
state_desc [State of FILE],
growth [Data file growth]
FROM sys.database_files [databasefile]
INNER JOIN sys.filegroups [filegroup]
ON [databasefile].data_space_id = [filegroup].data_space_id
查询输出

如您所见,名为DF_memoryooptimized_Posts的数据文件已添加到FG_Memoryooptimated_post文件组中。
在内存优化文件组中创建表
现在,让我们创建一个名为的简单表。要在FG_memoryooptimized_Posts文件组中创建一个名称为tblArchivedPosts的表,创建表的查询如下。
CREATE TABLE [tblArchivedPosts]
(
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED,
[AcceptedAnswerId] [int] NULL,
[AnswerCount] [int] NULL,
[Body] [nvarchar](max) NOT NULL,
[ClosedDate] [datetime] NULL,
[CommentCount] [int] NULL,
[CommunityOwnedDate] [datetime] NULL,
[CreationDate] [datetime] NOT NULL,
[FavoriteCount] [int] NULL,
[LastActivityDate] [datetime] NOT NULL,
[LastEditDate] [datetime] NULL,
[LastEditorDisplayName] [nvarchar](40) NULL,
[LastEditorUserId] [int] NULL,
[OwnerUserId] [int] NULL INDEX IX_tblArchivedPosts_OwnerUserId NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
[ParentId] [int] NULL,
[PostTypeId] [int] NOT NULL,
[Score] [int] NOT NULL,
[Tags] [nvarchar](150) NULL,
[Title] [nvarchar](250) NULL,
[ViewCount] [int] NOT NULL
) WITH (MEMORY_OPTIMIZED=ON)
GO
查询成功执行后,让我们验证表是在FG_MemoryOptimized_Posts文件组中创建的。为此,运行以下查询
use StackOverflow2010
go
select t.object_id [Object ID], t.name [Table Name],f.name [Filegroup Name],durability_desc [Durability],f.type_desc [Filegroup Type] from
sys.tables t inner join sys.filegroups f on t.lob_data_space_id=f.data_space_id
where lob_data_space_id=3
查询输出

如您所见,tblArchivedPosts表位于FG_memoryooptimized_Posts文件组中。
总结
在本文中,我们学习了如何在现有数据库中创建内存优化的文件组。我们学习了以下主题。
使用SQL Server management studio和T-SQL查询在SQL数据库中添加多个内存优化的文件组。
在特定文件组中创建内存优化表。
原文标题:Managing memory-optimized file groups of SQL Database
原文作者:Nisarg Upadhyay
原文链接:https://www.sqlshack.com/managing-memory-optimized-file-groups-of-sql-database/




