SQL Server へのメモリ割り当てを減らすと tempdb 使用量が増える??

 

神谷 雅紀
Escalation Engineer

SQL Server へのメモリ割り当てを減らすと tempdb の使用量が増えることはあるか?

SQL Server へのメモリ割り当てを減らすと tempdb の使用量が増えることはあります。

 

なぜ?

tempdb には、一時テーブルやテーブル変数を格納したりバージョニング情報を格納するなどの用途がありますが、そのような用途のひとつに、メモリに入りきらなくなったデータを一時的に格納するという用途があります。最もよく知られているのは、ソート中のデータです。

ソートは、対象となるデータ量が少なければ、すべてメモリ上で行われます。しかし、データ量が多く、メモリ上だけでは処理しきれない場合には、中間結果が tempdb に書き出されます。ソートのために使用可能なメモリが多ければ、tempdb に書き出される可能性は低くなり、また、書き出されたとしても書き出されるデータ量は小さくなります。同じデータ量のソートが行われるのであれば、SQL Server へのメモリ割り当てを減らすことでソートのために使用可能なメモリ量も少なくなりますので、tempdb が使用される可能性は高くなり、また、書き出されるデータ量も多くなります。その結果、tempdb の使用量が増えます。

これと同じことは、リソースガバナを使用してメモリを制限した場合にも言えます。例えば、リソースガバナを使用して MAX_MEMORY_PERCENT を 50% に設定した場合、そのリソースプールに割り当てられたワークロードグループは、そのような制限がなかった時に比べて使用可能なメモリが半分になるため、SQL Server へのメモリ割り当てを減らした場合と同じように、そのワークロードグループは tempdb を多く使うようになります。その結果、tempdb の使用量が増えます。

以上のとおり、SQL Server へのメモリ割り当てを減らしたり、リソースガバナでメモリを制限する場合には、それに伴って tempdb の使用量が増える可能性があることは、考慮しておいた方がいいでしょう。