我在 SQL Server 2016 中有一个内存优化表,启用了文件持久性。该表只有 100MB。SQL Server 不断地在磁盘上创建新文件,这些文件从几百 MB 开始,但随后不断增长,直到驱动器空间耗尽,然后它们被清除并再次开始该过程。这些文件以每小时约 900MB 的速度增长。运行下面的 SQL 显示所有空间都在 Precreated Data 中 - 所以它甚至没有实际存储大量数据,只是分配空间供以后使用。
SELECT state_desc, file_type_desc, COUNT(*) AS [count],
SUM(file_size_in_bytes) / 1024 / 1024 AS [on-disk size MB]
FROM sys.dm_db_xtp_checkpoint_files
GROUP BY state, state_desc, file_type, file_type_desc
ORDER BY state, file_type
文件组上的文件增长设置为无限制,所以我假设我可以为此设置一个值并停止它增长,但我找不到任何东西来说明为什么它首先分配了这么多空间。表中的数据确实变化非常快(随着数据不断处理,大量插入和删除,但非预创建的数据永远不会超过 4GB。
SQL Server 中是否有控制此文件预创建的设置?对文件组的自动增长设置限制是否安全?
问题标题为 SQL 2014,但问题文本为 SQL 2016。此问题不一定是任一版本中的错误。
假设数据库处于完全恢复状态,为了进行文件合并,必须进行事务日志备份和检查点。如果运行简单,检查点将单独处理文件合并和清除日志。请看这篇博文:
https://blogs.msdn.microsoft.com/psssql/2017/03/06/why-am-i-getting-so-many-checkpoint-files-when-i-have-in-memory-oltp-enabled/
但是@Slowry 也是正确的,因为您必须完全打补丁。
尽管在 SQL 2016 中所需的存储空间较少,但您无法通过旋钮来影响文件预创建。无法控制检查点文件对、容器或内存优化文件组的大小(在任何版本的 SQL 中)当前支持 In-Memory OLTP 的服务器)。
这是 SQL Server 2016 中的一个错误,已在没有 SP 的 SP1 CU2 / CU4 中修复。 https://support.microsoft.com/en-us/help/3206584/fix-checkpoint-files-grow-excessively-when-you-insert-data-into-memory