SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

ネイティブコンパイルされたオブジェクトのロードについて

leave a comment

SQL Server 2014 の BOL を見ていて気づきました。
テーブルとストアド プロシージャのネイティブ コンパイル

こちらの情報に

次のクエリは、サーバーのメモリに現在読み込まれているすべてのテーブルとストアド プロシージャ DLL を示します。

として、sys.dm_os_loaded_modules (Transact-SQL) の利用が記載されています。

この DMV を使用すると以下のような情報を取得することができます。
image

ネイティブコンパイルされたテーブル (メモリ最適化テーブル) は作成時または DB の起動時に、ネイティブコンパイルされたストアドプロシージャは作成時または初回実行時にコンパイルが行われます。

これを確認するためには上記の DMV を使うとよさそうですね。

ネイティブコンパイルされたストアドプロシージャのロードタイミングを確認する場合は、以下のようなクエリを使ってみます。

select description, name, *
from sys.dm_os_loaded_modules
where description like '%XTP%'
GO
exec [dbo].[usp_NCProc]
GO
select description, name, *
from sys.dm_os_loaded_modules
where description like '%XTP%'
GO

 

usp_NCProc はネイティブコンパイルされたストアドプロシージャとなり、上記の実行タイミングが初回実行となります。

DMV の検索結果がこちらになります。

image

ネイティブコンパイルされたストアドプロシージャの実行後はロードされているモジュールが増えていますね。

モジュール名が _t_ がテーブル / _p_ がストアドプロシージャなのかもしれないですね。

以下のようなクエリを実行すると Hekaton のエンジンやコンパイラがロードされていることも確認できます。

select description, name, *
from sys.dm_os_loaded_modules
where name like '%hk%.dll'
GO

 

image

Process Monitor で Path に xtp を含むものをキャプチャすると以下のような情報も取れますので何を使ってコンパイルしているかを確認したい場合などはここから追うと面白いかもしれませんね。

image

Share

Written by Masayuki.Ozawa

10月 24th, 2013 at 8:51 am

Posted in SQL Server

Tagged with ,

Leave a Reply