テーブルまたはストアド プロシージャをインメモリ OLTP に移植する必要があるかどうかの確認

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server Management Studio のトランザクション パフォーマンス分析レポートは、インメモリ OLTP によりデータベース アプリケーションのパフォーマンスが向上するかどうかを評価するために役立ちます。 また、このレポートを使用すると、アプリケーションでインメモリ OLTP を有効にするために必要な作業量が示されます。 インメモリ OLTP に移植するディスク ベース テーブルを特定した後で メモリ最適化アドバイザーを使用すると、テーブルを移行しやすくなります。 同様に、 Native Compilation Advisor は、ストアド プロシージャをネイティブ コンパイル ストアド プロシージャに移植するために役立ちます。 移行方法については、「In-Memory OLTP - Common Workload Patterns and Migration Considerations」(インメモリ OLTP - 一般的なワークロード パターンと移行に関する考慮事項) を参照してください。

トランザクション パフォーマンス分析レポートは、実稼働データベースに対して、または実稼働ワークロードに類似したアクティブなワークロードを持つテスト データベースに対して直接実行されます。

このレポートと移行アドバイザーが、次のタスクを実行する際に役立ちます。

  • ワークロード分析して、インメモリ OLTP がパフォーマンスの向上に役立つ可能性があるホット スポットを判断する。 トランザクション パフォーマンス分析レポートは、インメモリ OLTP に変換することよっても最も大きいメリットが得られるテーブルおよびストアド プロシージャをそれぞれ推奨します。

  • インメモリ OLTP への移行の計画および実行を支援する。 ディスク ベース テーブルからメモリ最適化テーブルへの移行パスは時間がかかる場合があります。 メモリ最適化アドバイザーは、インメモリ OLTP にテーブルを移行する前にテーブルの非互換性を識別するために役立ちます。 また、メモリ最適化アドバイザーは、テーブルをメモリ最適化テーブルに移行した場合のアプリケーションへの影響を理解するのに役立ちます。

    インメモリ OLTP への移行を計画したとき、およびテーブルおよびストアド プロシージャの一部をインメモリ OLTP に移行するための作業を行うときに、アプリケーションがインメモリ OLTP のメリットを得られるかどうかを確認できます。

    重要

    データベース システムのパフォーマンスはさまざまな要因に左右されますが、そのすべてをトランザクション パフォーマンス コレクターで観察および測定できるわけではありません。 したがって、トランザクション パフォーマンス分析レポートは、作成した予測が実際のパフォーマンスの向上と一致することを保証するものではありません。

SQL Server のインストール時に [管理ツール - 基本] または [管理ツール - 詳細] を選択するか、または SQL Server Management Studio をダウンロードすると、トランザクション パフォーマンス分析レポートと移行アドバイザーが SQL Server Management Studio (SSMS) の一部としてインストールされます。

トランザクション パフォーマンス分析レポート

オブジェクト エクスプローラー でトランザクション パフォーマンス分析レポートを生成するには、データベースを右クリックし、 [レポート][標準レポート][トランザクション パフォーマンス分析の概要] の順にクリックします。 有意義な分析レポートを生成するには、データベースにアクティブなワークロード、または最近実行されたワークロードがある必要があります。

テーブル

テーブルの詳細なレポートは、3 つのセクションで構成されています。

  • スキャン統計セクション

    このセクションには、データベース テーブルのスキャンに関して収集された統計を示す単一のテーブルが含まれています。 列は次のとおりです。

    • 総アクセスに対する比率。 データベース全体のアクティビティに対する、このテーブルでのスキャンとシークの割合です。 この割合が高くなるほど、データベース内の他のテーブルと比較して、テーブルが使用される頻度が高くなります。

    • 参照統計/範囲スキャン統計。 この列には、プロファイル中にテーブルで行われたポイント参照と範囲スキャン (インデックス スキャンとテーブル スキャン) の回数が記録されます。 トランザクションごとの平均は推定値です。

  • 競合統計セクション

    このセクションには、データベース テーブルの競合を示すテーブルが含まれます。 データベースのラッチおよびロックの詳細については、「ロック アーキテクチャ」を参照してください。 次の列で構成されます。

    • 待機の総数に対する比率。 データベースのアクティビティと比較した、このデータベース テーブルでのラッチ待機とロック待機の割合です。 この割合が高くなるほど、データベース内の他のテーブルと比較して、テーブルが使用される頻度が高くなります。

    • ラッチ統計。 これらの列には、このテーブルの関連するクエリに対するラッチ待機数が記録されます。 ラッチについては、「ラッチ」を参照してください。 この数値が大きくなるほど、テーブルでのラッチの競合が増加します。

    • ロック統計。 この列のグループには、このテーブルのクエリに対するページ ロックの取得および待機の数が記録されます。 ロックの詳細については、「SQL Server のロック」を参照してください。 待機数が多いほど、テーブルでのロックの競合が増加します。

  • 移行難易度セクション

    このセクションには、このデータベース テーブルをメモリ最適化テーブルに変換する際の難易度を示すテーブルが含まれます。 難易度が高いほど、テーブルの変換が難しくなることを示します。 このデータベース テーブルの変換の詳細を確認するには、メモリ最適化アドバイザーを使用してください。

テーブル詳細レポートのスキャンと競合の統計は、sys.dm_db_index_operational_stats (Transact-SQL) から収集されて集計されます。

ストアド プロシージャ

経過時間のうち CPU 時間の割合が高いストアド プロシージャは、移行の対象となります。 ネイティブ コンパイル ストアド プロシージャはメモリ最適化テーブルのみを参照できるため、レポートはすべてのテーブル参照を示します。これは移行コストに追加できます。

