sql >> データベース >  >> RDS >> Sqlserver

TempDBの最適化:ボトルネックとパフォーマンスの問題の回避

    名前が示すように、TempDBは、中間オブジェクトと一時オブジェクトを作成および保持するためにSQLServerに必要な一時ワークスペースです。

    TempDBは、SQL Server装置全体の重要な歯車であり、一時的なワークスペースとして機能します。TempDBが保持するデータは、本質的に一時的なものです。つまり、SQL Serverインスタンスは、再起動するたびにTempDBを再作成し、それ自体が機能するクリーンなスクラッチパッドを提供します。

    • ユーザーのリクエストによってトリガーされる一時的なオブジェクト
    • 内部システムプロセスに必要なオブジェクト
    • 行のバージョン情報

    言うまでもなく、TempDBが最適に構成されていないと、運用上のボトルネックやパフォーマンスの低下につながる可能性があります。複雑な結合と並べ替え操作を使用したクエリで、期待したほど速く結果が得られないのはなぜか疑問に思われるかもしれません。

    TempDBを最適化するためのベストプラクティスについて一般化する簡単な方法はありません。シナリオは多様すぎて、特定の状況で機能するものが別の状況では機能しない可能性があります。データベースが本番環境に移行した場合でも、TempDBの設定を引き続き確認して、データベースが適切に構成されていることを確認することをお勧めします。

    データベースのパフォーマンスにおける最も深刻な問題の1つは、TempDBの競合です。これは、複数のリソースにTempDBが必要であるが、アクセスするTempDBデータファイルが1つしかない場合に発生します。

    TempDBの競合は深刻なパフォーマンスの問題を引き起こす可能性があり、データベースのロックが原因で通常のブロッキングであると誤解されることがよくあります。多くの場合、並行プロセスによって割り当てページで競合が実際にラッチされます。これにより、各プロセスが順番を待つため、ボトルネックが発生する可能性があります。ターンが十分に速くならないため、基になる接続がタイムアウトし、プロセスの割り当てを解除する必要があります。

    何がもらえますか? ブロックされたプロセスの仮想交通渋滞。

    TempDBの競合を解決し、SQL Serverのパフォーマンスを最適化するにはどうすればよいですか?基本を見て、そこから進んでいきましょう。

    データファイルの数–いくつ持っている必要がありますか?

    SQL Serverをセットアップしてデフォルト構成を維持すると、TempDBのデータファイルは1つだけになります。この構成に満足しないでください。

    よく言われる経験則の1つは、コアごとに1つのデータファイルです。ただし、この場合は注意して進めてください。サーバーに12個のコアがある場合は、アプリケーションと負荷の要件によって正当化されない限り、12個のTempDBデータファイルを使用しないでください。

    今日のハードウェア構成を考えると、最良のオプションは、8つの同じサイズのプライマリデータファイルから始めて、競合の問題が解決されているかどうかを確認することです。上向きに作業し、必要に応じてさらに4つのファイルを追加します。 SQL Server 2016のインストールおよびセットアップウィザードには、CPUコアの数を検出し、適切な数のTempDBデータファイルを自動的に作成することで、十分な数のTempDBデータファイルを確保する機能が組み込まれています。

    サイズは重要です–データファイルのサイズをどのように構成する必要がありますか?

    ファイルの数について説明したので、各ファイルの推奨サイズを見てみましょう。デフォルトのサイズは8MBで、SQLServerに合計64MBのTempDBスペースを提供しますが、ほとんどの実稼働環境には不十分です。自動拡張を維持することもオプションですが、SQL Serverを一時停止し、必要に応じてTempDBファイルにより多くのディスク領域を割り当てる必要があります。これにより、運用中にSQLServerにかなりのオーバーヘッドが追加されます。

    推奨される方法は、ファイルと各ファイルに必要な初期スペースを、TempDBが保存されているボリュームの約80〜90%に保つことです。 OSベースの仮想メモリ用に10〜20%のディスク容量が残っています。

    つまり、セットアップ中にデータファイルのサイズを事前に設定するか、本番環境でファイルのサイズを変更します。これにより、TempDBに十分なディスクスペースが割り当てられます。この時点では、自動拡張オプションをオンにしておくことを常にお勧めしますが、理想的には、SQLServerがその場で追加のディスク領域を頻繁に割り当てる必要がないことを確認してください。

    興味深いことに、SQL Server 2017以前は、セットアップ時にTempDBデータファイルごとに1GBを超えるデータを割り当てることはできませんでした。最新バージョンでは、セットアップ中にTempDBデータファイルに最大256GBを割り当てることができます。

    次の質問に進みます:

    TempDBデータファイルはどこに保管しますか?

    SQL Server 2012より前は、クラスター環境の場合、TempDBは、ストレージエリアネットワーク(SAN)などのクラスター環境間で共有されるディスクに配置する必要がありました。 SQL Server 2012以降、TempDBデータファイルをSSDベースのローカルストレージに保持することが可能になりました。これにより、共有SANとSQLServerインスタンス間の大量のトラフィックが削減されます。

    ほとんどの場合、TempDBの場所に最適なオプションは、専用のローカルSSDです。それが不可能な場合は、十分なディスク容量を事前に割り当てて、それを専用のボリュームに保持することで、パフォーマンスの問題が解決する可能性があります。ディスクの読み取りと書き込みが最適なレベルで実行されるように、ディスクの状態を常に監視するようにしてください。

    理想的には、メディアは、サーバー構成、アプリケーション要件、そして最後に割り当てられた予算を考慮して、可能な限り最速である必要があります。

    基本を確認したので、SQLServer2012以降のさまざまなSQLServerの追加に関連する歓迎すべき追加を見てみましょう。

    他に何が新しいのですか?

    SQL Server 2016

    セットアップ中の専用タブ

    • このエディションでは、SQLServerにセットアップワークフロー中のTempDB構成専用のタブがあります
    • SQL Server 2016のインストールおよびセットアップウィザードには、SQLServerのインストール時に十分な数のTempDBデータファイルを確保する機能が組み込まれています。 CPUコアの数を検出し、最大8個のTempDBデータファイルを自動的に作成します。SQLServerのセットアップ後にこの数を増やすことができます。

    ファイルの即時初期化

    • SQL Serverは、初期セットアップ中、および実稼働環境でファイルサイズが大きくなったときに、TempDBにディスク領域を割り当てる必要があります。この割り当ては、2つの方法で可能です。最初の方法は、スペースを割り当てる前にゼロを書き込んで未使用のディスクスペースを初期化することです。 2番目の方法は、TempDBの拡張用にファイルスペースを即座に割り当てることです。
    • 最初の方法では、SQL Serverは、各論理ディスククラスターを初期化することにより、ディスクを集中的に使用する操作を実行する必要があります。この方法では、TempDBを必要とするサーバーで実行されているプロセスが待機しなければならず、ボトルネックが発生する可能性があります。
    • 代わりにファイルスペースを即座に割り当てることを選択した場合、SQL Serverは、ディスクスペースを初期化せずに、自動拡張用のスペースを即座に割り当てます。これにより、自動拡張要件があるたびにディスクI / Oが削減され、スループットとパフォーマンスが向上します。以前のエディションではIFIをオンにすることは可能でしたが、面倒なプロセスでした。このエディションのSQLServerでは、サーバーのセットアップ時にIFIをセットアップする方が簡単です。
    • トレースフラグ1117と1118は冗長です

    SQL Server 2017

    • SQL Server 2017より前は、セットアップ時にTempDBデータファイルごとに1 GBを超える容量を割り当てることはできませんでした。つまり、セットアップの完了後にTempDBファイルのサイズを増やす必要がありました。このバージョンでは、セットアップ中にTempDBデータファイルに最大256GBを割り当てることができます。

    TempDBの監視

    TempDBを追跡するのは難しい場合があります。 TempDBの競合があるかどうかをどのように判断できますか?ユーザーオブジェクト、バージョンストア、または内部オブジェクトに何が割り当てられていますか?これらは時間の経過とともにどのように傾向がありますか?どのセッションがTempDBをどの程度消費していますか? Spotlight Cloudを使用すると、これらの質問に簡単に答えることができます。 SQL Serverのパフォーマンスのすべての側面を24時間年中無休で監視し、パフォーマンスの問題に取り組むための詳細な分析ワークフローを提供します。 TempDBを長期にわたって追跡し、構成に関する自動化されたエキスパートアドバイザリを取得します。


    SaaSソリューションとして、SpotlightCloudはセットアップと構成が簡単です。最大1年分のパフォーマンスデータを保持し、卓越したチューニングの洞察を提供します。パフォーマンスの問題は、根本原因分析により数秒で解決できます。複雑なスクリプトを掘り下げるのにこれ以上時間を無駄にしないでください–今すぐ30日間のトライアルを開始してください。今から一流のSQLServerパフォーマンス監視が開始されます。


    1. SQL Server(T-SQL)でのSPACE()関数のしくみ

    2. SQLServerでビューを暗号化する方法

    3. ODP.NET2.111とODP.NET4.112を同じマシンに並べてインストールし、両方が同じデータベースサーバーを指すようにする方法

    4. SQL構文を使用して主キー制約を変更するにはどうすればよいですか?