Isso é um inseto?
Não, não é um bug. É por design. Eles são mantidos para fins de solução de problemas e suporte.
No whitepaper SQL_Server_2014_In-Memory_OLTP
Os administradores de banco de dados não precisam manter os arquivos gerados pela compilação nativa. O SQL Server remove automaticamente os arquivos gerados que não são mais necessários, por exemplo, na exclusão de tabela e procedimento armazenado e no banco de dados descartado, mas também na reinicialização do servidor ou banco de dados.
Tentei reproduzir seu cenário no SQL Server 2014 + RTM + (Build12.0.2000.8)
servidor - Dev Edition criando uma tabela otimizada para memória de teste e verificando a dll carregada usando
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
Depois que eu soltei minha tabela, o dll
item ainda aparece na saída da instrução select acima e os arquivos ainda estão na pasta e, após a reinicialização, eles ainda estão lá.
De Livros Online -
Nenhuma interação do usuário é necessária para gerenciar esses arquivos ( .c, .obj, .xml, .pdb., .dll
). O SQL Server criará e removerá os arquivos conforme necessário.
Então eu acho que só precisamos seguir o que a Microsoft diz - o SQL Server irá gerenciá-los para nós :-)
SOMENTE PARA FINS EDUCACIONAIS:
Eu consegui limpar os arquivos antigos
- Emitindo um manual
CHECKPOINT
no banco de dados.
- Colocar o banco de dados offline e colocá-lo online.
Idealmente, você não deve reiniciar a instância do servidor, apenas o ponto de verificação manual e o offline / online do banco de dados limparão os arquivos.
por exemplo, 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
--- agora verifique se a dll está carregada ou não
SELECT nome, descrição FROM sys.dm_os_loaded_modules WHERE description = 'XTP Native DLL'
--- agora solte a tabela e faça um ponto de verificação manual
use db1;
drop table dbo.t1;
checkpoint
Ainda assim, o módulo está carregado na memória (até a reinicialização do servidor carregará o módulo algumas vezes )
Os ( .c, .obj, .xml, .pdb., .dll
) ainda estão presentes na pasta:
Agora coloque o banco de dados offline e coloque-o on-line - todos os ( .c, .obj, .xml, .pdb., .dll
) desapareceram ...