これはバグですか?
いいえ、バグではありません。その設計による。これらはトラブルシューティングとサポートの目的で保持されます。
SQL_Server_2014_In-Memory_OLTP White_Paper
データベース管理者は、ネイティブコンパイルによって生成されたファイルを維持する必要はありません。SQL Serverは、不要になった生成されたファイルを自動的に削除します。たとえば、テーブルやストアドプロシージャの削除時、データベースの削除時だけでなく、サーバーまたはデータベースの再起動時にも削除されます。
SQL Server 2014 + RTM + (Build12.0.2000.8)
テストメモリー最適化テーブルを作成し、使用して読み込まれたDLLをチェックすることにより、Dev Editionサーバーでシナリオを再現しようとしました
SELECT name, description FROM sys.dm_os_loaded_modules
WHERE description = 'XTP Native DLL'
テーブルをドロップした後もdll
、上記のselectステートメントの出力にはまだファイルが表示されており、ファイルはまだフォルダーにあり、再起動後もファイルはそこにあります。
Books Onlineから -
これらのファイルを管理するためのユーザー操作は必要ありません(.c, .obj, .xml, .pdb., .dll
)。SQL Serverは必要に応じてファイルを作成および削除します。
だから私は、Microsoftが言っていることに従う必要があると思います-SQLサーバーがそれらを管理してくれます:-)
教育目的のみ:
私は何とか古いファイルを片付けました
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がロードされているかどうかを確認します
SELECT名、説明FROM sys.dm_os_loaded_modules WHERE description = 'XTP Native DLL'
--- テーブルを削除し、手動でチェックポイントを実行します
use db1;
drop table dbo.t1;
checkpoint
それでもモジュールはメモリに読み込まれます(サーバーを再起動してもモジュールが読み込まれることがあります)
(.c, .obj, .xml, .pdb., .dll
)はまだフォルダーに存在します:
次に、データベースをオフラインにしてからオンラインにします-(.c, .obj, .xml, .pdb., .dll
)はすべてなくなります...