Answers:
这是一个错误吗?
不,这不是错误。其设计。保留它们是为了进行故障排除和支持目的。
来自SQL_Server_2014_In-Memory_OLTP White_Paper
数据库管理员不需要维护由本机编译生成的文件。SQL Server自动删除不再需要的生成文件,例如,在删除表和存储过程以及删除数据库时,以及在服务器或数据库重新启动时,都不再需要。
我试图SQL Server 2014 + RTM + (Build12.0.2000.8)
通过创建测试内存优化表并检查使用
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
放下表格后,dll
仍然在上面的select语句的输出中显示,并且文件仍然在文件夹中,并且在重新启动后它们也仍然在文件夹中。
从在线书籍 -
无需用户交互即可管理这些文件(
.c, .obj, .xml, .pdb., .dll
)。SQL Server将根据需要创建和删除文件。
所以我想,我们只需要遵循Microsoft所说的-SQL Server将为我们管理它们:-)
我设法通过清理旧文件
CHECKPOINT
在数据库上发布手册。理想情况下,您不应该重新启动服务器实例,只需手动检查点和数据库的脱机/联机即可清除文件。
例如Repro:
USE master
GO
create database db1
GO
ALTER DATABASE db1 ADD FILEGROUP db1_mod CONTAINS memory_optimized_data
GO
-- adapt filename as needed
ALTER DATABASE db1 ADD FILE (name='db1_mod', filename='D:\SQLServer2014\MSSQL12.SQL2014\MSSQL\DATA\db1_mod') -- change here as per your need !!
TO FILEGROUP db1_mod
GO
USE db1
GO
CREATE TABLE dbo.t1
(c1 int not null primary key nonclustered,
c2 int)
WITH (MEMORY_OPTIMIZED=ON)
GO
---现在检查dll是否已加载
选择名称,描述来自sys.dm_os_loaded_modules,其中描述=“ XTP本机DLL”
--- 现在放表格并做一个手动检查点
use db1;
drop table dbo.t1;
checkpoint
仍然将模块加载到内存中(即使服务器重新启动有时也会加载模块)
(.c, .obj, .xml, .pdb., .dll
)仍然存在于文件夹中:
现在使数据库脱机,然后使其联机-(.c, .obj, .xml, .pdb., .dll
)都消失了...