次の方法で共有


テーブルまたはストアド プロシージャを In-Memory OLTP に移植する必要があるかどうかを判断する

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

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

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

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

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

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

    In-Memory OLTP からアプリケーションがメリットを得ているかどうか、In-Memory OLTP への移行を計画する場合、および一部のテーブルとストアド プロシージャを In-Memory OLTP に移行する場合は常に確認できます。

    重要

    データベース・システムのパフォーマンスは、トランザクション・パフォーマンス・コレクターが観察および測定できるすべてではない、いくつかの要因に依存します。 したがって、トランザクション パフォーマンス分析レポートでは、予測が行われた場合、実際のパフォーマンスの向上が予測と一致することは保証されません。

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

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

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

Tables

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

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

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

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

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

  • [競合の統計] セクション

    このセクションには、データベース テーブルの競合を示すテーブルが含まれます。 データベースのラッチとロックの詳細については、「 トランザクション ロックと行のバージョン管理ガイド」を参照してください。 次の列で構成されます。

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

    • ラッチの統計情報。 これらの列は、このテーブルに関係するクエリのラッチ待機数を記録します。 ラッチの詳細については、 SQL Server でのラッチの使用方法を参照してください。この数が多いほど、テーブルのラッチ競合が多くなります。

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

  • [移行の難易度] セクション

    このセクションには、このデータベース テーブルをメモリ最適化テーブルに変換する際の難易度を示すテーブルが含まれます。 高い難易度の評価は、テーブルの変換がより困難であることを示します。 このデータベース テーブルを変換するための詳細を表示するには、メモリ最適化アドバイザーを使用します。

このプロセスでは、テーブルの詳細レポートに関するスキャンと競合の統計情報が sys.dm_db_index_operational_statsから収集および集計されます。

ストアド プロシージャ

CPU 時間と経過時間の比率が高いストアド プロシージャの移行を検討してください。 ネイティブ コンパイル ストアド プロシージャはメモリ最適化テーブルのみを参照できるため、このレポートにはすべてのテーブル参照が表示されます。このテーブルは移行コストに追加できます。

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

  • [実行統計] セクション

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

    • キャッシュされた時間。 この実行プランがキャッシュされた時間です。 ストアド プロシージャがプラン キャッシュから削除され、再入力された場合は、各キャッシュの時間が表示されます。

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

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

    • キャッシュミスの合計。 ストアド プロシージャの実行がプロファイリング中に発生したキャッシュ ミス (物理ストレージからの読み取り) の数。

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

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

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

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

ストアド プロシージャをネイティブ コンパイル ストアド プロシージャに変換する方法の詳細については、ネイティブ コンパイル アドバイザーを使用します。

インメモリ OLTP 移行チェックリストを生成する

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

SQL Server Management Studio で、 In-Memory OLTP 移行チェックリストの生成 コマンドまたは PowerShell を使用して、移行チェックリストを生成します。

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

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

  2. [ In-Memory 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で指定された場所の唯一のレポートです。