次の方法で共有


affinity mask サーバー構成オプション

Note

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。 代わりに ALTER SERVER CONFIGURATION (Transact-SQL) を使用します。

マルチタスクを実行するため、 Microsoft Windows では、プロセス スレッドが別のプロセッサに移動される場合があります。 オペレーティング システムにとっては効率的であっても、このアクティビティで各プロセッサのキャッシュに繰り返しデータが再読み込みされるため、システムの負荷が高くなり、SQL Server のパフォーマンスが低下する場合があります。 このような状況では、特定のスレッドにプロセッサを割り当てることで、プロセッサの再読み込みを回避し、プロセッサ間でのスレッドの移行回数を少なくできるため、コンテキストの切り替えを減らしてパフォーマンスを改善できます。このようなスレッドとプロセッサ間の関連付けを "プロセッサ関係 (processor affinity)" と言います。

SQL Server では、affinity mask (関係マスク、別名 CPU affinity mask) と affinity I/O mask (関係 I/O マスク) の 2 つの affinity mask オプションにより、プロセッサ関係をサポートします。 affinity I/O mask オプションの詳細については、「 affinity Input-Output mask サーバー構成オプション」を参照してください。 プロセッサが 33 から 64 個のサーバーに対して CPU および I/O affinity をサポートするには、 affinity64 mask サーバー構成オプション および affinity64 I/O mask サーバー構成オプションがそれぞれ必要になります。

Note

33 から 64 個までのプロセッサを搭載しているサーバーでの関係 (affinity) は、64 ビット オペレーティング システムでのみサポートされます。

affinity mask オプションは、SQL Server の以前のリリースでも提供されており、動的に CPU 関係を制御します。

SQL Server では、SQL Server インスタンスを再起動しなくても affinity mask オプションを構成できます。 sp_configure を使用する場合は、構成オプションを設定した後、RECONFIGURE または RECONFIGURE WITH OVERRIDE のどちらかを実行する必要があります。 SQL Server Expressを使用している場合、アフィニティ マスク オプションを変更するには再起動が必要です。

関係マスクに対する変更は動的に行われるため、SQL Server 内のプロセス スレッドをバインドする CPU スケジューラのオンデマンドでの起動とシャットダウンが可能になります。 この処理は、サーバーの状態の変化に伴って発生する可能性があります。 たとえば、SQL Server の新しいインスタンスをサーバーに追加したときに、プロセッサの負荷を再分散するために、affinity mask オプションを調整する必要が生じる場合があります。

SQL Server が新しい CPU スケジューラを有効にし、既存の CPU スケジューラを無効にするためには、関係ビットマスク (affinity bitmask) を変更する必要があります。 関係ビットマスクを変更すると、新しいスケジューラまたは継続して使用されているスケジューラで新しいバッチを処理できるようになります。

新しい CPU スケジューラを起動するために、SQL Server により新しいスケジューラが作成され、これが標準のスケジューラのリストに追加されます。 新しいスケジューラは、新しく受信するバッチ専用と見なされます。 現在のバッチは、これまでと同じスケジューラで実行されます。 ワーカーは、ワーカーが解放されたとき、または新しいワーカーが作成されたときに、新しいスケジューラに移行されます。

スケジューラをシャットダウンするには、スケジューラ上のすべてのバッチが操作を完了し、終了される必要があります。 シャットダウンされたスケジューラは、オフラインとしてマークされ、新しいバッチがこのスケジューラにより処理されないようにします。

新しいスケジューラが追加または削除されても、ロック モニターやチェックポイント、システム タスク スレッド (DTC の処理)、シグナル プロセスなどの永続的なシステム タスクは、サーバーが稼働している間はスケジューラ上で継続して実行されます。 このような永続的なシステム タスクについては、動的な移行は行われません。 これらのシステム タスクのプロセッサ負荷をスケジューラ間で再配布するには、SQL Server インスタンスを再起動する必要があります。 SQL Server が永続的なシステム タスクに関連付けられているスケジューラをシャットダウンした場合、タスクはオフラインになったスケジューラ上で引き続き実行されます (移行はされません)。 このスケジューラは、変更された関係マスク内のプロセッサにバインドされているため、変更前に関係付けられていたプロセッサに負荷を分散させることはできません。 オフラインのスケジューラが増えたとしても、システムの負荷には目立った影響はありません。 負荷が大幅に増大した場合は、データベース サーバーを再起動して、これらのタスクを再構成する必要があります。

