現象
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でデータファイルの数を増やすと、ディスクの帯域幅が最大化され、アロケーション構造の競合が少なくなります。 一般的な規則として、論理プロセッサの数が 8 (8) 以下の場合は、論理プロセッサと同じ数のデータファイルを使用します。 論理プロセッサの数が 8 (8) を超える場合は、8個のデータファイルを使用します。 競合が継続する場合は、競合が許容されるレベルまで減少するまで、4 (4) の倍数でデータファイルの数を増やします。 または、ワークロードまたはコードに変更を加えます。
-
次の TechNet トピックでベストプラクティスの推奨事項を実施することを検討してください。
-
上記の手順を実行しても、割り当ての競合を減らすことはできません。また、競合が SGAM ページで行われている場合は、trace flag -T1118を実装します。 このトレースフラグでは、SQL Server は各データベースオブジェクトに完全なエクステントを割り当てます。これにより、SGAM ページ上の競合を回避できます。 注意事項
-
このトレースフラグは、SQL Server のインスタンス上のすべてのデータベースに影響します。 割り当ての競合が SGAM ページにあるかどうかを判断する方法については、Technet の「 SQL Server 2005 ページで tempdb を操作する」のサブトピック「DML 操作によって発生する競合を監視する」を参照してください。
-
SQL Server 2016 以降では、これらの構成変更の一部が自動的に行われるため、ユーザーの操作は必要ありません。 詳細については、次の CSS SQL Server エンジニアのブログ記事を参照してください。
-
-
最新の更新プログラムを利用するには、SQL Server 2016 および2017に関連する CU を適用します。 SQL Server 2016 と SQL Server 2017 での競合を減らすために、改善が加えられました。 この修正プログラムでは、すべてのtempdbデータファイルにわたるラウンドロビンの割り当てに加えて、同じデータファイル内の複数の pfs ページでラウンドロビンの割り当てが実行され、pfs ページの割り当てが向上しています。 詳細については、次のコンテンツを参照してください。
-
Microsoft サポート技術情報: SQL Server 2014、2016、2017での4099472 PFS ページのラウンドロビンアルゴリズムの改善
-
MSSQL トラチームブログ: SQL Server tempdb でのファイルとトレースのフラグと更新
-
詳細情報
サイズが同じ 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) の追加ページを割り当てることがあります。
参照情報
-
328551 Tempdb データベースの同時実行性の向上
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 |