web-dev-qa-db-ja.com

SQL Serverの塗りつぶし戦略は、マルチファイルtempdbとマルチファイル(非tempdb)ファイルグループで同じですか?

単一のクエリからのtempdbI/Oは複数のtempdbファイルに分割されますか? (もちろん、tempdbが複数のファイルを使用するように構成されていると仮定します!)

Tempdb以外のデータベースの場合、 [〜#〜] mdsn [〜#〜] は、はい、新しく追加されたデータはファイルグループ内の複数のファイルに分散されると言っているようです。

ファイルグループは、各ファイルグループ内のすべてのファイルに比例した塗りつぶし戦略を使用します。データがファイルグループに書き込まれると、SQL Serverデータベースエンジンは、すべてのデータを最初のファイルにいっぱいになるまで書き込むのではなく、ファイルの空き領域に比例した量をファイルグループ内の各ファイルに書き込みます。次に、次のファイルに書き込みます。たとえば、ファイルf1に100 MBの空き容量があり、ファイルf2に200 MBの空き容量がある場合、1つのエクステントがファイルf1から割り当てられ、2つのエクステントがファイルf2から割り当てられます。このようにして、両方のファイルがほぼ同時にいっぱいになり、単純なストライピングが実現されます。

これと同じ塗りつぶし戦略がtempdbに適用されますか?

そして、この答えはクエリのタイプに依存しますか?並列対非並列?または、tempdb I/Oの種類に基づいて答えが異なります。私が作成した一時的なものと、データベースエンジンによる作業テーブルまたは流出のためのtempdbの使用について

1
Justin Grant

これと同じ塗りつぶし戦略がtempdbに適用されますか?

はい、そうです。

あなた自身にそれを証明するために、あなたはここで説明されているものと同様のテストをすることができます:

SQL Serverプロポーショナルフィルアルゴリズムの例

つまり、一時テーブルにある程度のデータを入力し、すべてのtempdbファイルに使用されるスペースを確認します。

ここでは結論のみを引用します。

ファイルグループは、各ファイルグループ内のすべてのファイルにわたって比例フィル戦略を使用し、ラウンドロビンアルゴリズムを使用して、ファイル内の空き領域とファイルグループ内の各ファイルに比例した量を書き込みます。

SQL Serverでの比例フィルとラウンドロビンの動作を理解することは、ユーザーデータベースだけでなく、特にtempdbの場合にも重要です。 SQL Serverのベストプラクティスは、tempdb PFSとSGAMの競合を軽減するために、複数のtempdbデータファイルを用意することです。 tempdbデータファイルのサイズが不均一である場合、エクステントの割り当てが大きいサイズのデータ​​ファイルで重くなることは容易に想像できます。この構成でもホットスポットが発生し、tempdbの競合は軽減されません。

そして、ここにさらなる読み物があります: Paul Randalによってtempdbにデータファイルを正しく追加する

とりわけ、Paulは、既存のファイルサイズに一致するようにファイルを正しく追加する方法を説明しています。その理由は、比例塗りつぶしアルゴリズムです。

4
sepupic