暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server中管理SQL数据库的内存优化文件组

原创 eternity 2022-08-22
1200

本文介绍如何管理SQL数据库的内存优化文件组。内存优化文件组包含内存优化表和表变量。我写了两篇文章,解释了如何将基于磁盘的表迁移到内存优化的表。现在,我们将学习如何在SQL数据库中添加内存优化的文件组。我将在本文中介绍以下主题。

1.使用SQL Server management studio和T-SQL查询在SQL数据库中添加内存优化的文件组

2.在特定文件组中创建内存优化表

我正在使用SQL Server 2019和stackoverflow2010数据库。Stackoverflow数据库包含表。首先,让我们看看如何添加内存优化的文件组。

使用SSMS添加内存优化文件组

要添加内存优化的文件组,请打开SSMS并连接到SQL Server数据库引擎🡪 扩展数据库🡪 右键单击Stackoverflow2010并选择属性。

image.png

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

image.png

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

image.png

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

image.png

数据库文件网格视图中的一行,将添加一行。指定以下详细信息:

1.逻辑名称:指定内存优化文件组的所需逻辑名称

2.文件类型:在文件类型列中选择文件流数据

3.文件组:将自动检索文件组名称

4.路径:在“路径”列中,指定要存储内存优化表的位置

下面是数据库属性的文件pan的屏幕截图。

image.png

单击“确定”添加数据文件。现在,运行以下查询以填充内存优化文件组的详细信息。


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  

查询输出

image.png

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

image.png

现在,让我们使用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  

查询输出

image.png

如您所见,名为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

查询输出

image.png

如您所见,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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论