Est-ce un bug?
Non ce n'est pas un bug. C'est par conception. Ils sont conservés à des fins de dépannage et de prise en charge.
À partir du SQL_Server_2014_In-Memory_OLTP White_Paper
Les administrateurs de base de données n'ont pas besoin de gérer les fichiers générés par la compilation native. SQL Server supprime automatiquement les fichiers générés qui ne sont plus nécessaires, par exemple lors de la suppression de tables et de procédures stockées et lors de la suppression d'une base de données, mais également lors du redémarrage du serveur ou de la base de données.
J'ai essayé de reprocher votre scénario sur SQL Server 2014 + RTM + (Build12.0.2000.8)
- serveur Dev Edition en créant une table optimisée pour la mémoire de test et en vérifiant la DLL chargée à l'aide
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
Après avoir déposé ma table, le dll
apparaît toujours dans la sortie de l'instruction select ci-dessus et les fichiers sont toujours dans le dossier et après le redémarrage, ils sont toujours là aussi.
Des livres en ligne -
Aucune interaction utilisateur n'est nécessaire pour gérer ces fichiers ( .c, .obj, .xml, .pdb., .dll
). SQL Server créera et supprimera les fichiers si nécessaire.
Donc je suppose que nous devons juste suivre ce que dit Microsoft - SQL Server les gérera pour nous :-)
UNIQUEMENT À DES FINS ÉDUCATIVES:
J'ai réussi à nettoyer les anciens fichiers en
- Publication d'un manuel
CHECKPOINT
sur la base de données.
- Mettre la base de données hors ligne, puis la mettre en ligne.
Idéalement, vous ne devriez pas redémarrer l'instance de serveur, juste un point de contrôle manuel et hors ligne / en ligne de la base de données effacera les fichiers.
par exemple 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
--- vérifiez maintenant si la dll est chargée ou non
SELECT nom, description FROM sys.dm_os_loaded_modules WHERE description = 'DLL native XTP'
--- maintenant déposer la table et faire un point de contrôle manuel
use db1;
drop table dbo.t1;
checkpoint
Le module est toujours chargé en mémoire (même le redémarrage du serveur chargera parfois le module )
Les ( .c, .obj, .xml, .pdb., .dll
) sont toujours présents dans le dossier:
Maintenant, mettez la base de données hors ligne, puis mettez-la en ligne - les ( .c, .obj, .xml, .pdb., .dll
) sont tous partis ...