Microsoft アカウントでサインイン
サインインするか、アカウントを作成します。
こんにちは、
Select a different account.
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

現象

Microsoft SQL Server を実行しているサーバーでは、サーバーの負荷が高い場合、重大なブロックに気付くことになります。 動的管理ビュー [sys. dm_exec_request または dm_os_waiting_tasks] は、これらの要求またはタスクがtempdbリソースを待機していることを示します。 さらに、待機の種類は PAGELATCH_UP で、待機リソースはtempdb内のページを参照します。これらのページは、2:1:1、2:1:3 などの形式である場合があります ( tempdbの PFS と SGAM ページ)。

注: ページが8088で割り切れない場合は、PFS ページです。 たとえば、ページ2:3:905856 はtempdbの file_id = 3 の PFS です。

Tempdbは、次の操作で広く使用されます。

  • Repetative の一時テーブル (ローカルまたはグローバル) の作成とドロップの操作を行います。

  • 記憶域でtempdbを使うテーブル変数。

  • カーソルに関連付けられている作業テーブル。

  • ORDER BY 句に関連付けられている作業テーブル。

  • GROUP BY 句に関連付けられている作業テーブル。

  • ハッシュプランに関連付けられている作業ファイル。

これらのアクティビティによって競合の問題が発生する可能性があります。

原因

Tempdbデータベースが頻繁に使用されていると、SQL Server がページを割り当てようとしたときに競合が発生する可能性があります。 競合の程度によっては、 tempdbに関連するクエリや要求が一時的に応答しなくなることがあります。

オブジェクトの作成時には、2つのページを混合エクステントから割り当てて、新しいオブジェクトに割り当てる必要があります。1ページはインデックスアロケーションマップ (IAM) 用で、2つ目はオブジェクトの最初のページです。SQL Server は、共有グローバルアロケーションマップ (SGAM) ページを使って、混合エクステントを追跡します。各 SGAM ページは、約 4 gb のデータを追跡します。 混在エクステントからページを割り当てるには、SQL Server は [ページの空き領域 (PFS)] ページをスキャンして、どの混合ページを割り当てるかを決定する必要があります。PFS ページは、すべてのページで利用可能な空き領域を追跡し、各 PFS ページは8000ページについて追跡します。PFS と SGAM ページを変更するには、適切な同期が維持されます。これにより、短時間の他の修飾子が停止する可能性があります。 SQL Server では、混合ページを検索して割り当てると、常に同じファイルと SGAM ページでスキャンが開始されます。これにより、複数のページの割り当てが進行しているときに、SGAM ページで競合が複雑になります。これにより、「現象」セクションに記載されている問題が発生する可能性があります。 割り当て解除アクティビティでも、ページを変更する必要があります。これは競合の増加につながります。 SQL Server (SGAM、GAM、PFS、IAM) で使用されるさまざまな割り当てメカニズムの詳細については、「参照」セクションを参照してください。

詳細情報

サイズが同じ tempdb データファイルの数を増やす

たとえば、tempdb の1つのデータファイルサイズtempdbが 8 gb であり、ログファイルのサイズが 2 gb の場合、データファイルの数を 8 (それぞれ 1 gb) に増やして、ログファイルをそのままにしておくことをお勧めします。別々のディスクに異なるデータファイルを用意すると、パフォーマンスが向上します。ただし、これは必須ではありません。同じディスクボリューム上でファイルを共存させることができます。 Tempdb データファイルの最適な数は、 tempdbtempdbで見られる競合の程度によって異なります。まず、 tempdbを構成することができます。少なくとも SQL Server に割り当てられている論理プロセッサの数と等しい。ハイエンドシステムの場合、開始番号は 8 (8) にすることができます。競合が軽減されない場合は、データファイルの数を増やす必要がある場合があります。 データファイルのサイズを同じにすることをお勧めします。SQL Server 2000 Service Pack 4 (SP4) では、混合ページの割り当てにラウンドロビンアルゴリズムを使用する修正プログラムを導入しました。このように改善されたため、2つ以上のファイルが存在する場合、開始ファイルは連続して混在するページの割り当てごとに異なります。SGAM の新しい割り当てアルゴリズムは、純粋なラウンドロビン方式であり、縦横比を維持することはできません。すべてのtempdbデータファイルを同じサイズで作成することをお勧めします。   