I/O 関係タスク (レイジーライターやログライターなど) は、直接 I/O 関係マスクの影響を受けます。 レイジーライターおよびログライター タスクは、関係が設定されていなければ、ロック モニターやチェックポイントなど他の永続タスクに定義されているものと同じルールに従います。

新しい関係マスクを確実に有効にするために、RECONFIGURE コマンドでは、通常の CPU 関係および I/O 関係が相互に排他的であるかどうかの確認を行います。 そうでない場合は、クライアント セッションとSQL Serverエラー ログにエラー メッセージが報告され、そのような設定が推奨されないことを示します。 RECONFIGURE WITH OVERRIDE を実行すると、相互に排他的ではない CPU 関係および I/O 関係が許可されます。

存在しない CPU にマップしているような関係マスクを指定した場合、RECONFIGURE コマンドによりクライアント セッションと SQL Server エラー ログの両方にエラー メッセージが報告されます。 この場合、RECONFIGURE WITH OVERRIDE オプションを使用しても影響がなく、同じ構成エラーが再度報告されます。

また、Windows 2000 または Windows Server 2003 オペレーティング システムによって割り当てられた特定のワークロード割り当てプロセッサからSQL Serverアクティビティを除外することもできます。 プロセッサを表すビットを 1 に設定している場合、SQL Server データベース エンジンは、このプロセッサをスレッド割り当ての対象として選択します。 0 (既定値) に設定 affinity mask すると、Microsoft Windows 2000 または Windows Server 2003 スケジュール アルゴリズムによってスレッドのアフィニティが設定されます。 0 以外の値に設定affinity maskすると、SQL Serverアフィニティは値を、選択対象のプロセッサを指定するビットマスクとして解釈します。

SQL Serverスレッドを特定のプロセッサで実行しないように分離することで、Microsoft Windows 2000 または Windows Server 2003 は、Windows に固有のプロセスのシステムの処理をより適切に評価できます。 たとえば、SQL Server のインスタンスを 2 つ (インスタンス A および B) を実行する 8 CPU サーバーで、システム管理者は affinity mask オプションを使用して最初の 4 個の CPU をインスタンス A に割り当て、残りの 4 個をインスタンス B に割り当てることができます。33 プロセッサ以上を構成する場合は、affinity mask および affinity64 mask の両方を設定します。 affinity mask の値は、以下のとおりです。

  • 1 バイトの affinity mask はマルチプロセッサ コンピューターの最大 8 個の CPU に対応します。

  • 2 バイトの affinity mask はマルチプロセッサ コンピューターの最大 16 個の CPU に対応します。

  • 3 バイトの affinity mask はマルチプロセッサ コンピューターの最大 24 個の CPU に対応します。

  • 4 バイトの affinity mask はマルチプロセッサ コンピューターの最大 32 個の CPU に対応します。

  • 33 個以上の CPU に対応するには、最初の 32 個の CPU に 4 バイトの affinity mask を構成し、残りの CPU に 4 バイトの affinity64 mask を構成します。

プロセッサ アフィニティSQL Server設定は特殊な操作であるため、必要な場合にのみ使用することをお勧めします。 通常は、Microsoft Windows 20000 または Windows Server 2003 の既定の関係 (affinity) で、最適なパフォーマンスが得られます。 また、関係マスクを設定する場合は、他のアプリケーションの CPU 要件も考慮する必要があります。 詳細については、Windows オペレーティング システムのマニュアルを参照してください。

Note

各プロセッサの利用状況を表示して分析するには、Windows のシステム モニターを使用します。

