none
SQL Serverの高速挿入機能の容量確保の動作について RRS feed

  • Question

  • こんにちは。SQL Server サポートチームです。

    SQL Server 2016以降で自動で有効になっている高速挿入機能の容量確保の部分について説明したいと思います。

    SQL Server 2016 やそれ以降のバージョンでは、データベースが単純復旧モデルまたは一括ログ復旧モデルの際、新しいページに挿入されるレコードの挿入パフォーマンスを最適化するために高速挿入機能が有効になっています。

    この高速挿入では、データ挿入のパフォーマンスを最適化するため、使用可能な空き領域を持つ既存エクステントの割り当てをスキップし、各バッチ処理毎に新しいエクステントを取得します。

    エクステントの空きを確認するためのコストが省略できるため、結果的に高速にデータの登録が可能となります。この機能は、特に大量のデータを一気に登録するシナリオで効果を発揮します。

    データ挿入時に空きを確認せず、新しいエクステントへデータを挿入することでパフォーマンス改善が見込めますが、既存のエクステントの空き領域は使用されませんので、既存の空き領域(unused)が利用されません。

    そのため、高速挿入機能が有効な場合は、同じデータ挿入でも多くのエクステントを使用することがあり、結果としてデータベースファイルサイズが無効な場合と比較して大きくなることがあります。

    そのため、高速挿入機能では、データ挿入のパフォーマンスは向上しますが、データベースファイルが大きくなる可能性があることも事前にご認識いただき、ご使用ください。

    また、トレースフラグ692を設定することで高速挿入機能を無効にすることが可能です。

    SQL ServerExpressエディションをご利用で制限があり、容量に懸念がある場合等は、高速挿入機能の無効化をご検討ください。

      高速挿入機能無効化トレースフラグの設定方法

      ----------------------------------

      1) SQL Server Configuration Manager (構成マネージャー)を起動します。

      2) SQL Serverのサービス -> SQL Server (MSSQLSERVER もしくは インスタンス名) を右クリックし、プロパティを開きます。

      3) [起動時のパラメーター] タブの [起動時のパラメーターの指定] ボックスに下記の値を入力し、[追加] をクリックします。

      -T692

      5) [OK]をクリックし、設定を確定します。設定は、次回 SQL Server サービス起動後に有効になります。

    トレースフラグ692につきまして、下記技術資料でも説明していますので、ご一読ください。

    <参考情報>

    DBCC TRACEON - トレース フラグ (Transact-SQL)

    https://docs.microsoft.com/ja-jp/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql?view=sql-server-2017

    Monday, May 18, 2020 2:45 PM
    Owner