Sql server 释放未使用的内存sql server 2014内存优化表

Sql server 释放未使用的内存sql server 2014内存优化表,sql-server,memory,server,Sql Server,Memory,Server,我的系统 Microsoft SQL Server 2014(SP1-CU4)(KB3106660)-12.0.4436.0(X64) 2015年12月2日16:09:44版权所有(c)微软公司企业 版本:Windows NT 6.3(内部版本)上基于核心的授权(64位) 9600:)(虚拟机监控程序) 我使用了两个表table1和``table2`内存优化表(每个表大小为27GB) 放下表1 IF OBJECT_ID('table1') IS NOT NULL BEGIN DROP

我的系统

Microsoft SQL Server 2014(SP1-CU4)(KB3106660)-12.0.4436.0(X64) 2015年12月2日16:09:44版权所有(c)微软公司企业 版本:Windows NT 6.3(内部版本)上基于核心的授权(64位) 9600:)(虚拟机监控程序)

我使用了两个表
table1
和``table2`内存优化表(每个表大小为27GB)

放下
表1

IF OBJECT_ID('table1') IS NOT NULL

BEGIN

    DROP TABLE [dbo].[table1]

END
之后:

按内存优化对象列出的SQL server内存使用情况报告

Table Name =table2  Table Used Memory = 26582,50  Table Unused Memory = 26792,69
如何手动运行sql server垃圾回收器?这是可能的还是不可能的? 我需要“表未使用内存”释放,因为另一个进程总是给出此错误

“资源池'池'中的系统内存不足,无法运行此查询。”


谢谢

内存优化表的数据保存在数据和增量文件中

delete语句不会从数据文件中删除数据,而是将delete记录插入增量文件,因此您的存储空间仍然很大

数据和增量文件成对维护,称为检查点文件对(CFP)。随着时间的推移,已关闭的CFP将根据合并策略从多个CFP合并到一个合并的目标CFP中

后台线程使用合并策略评估所有已关闭的CFP,然后为符合条件的CFP启动一个或多个合并请求。这些合并请求由脱机检查点线程处理。合并策略的评估会定期进行,也会在检查点关闭时进行

您可以使用存储过程
sys.sp\u xtp\u merge\u checkpoint\u files
在检查点之后强制合并文件

编辑

运行语句:

SELECT
    container_id,
    internal_storage_slot,
    file_type_desc,
    state_desc,
    inserted_row_count,
    deleted_row_count,
    lower_bound_tsn,
    upper_bound_tsn
FROM
    sys.dm_db_xtp_checkpoint_files
ORDER BY
    file_type_desc,
    state_desc
然后找到状态为“正在构造”的行,并记下 上下事务id

现在执行:

EXEC sys.sp_xtp_merge_checkpoint_files 'myDB',1003,1004;
其中1003和1004是较低和较高的事务id

要完全删除文件,您必须确保:

  • 从上面运行Select语句
  • 从上面运行EXEC sys.sp\u xtp\u merge\u checkpoint\u文件
  • 执行完全备份
  • 检查站
  • 备份日志
  • EXEC sp_xtp_检查点_强制_垃圾_收集
  • 检查站
  • Exec sp_filestream_force_garbage_collection'MyDb'删除标记为逻辑删除的文件
  • 您可能需要运行步骤3-7两次才能完全删除这些文件

    CFP将经历以下阶段:

    •预创建–保留一小组预先分配的CFP,以最小化或消除在执行事务时分配新文件的任何等待。这些文件是全尺寸的,数据文件大小为128MB,增量文件大小为8MB,但不包含任何数据。CFP的数量计算为逻辑处理器或调度程序的数量,最少为8。这是具有内存优化表的数据库中的固定存储开销

    •在建–存储自上次检查点以来新插入和可能删除的数据行的CFP集

    •活动-这些包含以前关闭的检查点中插入/删除的行。这些CFP包含在数据库重新启动时应用事务日志的活动部分之前所需的所有插入/删除行。我们预计这些CFP的大小大约是内存优化表的内存大小的2倍,前提是合并操作能够跟上事务工作负载

    •合并目标–CFP存储合并策略标识的CFP中的合并数据行。安装合并后,合并目标将转换为活动状态

    •合并源–一旦安装合并操作,源CFP将标记为合并源。注意,合并策略计算器可以识别多个合并CFP只能参与一个合并操作

    •备份/HA所需–一旦安装了合并并且合并目标CFP是持久检查点的一部分,合并源CFP将转换到此状态。这种状态下的CFP对于具有内存优化表的数据库的操作正确性是必需的。例如,从一个持久的检查点恢复,以便及时返回。一旦日志截断点超出其事务范围,可以将CFP标记为垃圾收集

    •在向墓碑过渡时–这些CFP不是内存OLTP引擎所需要的,它们可以被垃圾收集。此状态表示这些CFP正在等待后台线程将其转换到下一个状态


    •墓碑–这些CFP正在等待filestream垃圾收集器进行垃圾收集。请参考FS垃圾收集了解详细信息

    Ty了解答案,但不要使用您的解决方案my db simple recovery mode,我尝试了EXEC sp_xtp_checkpoint_force_Garbage_收集和检查点策略;表2 always Table Unused Memory=26792,69是否先执行sys.sp_xtp_merge_checkpoint_文件?-请参阅EditYes 1-有完整备份2-检查点3-选择语句ı无法查看正在构建状态我看到合并的源预创建的活动墓碑4-EXEC sys.sp_xtp_merge_CHECKPOINT_文件'table2',11125411260;(活动状态正常,但表大小不正常,合并源不正常,逻辑删除和预创建的看不到任何事务ID)能否再次运行步骤2-5,然后运行SELECT语句并显示所看到的内容。完成此操作后,执行sp_filestream_force_garbage_collection'MyDb'并删除标记为逻辑删除的文件