ストアド プロシージャの詳細レポートは、次の 2 つのセクションで構成されています。

  • 実行の統計セクション

    このセクションには、ストアド プロシージャの実行に関して収集された統計を示すテーブルが含まれています。 次の列で構成されます。

    • キャッシュ時間。 この実行プランがキャッシュされた時間です。 ストアド プロシージャがプラン キャッシュを途中で抜けてもう一度キャッシュに入る場合、各キャッシュの時間になります。

    • 総 CPU 時間。 プロファイル中にストアド プロシージャで使用された総 CPU 時間です。 この数値が大きくなるほど、ストアド プロシージャで使用された CPU が増加します。

    • 総実行時間。 プロファイル中にストアド プロシージャで使用された実行時間の合計です。 この数値と CPU 時間の差が大きいほど、ストアド プロシージャによる CPU の使用効率は低くなります。

    • キャッシュ ミスの総数。 プロファイル中に、ストアド プロシージャの実行によって発生したキャッシュ ミス (物理ストレージからの読み取り) の数です。

    • 実行回数。 プロファイル中にこのストアド プロシージャが実行された回数です。

  • テーブル参照セクション

    このセクションには、このストアド プロシージャによって参照されるテーブルを示すテーブルが含まれます。 ストアド プロシージャをネイティブ コンパイル ストアド プロシージャに変換する前に、これらすべてのテーブルをメモリ最適化テーブルに変換する必要があります。また、これらは同じサーバーおよびデータベースに存在する必要があります。

ストアド プロシージャ詳細レポートの実行の統計は、sys.dm_exec_procedure_stats (Transact-SQL) から収集されて集計されます。 参照は、sys.sql_expression_dependencies (Transact-SQL) から取得されます。

ストアド プロシージャをネイティブ コンパイル ストアド プロシージャに変換する方法の詳細については、「ネイティブ コンパイル アドバイザー」を参照してください。

In-Memory OLTP 移行チェックリストの生成

移行チェックリストは、メモリ最適化テーブルまたはネイティブ コンパイル ストアド プロシージャでサポートされていないすべてのテーブルまたはストアド プロシージャ機能を特定するものです。 メモリ最適化アドバイザーとネイティブ コンパイル アドバイザーは、単一のディスク ベース テーブルまたは解釈された T-SQL ストアド プロシージャに対してチェックリストを生成できます。 また、データベース内の複数のテーブルおよびストアド プロシージャに対して移行チェックリストを生成することもできます。

SQL Server Management Studio [インメモリ OLTP 移行チェックリストの生成] コマンドまたは PowerShell を使用して、 で移行チェックリストを生成できます。

UI コマンドを使用して移行チェックリストを生成するには

  1. オブジェクト エクスプローラーで、システム データベース以外のデータベースを右クリックし、[タスク] をクリックし、[OLTP 移行チェックリストIn-Memory生成] をクリックします。

  2. [インメモリ OLTP 移行チェックリストの生成] ダイアログ ボックスで [次へ] をクリックし、 [チェックリスト生成オプションの構成] ページに移動します。 このページで、次の操作を行います。

    1. [チェックリストの保存先] ボックスに、フォルダー パスを入力します。

    2. [特定のテーブルとストアド プロシージャに対してチェックリストを生成する] がオンになっていることを確認します。

    3. セクション ボックスで、 [テーブル] ノードと [ストアド プロシージャ] ノードを展開します。

    4. 選択ボックスで、いくつかのオブジェクトを選択します。

  3. [次へ] をクリックし、タスクの一覧が、 [チェックリスト生成オプションの構成] ページの設定と一致することを確認します。

  4. [完了] をクリックし、移行チェックリスト レポートが、選択したオブジェクトに対してのみ生成されたことを確認します。

このレポートを、メモリ最適化アドバイザー ツールおよびネイティブ コンパイル アドバイザー ツールによって生成されたレポートと比較して、レポートの精度を確認できます。 詳細については、「 Memory Optimization Advisor 」および「 Native Compilation Advisor」を参照してください。

SQL Server PowerShell を使用して移行チェックリストを生成するには

  1. オブジェクト エクスプ ローラーで、データベースをクリックし、 [PowerShell の起動] をクリックします。 次のようなプロンプトが表示されることを確認します。

    PS SQLSERVER: \SQL\{Instance Name}\DEFAULT\Databases\{two-part DB Name}>  
    
  2. 次のコマンドを入力します。

    Save-SqlMigrationReport -FolderPath "<folder_path>"  
    
  3. 次の点を確認します。

    • フォルダー パスが存在しない場合は作成される。

    • データベース内のすべてのテーブルおよびストアド プロシージャに対して移行チェックリスト レポートが生成され、このレポートが folder_path で指定された場所に存在する。

Windows PowerShell を使用して移行チェックリストを生成するには

  1. 管理者特権の Windows PowerShell セッションを開始します。

  2. 次のコマンドを入力します。 オブジェクトは、テーブルまたはストアド プロシージャにできます。

    [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')  
    
    
    Save-SqlMigrationReport -Server "<instance_name>" -Database "<db_name>" -FolderPath "<folder_path1>"  
    
    
    Save-SqlMigrationReport -Server "<instance_name>" -Database "<db_name>" -Object <object_name> -FolderPath "<folder_path2>"  
    
    
  3. 次の点を確認します。

    • データベース内のすべてのテーブルおよびストアド プロシージャに対して移行チェックリスト レポートが生成され、このレポートが folder_path で指定された場所に存在する。

    • object_nameの <移行チェックリスト レポートは、folder_path2> によって指定された場所にある唯一のレポートです。

参照

インメモリ OLTP への移行