削除されていないメモリ最適化DLL


8

BOLから、私の理解は、SQL Serverサービスが開始すると自動的に再コンパイルされ、不要になったときに削除されるため、DBAはメモリ最適化テーブル用に作成されたDLL、またはネイティブにコンパイルされたストアドプロシージャを管理する必要がないということです。しかし、私は目撃しています。メモリ最適化テーブルが削除され、サービスが再起動された後でも、DLLはファイルシステムに存在し、SQLメモリにロードされ、プロセスにアタッチされています。これは、それらがまだsys_dm_os_loaded_modulesに表示されており、SQLサービスの実行中にそれらを削除しようとすると、ファイルシステムでロックされるという事実からもわかります。

これはバグですか?または、後日クリーンアップされますか?後日、インスタンスの再起動でない場合、クリーンアップをトリガーするものは何ですか?

回答:


4

これはバグですか?

いいえ、バグではありません。その設計による。これらはトラブルシューティングとサポートの目的で保持されます。

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)はすべてなくなります...

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.