我的系统
Microsoft SQL Server 2014(SP1-CU4)(KB3106660) - 12.0.4436.0(X64) 2015年12月2日16:09:44版权所有(c)Microsoft Corporation Enterprise 版本: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
后:
SQL Server内存使用情况按内存优化对象报告
Table Name =table2 Table Used Memory = 26582,50 Table Unused Memory = 26792,69
如何手动运行sql server垃圾收集器?这有可能吗? 我需要"表未使用的内存"发布,因为另一个进程总是会出现此错误
"资源池中没有足够的系统内存' Pool'运行此查询。"
谢谢
答案 0 :(得分: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
然后找到状态为UNDER CONSTRUCTION的行并记下 较低和较高的交易ID。
现在执行:
EXEC sys.sp_xtp_merge_checkpoint_files 'myDB',1003,1004;
其中1003和1004是较低和较高的交易ID。
要完全删除文件,您必须确保:
EXEC sys.sp_xtp_merge_checkpoint_files
您可能需要执行两次步骤3 - 7才能完全删除文件。
请参阅The DBA who came to tea article
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垃圾收集