Tempdb データファイル数の増加による競合の削減

次の一覧では、サイズが同じ tempdb データファイルの数を増やすことで競合を軽減する方法について説明しtempdbます。

  • Tempdbにデータファイルが1つ含まれている場合は、1つの GAM ページと、スペースの 4 GB ごとに1つの SGAM ページしかありません。

  • Tempdbのサイズが同じデータファイルの数を増やすと、各データファイルの1つ以上の GAM ページと SGAM ページが効率的に作成されます。

  • GAM の割り当てアルゴリズムは、相対的な塗りつぶしを保持しながら、ラウンドロビン形式でファイルの数から1つのエクステント (連続した8ページ) を割り当てることができます。 したがって、同じサイズの10個のファイルがある場合は、最初の割り当ては File1、File2 からの2番目の割り当て、3番目の File3 などのようになります。

  • GAM がページを割り当てているため、一度に8ページがフルとマークされているため、PFS ページのリソースの競合が削減されます。

トレースフラグの実装による競合の低減

次の一覧は、トレースフラグ-T1118を使用して競合を軽減する方法を示しています。

  • -T1118はサーバー全体の設定です。

  • Sql server がリサイクルされた後でもトレースフラグが有効なままになるように、SQL Server のスタートアップパラメーターに [ T1118トレースフラグを含めます。

  • -[-T1118 ] は、サーバー上のほぼすべての1ページの割り当てを削除します。

  • 1つのページ割り当てのほとんどを無効にすることで、SGAM ページでの競合を減らすことができます。

  • -T1118が有効になっている場合、すべての新しい割り当ては GAM ページ (2:1:2 など) から、オブジェクトの最初の8ページ (8) ページに対する1つのページではなく、1つのオブジェクトに対して同時に割り当てられます (例:)。

  • IAM ページでは、[ T1118 ] がオンになっている場合でも、SGAM ページからの単一ページの割り当てが引き続き使用されます。 ただし、ホットフィックス8.00.0702 と拡張されたtempdbデータファイルとを組み合わせて使用すると、最終的な結果は SGAM ページでの競合が軽減されます。 スペースの問題については、次のセクションを参照してください。

不都合

-T1118を使用すると、次の条件に該当する場合、データベースサイズの増加が表示されることがあります。

  • ユーザーデータベースで新しいオブジェクトが作成されます。

  • 新しい各オブジェクトは、64 KB 以下の記憶域を占有します。

これらの条件が満たされている場合、8 KB の領域のみを必要とするオブジェクトに 64 KB (8 ページ * 8 kb = 64 KB) を割り当てることができます。これにより、56 KB の記憶域を浪費することになります。 ただし、新しいオブジェクトがその有効期間内に 64 KB (8 ページ) を超える値を使用している場合、トレースフラグには欠点はありません。 そのため、最悪のケースのシナリオでは、SQL Server は1つのページよりも大きくなることのない新しいオブジェクトに対してのみ、最初の割り当て中に 7 (7) の追加ページを割り当てることがあります。

参照情報

SQL Server のインスタンスおよび SQL Server 製品のバージョンで、この条件を自動的にチェックする製品またはツールの詳細については、次の表を参照してください

ルールソフトウェア

ルール タイトル

ルールの説明

ルールが評価される対象である製品バージョン

System Center Advisor

SQL Server データベース構成: tempdb データファイルの数が原因でブロッキングが発生することがある

System Center Advisor は、tempdb データベースに対して構成されているデータファイルの数を確認します。 1つしか存在せず、SQL Server を実行しているサーバーで複数のプロセッサが使用されている場合は、この警告が生成されます。 この記事の情報を確認して、tempdb データベースにさらにデータファイルを追加します。

SQL Server 2008 SQL Server 2008 R2 SQL Server 2012

ヘルプを表示

スキルを磨く

トレーニングの探索 >

新機能を最初に入手

Microsoft Insider に参加する >

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

ご意見をいただきありがとうございます。

×