¿Es esto un error?
No, no es un error. Es por diseño. Se conservan con fines de resolución de problemas y compatibilidad.
Del SQL_Server_2014_In-Memory_OLTP White_Paper
Los administradores de bases de datos no necesitan mantener los archivos generados por la compilación nativa. SQL Server elimina automáticamente los archivos generados que ya no son necesarios, por ejemplo, en la eliminación de tablas y procedimientos almacenados, y en la caída de la base de datos, pero también en el reinicio del servidor o la base de datos.
Traté de reproducir su escenario en el SQL Server 2014 + RTM + (Build12.0.2000.8)
servidor Dev Edition creando una tabla optimizada de memoria de prueba y verificando el dll cargado usando
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
Después de que solté mi tabla, dll
todavía aparece en el resultado de la instrucción select anterior y los archivos todavía están en la carpeta y después del reinicio todavía están allí.
De libros en línea -
No se necesita interacción del usuario para administrar estos archivos ( .c, .obj, .xml, .pdb., .dll
). SQL Server creará y eliminará los archivos según sea necesario.
Entonces, supongo que solo tenemos que seguir lo que dice Microsoft: el servidor SQL los administrará por nosotros :-)
SOLO PARA PROPÓSITO EDUCATIVO:
Me las arreglé para limpiar los archivos viejos por
- Emitir un manual
CHECKPOINT
en la base de datos.
- Desconectar la base de datos y luego ponerla en línea.
Idealmente, no debería reiniciar la instancia del servidor, solo el punto de control manual y fuera de línea de la base de datos borrará los archivos.
por ejemplo, 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
--- ahora verifique si el dll está cargado o no
SELECCIONE el nombre, la descripción DESDE sys.dm_os_loaded_modules WHERE description = 'XTP Native DLL'
--- ahora suelte la tabla y haga un punto de control manual
use db1;
drop table dbo.t1;
checkpoint
Todavía el módulo se carga en la memoria (incluso el reinicio del servidor cargará el módulo a veces )
Los ( .c, .obj, .xml, .pdb., .dll
) todavía están presentes en la carpeta:
Ahora desconecte la base de datos y luego conéctela: los ( .c, .obj, .xml, .pdb., .dll
) se han ido ...