è un insetto?
No, non è un bug. È di design. Sono conservati per scopi di risoluzione dei problemi e di supporto.
Da SQL_Server_2014_In-Memory_OLTP White_Paper
Gli amministratori del database non devono conservare i file generati dalla compilazione nativa. SQL Server rimuove automaticamente i file generati non più necessari, ad esempio l'eliminazione di tabelle e stored procedure e il rilascio del database, ma anche al riavvio del server o del database.
Ho provato a riproporre il tuo scenario sul SQL Server 2014 + RTM + (Build12.0.2000.8)
server - Dev Edition creando una tabella ottimizzata per la memoria di prova e controllando la dll caricata usando
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
Dopo che ho lasciato cadere la mia tabella, dll
appare ancora nell'output dell'istruzione select sopra e i file sono ancora nella cartella e dopo il riavvio sono ancora lì.
Da libri online -
Non è necessaria alcuna interazione dell'utente per gestire questi file ( .c, .obj, .xml, .pdb., .dll
). SQL Server creerà e rimuoverà i file se necessario.
Quindi immagino, dobbiamo solo seguire ciò che dice Microsoft - SQL Server li gestirà per noi :-)
SOLO A SCOPO EDUCATIVO:
Sono riuscito a ripulire i vecchi file da
- Emissione di un manuale
CHECKPOINT
sul database.
- Portare il database offline e quindi portarlo online.
Idealmente, non dovresti riavviare l'istanza del server, solo il checkpoint manuale e offline / online del database cancelleranno i file.
ad es. 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
--- ora controlla se la dll è caricata o meno
SELEZIONA nome, descrizione DA sys.dm_os_loaded_modules DOVE descrizione = 'XTP Native DLL'
--- ora rilascia la tabella ed esegui un checkpoint manuale
use db1;
drop table dbo.t1;
checkpoint
Tuttavia il modulo è caricato in memoria (anche il riavvio del server caricherà il modulo a volte )
I ( .c, .obj, .xml, .pdb., .dll
) sono ancora presenti nella cartella:
Ora porta il database offline e poi portalo online - i ( .c, .obj, .xml, .pdb., .dll
) sono andati tutti ...