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

Fid*_*lio 2 memory sql-server server

我的系统

Microsoft SQL Server 2014(SP1-CU4)(KB3106660) - 12.0.4436.0(X64)2015年12月2日16:09:44版权所有(c)Microsoft Corporation企业版:Windows NT 6.3上的基于内核的许可(64位)( Build 9600:)(管理程序)

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

下降 table1

IF OBJECT_ID('table1') IS NOT NULL

BEGIN

    DROP TABLE [dbo].[table1]

END
Run Code Online (Sandbox Code Playgroud)

后:

SQL Server内存使用情况按内存优化对象报告

Table Name =table2  Table Used Memory = 26582,50  Table Unused Memory = 26792,69
Run Code Online (Sandbox Code Playgroud)

如何手动运行sql server垃圾收集器?这有可能吗?我需要"Table Unused Memory"发行版,因为另一个进程总是会出现此错误

"资源池'Pool'中没有足够的系统内存来运行此查询."

谢谢

Ste*_*ord 6

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

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

数据和增量文件成对维护,称为检查点文件对(CFP).随着时间的推移,基于来自多个CFP的合并策略将关闭的CFP合并为一个合并的目标CFP.

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

您可以使用sys.sp_xtp_merge_checkpoint_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
Run Code Online (Sandbox Code Playgroud)

然后找到状态为UNDER CONSTRUCTION的行,并记下下部和上部事务ID.

现在执行:

EXEC sys.sp_xtp_merge_checkpoint_files 'myDB',1003,1004;
Run Code Online (Sandbox Code Playgroud)

其中1003和1004是较低和较高的交易ID.

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

  1. 从上面运行Select语句
  2. EXEC sys.sp_xtp_merge_checkpoint_files从上面跑
  3. 执行完全备份
  4. CHECKPOINT
  5. 备份日志
  6. EXEC sp_xtp_checkpoint_force_garbage_collection;
  7. 检查站
  8. exec sp_filestream_force_garbage_collection'MyDb'删除标记为Tombstone的文件

您可能需要运行两次步骤3 - 7才能完全删除文件.

参见参加茶文章的DBA

CFP经历以下几个阶段:

•PRECREATED - 预先分配一小组CFP,以最小化或消除在执行事务时分配新文件的任何等待.它们是完整大小的,数据文件大小为128MB,增量文件大小为8 MB,但不包含任何数据.CFP的数量计算为逻辑处理器或调度程序的数量,最小值为8.这是具有内存优化表的数据库中的固定存储开销

•UNDER CONSTRUCTION - 一组CFP,用于存储自上一个检查点以来新插入和可能已删除的数据行.

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

•MERGE TARGET - CFP存储来自合并策略标识的CFP的合并数据行.安装合并后,MERGE TARGET将转换为ACTIVE状态

•合并源 - 安装合并操作后,源CFP将标记为合并源.注意,合并策略评估器可以标识CFP只能参与一个合并操作的多个合并.

•需要备份/ HA - 一旦安装了合并且MERGE TARGET CFP是持久检查点的一部分,合并源CFP就会转换为此状态.具有内存优化表的数据库的操作正确性需要处于此状态的CFP.例如,从持久检查点恢复以便及时返回.一旦日志截断点超出其事务范围,就可以将CFP标记为垃圾回收.

•转换到TOMBSTONE - 内存中的OLTP引擎不需要这些CFP,它们可以被垃圾收集.此状态表示这些CFP正在等待后台线程将它们转换为下一个状态TOMBSTONE

•TOMBSTONE - 这些CFP正在等待由文件流垃圾收集器进行垃圾收集.有关详细信息,请参阅FS垃圾收集