affinity I/O mask オプションを指定する場合は、affinity mask 構成オプションの設定を考慮して使用する必要があります。 affinity mask スイッチと affinity I/O mask オプションの両方で同じ CPU を有効にしないようにしてください。 各 CPU に対応するビットは、次の 3 つの状態のうちのいずれかに設定します。

  • affinity mask オプションと affinity I/O mask オプションの両方で 0。

  • affinity mask オプションでは 1、affinity I/O mask オプションでは 0。

  • affinity mask オプションでは 0、affinity I/O mask オプションでは 1。

注意事項

Windows オペレーティング システムでの CPU 関係の構成と、 SQL Serverでの関係マスクの構成は、同時に行わないようにしてください。 この 2 つの設定は、同じ効果をねらったものであり、これらの構成間に一貫性がない場合は、予期しない結果を招く可能性があります。 SQL Server の CPU 関係を構成する場合は、SQL Server の sp_configure オプションを使用する方法が最適です。

affinity mask オプションの設定例として、たとえば、ビット 1、2、および 5 を 1 に設定し、ビット 0、3、4、6、および 7 を 0 に設定して、プロセッサ 1、2、および 5 を使用可能として選択する場合は、16 進値 0x26 または 10 進値 38 を指定します。 ビットの番号は右から左に数えます。 affinity mask オプションは、プロセッサを 0 から 31 までカウントします。したがって、次の例のカウンターの 1 は、サーバー上の 2 個目のプロセッサを表しています。

sp_configure 'show advanced options', 1;  
RECONFIGURE;  
GO  
sp_configure 'affinity mask', 38;  
RECONFIGURE;  
GO  

8 CPU システムでの affinity mask の値は以下のようになります。

10 進値 2 進ビット マスク SQL Server スレッドを有効にするプロセッサ
1 00000001 0
3 00000011 0 と 1
7 00000111 0、1、および 2
15 00001111 0、1、2、および 3
31 00011111 0、1、2、3、および 4
63 00111111 0、1、2、3、4、および 5
127 01111111 0、1、2、3、4、5、および 6
255 11111111 0、1、2、3、4、5、6、および 7

affinity mask オプションは拡張オプションです。 sp_configure システム ストアド プロシージャを使用して設定を変更する場合は、show advanced options が 1 に設定されている場合にのみ変更affinity maskできます。 Transact-SQL の RECONFIGURE コマンドの実行が完了すると、新しい設定は、SQL Server インスタンスを再起動しなくてもすぐに有効になります。

NUMA (Non-uniform Memory Access)

NUMA (non-uniform memory access) ベースのハードウェアを使用し、affinity mask を設定する場合、ノード内のすべてのスケジューラがそのノードの CPU に関連付けられます。 affinity mask を設定しない場合、各スケジューラは NUMA ノード内の CPU のグループに関連付けられ、NUMA ノード N1 にマップされたスケジューラはノード内の任意の CPU で作業をスケジュールできますが、他のノードに関連付けられた CPU ではスケジュールできません。

1 つの NUMA ノードで実行中のすべての操作は、そのノードのバッファー ページのみを使用できます。 操作を複数のノードの CPU で並行して実行する場合、メモリは関連する任意のノードから使用できます。

ライセンスに関する問題点

動的関係は、CPU ライセンスにより厳密に制限されます。 SQL Serverでは、ライセンス ポリシーに違反するアフィニティ マスク オプションの構成は許可されません。

スタートアップ

指定したアフィニティ マスクが、SQL Serverの起動時またはデータベース接続中にライセンス ポリシーに違反した場合、エンジン レイヤーはスタートアップ プロセスまたはデータベースのアタッチ/復元操作を完了し、affinity mask のsp_configure実行値を 0 にリセットし、エラー メッセージをSQL Serverエラー ログに発行します。

再構成

Transact-SQL の RECONFIGURE コマンドの実行時に、指定された関係マスクがライセンス ポリシーに違反する場合は、エラー メッセージがクライアント セッションと SQL Server エラー ログに報告され、データベース管理者に関係マスクの再構成が求められます。 この場合、RECONFIGURE WITH OVERRIDE コマンドの実行が許可されません。

参照

リソースの利用状況の監視 (システム モニター)
RECONFIGURE (Transact-SQL)
サーバー構成オプション (SQL Server)
sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)