メモリ構成オプションを使用したサーバー パフォーマンスの最適化
Microsoft SQL Server 2005 のメモリ マネージャ コンポーネントを使用すると、SQL Server で使用できるメモリを手動で管理する必要がなくなります。SQL Server が起動すると、オペレーティング システムと他のアプリケーションが現在使用しているメモリ量に基づき、メモリ マネージャは割り当てるメモリ量を動的に決定します。コンピュータと SQL Server の負荷が変化すると、割り当てられるメモリも変化します。詳細については、「メモリ アーキテクチャ」を参照してください。
メモリの使用方法を設定し、サーバーのパフォーマンスに影響を与えるには、以下のサーバー構成オプションを使用できます。
- min server memory
- max server memory
- max worker threads
- index create memory
- min memory per query
min server memory サーバー構成オプションでは、設定済みの最小サーバー メモリに達した場合に、そのしきい値を下回るメモリが SQL Server によって解放されないようにすることができます。この構成オプションは、使用している SQL Server のサイズと動作に合わせて特定の値に設定できます。この値は、SQL Server のパフォーマンスに影響を与えるほど大量のメモリが SQL Server に要求されないように適切な値に設定する必要があります。
maxservermemory サーバー構成オプションでは、SQL Server の起動時と実行中に割り当てることができる最大メモリ量を指定できます。SQL Server と同時に複数のアプリケーションを実行し、これらのアプリケーションの実行に十分なメモリを確保したい場合、この構成オプションを特定の値に設定できます。他のアプリケーション (Web サーバー、電子メール サーバーなど) から必要なときにのみメモリが要求される場合は、maxservermemory サーバー構成オプションを設定しないでください。SQL Server はそれらのアプリケーションに対し、必要に応じてメモリを解放します。ただし、多くのアプリケーションは、起動時に利用可能なメモリをできるだけ使用し、その後に必要な場合でも追加のメモリを要求しません。このように動作するアプリケーションが SQL Server と同時に同じコンピュータで実行されている場合、アプリケーションの要求するメモリが SQL Server に割り当てられないようにするために、maxservermemory サーバー構成オプションを適切な値に設定します。
min server memory および max server memory サーバー構成オプションに同じ値を設定しないでください。同じ値に設定すると、SQL Server に割り当てられるメモリの量が固定されます。最終的には、動的メモリ割り当ての方がパフォーマンス全体の向上につながります。詳細については、「サーバー メモリ オプション」を参照してください。
maxworkerthreads サーバー構成オプションでは、SQL Server に接続されたユーザーのサポートに使用するスレッド数を指定します。既定値 (255) は、一部の環境の同時ユーザー数には多少大きすぎることがあります。各ワーカー スレッドは、使用されない (割り当てられるワーカー スレッドより同時接続の方が少ないため) 場合でも割り当てられます。そのため、バッファ キャッシュなど、他の操作の方が有効に活用できるメモリ リソースも使用されないことがあります。通常、この構成値は同時接続の数に設定する必要がありますが、32727 を超えることはできません。同時接続は、ログイン接続とは異なります。SQL Server のインスタンスに必要なワーカー スレッドのプールは、そのインスタンスでバッチを同時に実行しているユーザー接続数に対処できるだけの大きさがあれば十分です。既定値を超える数にワーカー スレッドを増やすと、サーバー パフォーマンスが低下する可能性があります。詳細については、「max worker threads オプション」を参照してください。
indexcreatememory サーバー構成オプションは、インデックス作成中に並べ替え操作で使用されるメモリ量を制御します。通常、稼働中のシステムではインデックス作成は頻度の少ない作業であり、多くの場合、閑散時に実行が予定されるジョブです。したがって、インデックスの作成が頻繁でなく、閑散時に行われる場合、この値を増やすとインデックス作成のパフォーマンスが向上できます。ただし、minmemoryperquery 構成オプションの値は小さい数にします。そうすれば、要求したすべてのメモリが利用できない場合でも、インデックス作成ジョブは起動します。詳細については、「index create memory オプション」を参照してください。
min memory per query サーバー構成オプションでは、クエリの実行に割り当てるメモリの最小量を指定します。システム上で同時に多数のクエリを実行する場合は、min memory per query の値を増やすことにより、対象範囲の広い並べ替え処理やハッシュ処理など、メモリ負担の大きいクエリのパフォーマンスを向上させることができます。minmemoryperquery サーバー構成オプションは、特に稼働率が高いシステムではあまり大きい値を設定しないでください。これは、要求されたメモリ最小量を確保するか、query wait サーバー構成オプションに指定された値を超えるまで、クエリは待機する必要があるためです。クエリの実行に最小限必要として指定されている量よりも多くのメモリが実際に使用できる場合、そのクエリがメモリを有効に利用できるという条件の基に、クエリで追加のメモリが利用可能になります。詳細については、「min memory per query オプション」および「query wait オプション」を参照してください。
参照
処理手順
最小クエリ メモリを設定する方法 (SQL Server Management Studio)
概念
メモリ使用率の監視
最小および最大サーバー メモリの効果
大規模データベースのメモリ管理