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

適用対象: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

注意

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。This feature will be removed in a future version of Microsoft SQL Server. 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. 代わりに ALTER SERVER CONFIGURATION (Transact-SQL) を使用します。Use ALTER SERVER CONFIGURATION (Transact-SQL) instead.

マルチタスクを実行するため、 MicrosoftMicrosoft Windows では、プロセス スレッドが別のプロセッサに移動される場合があります。To carry out multitasking, MicrosoftMicrosoft Windows sometimes move process threads among different processors. オペレーティング システムにとっては効率的であっても、この操作で各プロセッサのキャッシュに繰り返しデータが再読み込みされるため、システムの負荷が高くなり、 SQL ServerSQL Server のパフォーマンスが低下する場合があります。Although efficient from an operating system point of view, this activity can reduce SQL ServerSQL Server performance under heavy system loads, as each processor cache is repeatedly reloaded with data. このような状況では、特定のスレッドにプロセッサを割り当てることで、プロセッサの再読み込みを回避し、プロセッサ間でのスレッドの移行回数を少なくできるため、コンテキストの切り替えを減らしてパフォーマンスを改善できます。このようなスレッドとプロセッサ間の関連付けを "プロセッサ関係 (processor affinity)" と言います。Assigning processors to specific threads can improve performance under these conditions by eliminating processor reloads and reducing thread migration across processors (thereby reducing context switching); such an association between a thread and a processor is called processor affinity.

SQL ServerSQL Server では、affinity mask (別名 CPU affinity mask) と affinity I/O mask の 2 つの affinity mask オプションにより、プロセッサ関係をサポートします。supports processor affinity by means of two affinity mask options: affinity mask (also known as CPU affinity mask) and affinity I/O mask. affinity I/O mask オプションの詳細については、「 affinity Input-Output mask サーバー構成オプション」を参照してください。For more information on the affinity I/O maskoption, see affinity Input-Output mask Server Configuration Option. プロセッサが 33 から 64 個のサーバーに対して CPU および I/O affinity をサポートするには、 affinity64 mask サーバー構成オプション および affinity64 I/O mask サーバー構成オプションがそれぞれ必要になります。CPU and I/O affinity support for servers with 33 to 64 processors requires the additional use of the affinity64 mask Server Configuration Option and affinity64 Input-Output mask Server Configuration Option, respectively.

注意

33 から 64 個までのプロセッサを搭載しているサーバーでの関係 (affinity) は、64 ビット オペレーティング システムでのみサポートされます。Affinity support for servers with 33 to 64 processors is only available on 64-bit operating systems.

affinity mask オプションは、 SQL ServerSQL Serverの以前のリリースでも提供されており、動的に CPU 関係を制御します。The affinity mask option, which existed in earlier releases of SQL ServerSQL Server, dynamically controls CPU affinity.

SQL ServerSQL Serverでは、 SQL ServerSQL Serverインスタンスを再起動しなくても affinity mask オプションを構成できます。In SQL ServerSQL Server, the affinity mask option can be configured without requiring a restart of the instance of SQL ServerSQL Server. sp_configure を使用する場合は、構成オプションを設定した後、RECONFIGURE または RECONFIGURE WITH OVERRIDE のどちらかを実行する必要があります。When you are using sp_configure, you must run either RECONFIGURE or RECONFIGURE WITH OVERRIDE after setting a configuration option. SQL Server ExpressSQL Server Expressを使用している場合、affinity mask オプションを変更しても再起動は必要ありません。When you are using SQL Server ExpressSQL Server Express, changing the affinity mask option does require a restart.

関係マスク (affinity mask) に対する変更は動的に行われるため、 SQL ServerSQL Server内のプロセス スレッドをバインドする CPU スケジューラのオンデマンドでの起動とシャットダウンが可能になります。Changes to the affinity masks occur dynamically, allowing for on-demand startup and shutdown of the CPU schedulers that bind process threads within SQL ServerSQL Server. この処理は、サーバーの状態の変化に伴って発生する可能性があります。This can occur as conditions change on the server. たとえば、 SQL ServerSQL Server の新しいインスタンスをサーバーに追加したときに、プロセッサの負荷を再分散するために、affinity mask オプションを調整する必要が生じる場合があります。For example, if a new instance of SQL ServerSQL Server is added to the server, it may be necessary to make adjustments to the affinity mask option to redistribute processor load.

SQL ServerSQL Server が新しい CPU スケジューラを有効にし、既存の CPU スケジューラを無効にするためには、関係ビットマスク (affinity bitmask) を変更する必要があります。Modifications to the affinity bitmasks require SQL ServerSQL Server to enable a new CPU scheduler and disable the existing CPU scheduler. 関係ビットマスクを変更すると、新しいスケジューラまたは継続して使用されているスケジューラで新しいバッチを処理できるようになります。New batches can then be processed on the new or remaining schedulers.

新しい CPU スケジューラを起動するために、 SQL ServerSQL Server により新しいスケジューラが作成され、これが標準のスケジューラのリストに追加されます。To start a new CPU scheduler, SQL ServerSQL Server creates a new scheduler and adds it to the list of its standard schedulers. 新しいスケジューラは、新しく受信するバッチ専用と見なされます。The new scheduler is considered only for the new incoming batches. 現在のバッチは、これまでと同じスケジューラで実行されます。Current batches continue to run on the same scheduler. ワーカーは、ワーカーが解放されたとき、または新しいワーカーが作成されたときに、新しいスケジューラに移行されます。The workers migrate to the new scheduler as they free up, or as new workers are created.

スケジューラをシャットダウンするには、スケジューラ上のすべてのバッチが操作を完了し、終了される必要があります。Shutting down a scheduler requires all batches on the scheduler to complete their activities and exit. シャットダウンされたスケジューラは、オフラインとしてマークされ、新しいバッチがこのスケジューラにより処理されないようにします。A scheduler that has been shut down is marked as offline so that no new batch is scheduled on it.

新しいスケジューラが追加または削除されても、ロック モニターやチェックポイント、システム タスク スレッド (DTC の処理)、シグナル プロセスなどの永続的なシステム タスクは、サーバーが稼働している間はスケジューラ上で継続して実行されます。Whether a new scheduler is added or removed, the permanent system tasks such as lockmonitor, checkpoint, system task thread (processing DTC), and signal process continue to run on the scheduler while the server is operational. このような永続的なシステム タスクについては、動的な移行は行われません。These permanent system tasks do not dynamically migrate. スケジューラ間でこれらのシステム タスクのプロセッサ負荷を再分散するには、 SQL ServerSQL Server インスタンスを再起動する必要があります。To redistribute processor load for these system tasks across schedulers, it is necessary to restart the SQL ServerSQL Server instance. SQL ServerSQL Server が永続的なシステム タスクに関連付けられているスケジューラをシャットダウンした場合、タスクはオフラインになったスケジューラ上で引き続き実行されます (移行はされません)。If SQL ServerSQL Server attempts to shut down a scheduler associated with a permanent system task, the task continues to run on the offline scheduler (no migration). このスケジューラは、変更された関係マスク内のプロセッサにバインドされているため、変更前に関係付けられていたプロセッサに負荷を分散させることはできません。This scheduler is bound to the processors in the modified affinity mask and should not put any load on the processor it was affinitized with before the change. オフラインのスケジューラが増えたとしても、システムの負荷には目立った影響はありません。Having extra offline schedulers, should not significantly affect the load of the system. 負荷が大幅に増大した場合は、データベース サーバーを再起動して、これらのタスクを再構成する必要があります。If this is not the case, a database server reboot is required to reconfigure these tasks.

I/O 関係タスク (レイジーライターやログライターなど) は、直接 I/O 関係マスクの影響を受けます。The I/O affinity tasks (such as lazywriter and logwriter) are directly affected by the I/O affinity mask. レイジーライターおよびログライター タスクは、関係が設定されていなければ、ロック モニターやチェックポイントなど他の永続タスクに定義されているものと同じルールに従います。If the lazywriter and logwriter tasks are not affinitized, they follow the same rules defined for the other permanent tasks such as lockmonitor or checkpoint.

新しい関係マスクを確実に有効にするために、RECONFIGURE コマンドでは、通常の CPU 関係および I/O 関係が相互に排他的であるかどうかの確認を行います。To ensure that the new affinity mask is valid, the RECONFIGURE command verifies that the normal CPU and I/O affinities are mutually exclusive. 相互に排他的でない場合は、そのような設定は推奨されないことを示すエラー メッセージがクライアント セッションと SQL ServerSQL Server エラー ログに報告されます。If this is not the case, an error message is reported to the client session and to the SQL ServerSQL Server error log, indicating that such a setting is not recommended. RECONFIGURE WITH OVERRIDE を実行すると、相互に排他的ではない CPU 関係および I/O 関係が許可されます。Running RECONFIGURE WITH OVERRIDE options allows CPU and I/O affinities that are not mutually exclusive.

存在しない CPU にマップしているような関係マスクを指定した場合、RECONFIGURE コマンドによりクライアント セッションと SQL ServerSQL Server エラー ログの両方にエラー メッセージが報告されます。If you specify an affinity mask that attempts to map to a nonexistent CPU, the RECONFIGURE command reports an error message to both the client session and the SQL ServerSQL Server error log. この場合、RECONFIGURE WITH OVERRIDE オプションを使用しても影響がなく、同じ構成エラーが再度報告されます。Using the RECONFIGURE WITH OVERRIDE option has no effect in this case, and the same configuration error is reported again.

Windows 2000 または Windows Server 2003 オペレーティング システムにより特定のワークロード割り当てが割り当てられているプロセッサから、 SQL ServerSQL Server の動作を除外することもできます。You can also exclude SQL ServerSQL Server activity from processors assigned specific workload assignments by the Windows 2000 or Windows Server 2003 operating system. プロセッサを表すビットを 1 に設定している場合、 SQL ServerSQL Server データベース エンジンは、このプロセッサをスレッド割り当ての対象として選択します。If you set a bit representing a processor to 1, that processor is selected by the SQL ServerSQL Server Database Engine for thread assignment. affinity mask を 0 (既定値) に設定すると、Microsoft Windows 2000 または Windows Server 2003 のスケジューリング アルゴリズムにより、スレッドの関係 (affinity) が設定されます。When you set affinity mask to 0 (the default), the Microsoft Windows 2000 or Windows Server 2003 scheduling algorithms set the thread's affinity. affinity mask を 0 以外の値に設定すると、 SQL ServerSQL Server の関係 (affinity) により、選択可能なプロセッサを指定するビット マスクとしてその値が解釈されます。When you set affinity mask to any nonzero value, SQL ServerSQL Server affinity interprets the value as a bitmask that specifies those processors eligible for selection.

SQL ServerSQL Server スレッドを特定のプロセッサ上の実行から隔離すると、Microsoft Windows 2000 または Windows Server 2003 では、システムによる Windows 固有のプロセス処理を評価しやすくなります。By segregating SQL ServerSQL Server threads from running on particular processors, Microsoft Windows 2000 or Windows Server 2003 can better evaluate the system's handling of processes specific to Windows. たとえば、 SQL ServerSQL Server のインスタンスを 2 つ (インスタンス A および B) を実行する 8 CPU サーバーで、システム管理者は affinity mask オプションを使用して最初の 4 個の CPU をインスタンス A に割り当て、残りの 4 個をインスタンス B に割り当てることができます。33 プロセッサ以上を構成する場合は、affinity mask および affinity64 mask の両方を設定します。For example, on an 8-CPU server running two instances of SQL ServerSQL Server (instance A and B), the system administrator could use the affinity mask option to assign the first set of 4 CPUs to instance A and the second set of 4 to instance B. To configure more than 32 processors, set both the affinity mask and the affinity64 mask. affinity mask の値は、以下のとおりです。The values for affinity mask are as follows:

  • 1 バイトの affinity mask は、マルチプロセッサ コンピューターの最大 8 個の CPU に対応します。A one-byte affinity mask covers up to 8 CPUs in a multiprocessor computer.

  • 2 バイトの affinity mask は、マルチプロセッサ コンピューターの最大 16 個の CPU に対応します。A two-byte affinity mask covers up to 16 CPUs in a multiprocessor computer.

  • 3 バイトの affinity mask は、マルチプロセッサ コンピューターの最大 24 個の CPU に対応します。A three-byte affinity mask covers up to 24 CPUs in a multiprocessor computer.

  • 4 バイトの affinity mask は、マルチプロセッサ コンピューターの最大 32 個の CPU に対応します。A four-byte affinity mask covers up to 32 CPUs in a multiprocessor computer.

  • 33 個以上の CPU に対応するには、最初の 32 個の CPU に 4 バイトの affinity mask を構成し、残りの CPU に 4 バイトの affinity64 mask を構成します。To cover more than 32 CPUs, configure a four-byte affinity mask for the first 32 CPUs and up to a four-byte affinity64 mask for the remaining CPUs.

SQL ServerSQL Server プロセッサ関係を設定することは特別な操作なので、特に必要な場合にのみこのオプションを使用することをお勧めします。Because setting SQL ServerSQL Server processor affinity is a specialized operation, it is recommended that it be used only when necessary. 通常は、Microsoft Windows 20000 または Windows Server 2003 の既定の関係 (affinity) で、最適なパフォーマンスが得られます。In most cases, the Microsoft Windows 2000 or Windows Server 2003 default affinity provides the best performance. また、関係マスクを設定する場合は、他のアプリケーションの CPU 要件も考慮する必要があります。You should also consider the CPU requirements for other applications when setting the affinity masks. 詳細については、Windows オペレーティング システムのマニュアルを参照してください。For more information, see your Windows operating system documentation.

注意

各プロセッサの利用状況を表示して分析するには、Windows のシステム モニターを使用します。You can use the Windows System Monitor to view and analyze individual processor usage.

affinity I/O mask オプションを指定する場合は、affinity mask 構成オプションの設定を考慮して使用する必要があります。When specifying the affinity I/O mask option, you must use it in connection with the affinity mask configuration option. affinity I/O mask スイッチと affinity mask オプションの両方で同じ CPU を有効にしないようにしてください。Do not enable the same CPU in both the affinity mask switch and the affinity I/O mask option. 各 CPU に対応するビットは、次の 3 つの状態のうちのいずれかに設定します。The bits corresponding to each CPU should be in one of these three states:

  • affinity mask オプションと affinity I/O mask オプションの両方で 0。0 in both the affinity mask option and the affinity I/O mask option.

  • affinity mask オプションでは 1、affinity I/O mask オプションでは 0。1 in the affinity mask option and 0 in the affinity I/O mask option.

  • affinity mask オプションでは 0、affinity I/O mask オプションでは 1。0 in the affinity mask option and 1 in the affinity I/O mask option.

注意事項

Windows オペレーティング システムでの CPU 関係の構成と、 SQL ServerSQL Serverでの関係マスクの構成は、同時に行わないようにしてください。Do not configure CPU affinity in the Windows operating system and also configure the affinity mask in SQL ServerSQL Server. この 2 つの設定は、同じ効果をねらったものであり、これらの構成間に一貫性がない場合は、予期しない結果を招く可能性があります。These settings are attempting to achieve the same result, and if the configurations are inconsistent, you may have unpredictable results. SQL ServerSQL Server CPU 関係を構成する場合は、 SQL ServerSQL Serverの sp_configure オプションを使用する方法が最適です。CPU affinity is best configured using the sp_configure option in SQL ServerSQL Server.

Example

affinity mask オプションの設定例として、たとえば、ビット 1、2、および 5 を 1 に設定し、ビット 0、3、4、6、および 7 を 0 に設定して、プロセッサ 1、2、および 5 を使用可能として選択する場合は、16 進値 0x26 または 10 進値 38 を指定します。As an example of setting the affinity mask option, if processors 1, 2, and 5 are selected as available with bits 1, 2, and 5 set to 1 and bits 0, 3, 4, 6, and 7 set to 0, a hexadecimal value of 0x26 or the decimal equivalent of 38 is specified. ビットの番号は右から左に数えます。Number the bits from right to left. affinity mask オプションは、プロセッサを 0 から 31 までカウントします。したがって、次の例のカウンターの 1 は、サーバー上の 2 個目のプロセッサを表しています。The affinity mask option starts counting processors from 0 to 31, so that in the following example the counter 1 represents the second processor on the server.

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

8 CPU システムでの affinity mask の値は以下のようになります。These are affinity mask values for an 8-CPU system.

10 進値Decimal value 2 進ビット マスクBinary bit mask SQL Server スレッドを有効にするプロセッサAllow SQL Server threads on processors
11 0000000100000001 00
33 0000001100000011 0 と 10 and 1
77 0000011100000111 0、1、および 20, 1, and 2
1515 0000111100001111 0、1、2、および 30, 1, 2, and 3
3131 0001111100011111 0、1、2、3、および 40, 1, 2, 3, and 4
6363 0011111100111111 0、1、2、3、4、および 50, 1, 2, 3, 4, and 5
127127 0111111101111111 0、1、2、3、4、5、および 60, 1, 2, 3, 4, 5, and 6
255255 1111111111111111 0、1、2、3、4、5、6、および 70, 1, 2, 3, 4, 5, 6, and 7

affinity mask オプションは拡張オプションです。The affinity mask option is an advanced option. sp_configure システム ストアド プロシージャを使用して affinity mask の設定を変更するには、 show advanced options を 1 に設定する必要があります。If you are using the sp_configure system stored procedure to change the setting, you can change affinity mask only when show advanced options is set to 1. Transact-SQLTransact-SQL の RECONFIGURE コマンドの実行が完了すると、新しい設定は、 SQL ServerSQL Server インスタンスを再起動しなくてもすぐに有効になります。After executing the Transact-SQLTransact-SQL RECONFIGURE command, the new setting takes effect immediately without requiring a restart of the SQL ServerSQL Server instance.

NUMA (Non-uniform Memory Access)Non-uniform Memory Access (NUMA)

NUMA (non-uniform memory access) ベースのハードウェアを使用し、affinity mask を設定する場合、ノード内のすべてのスケジューラがそのノードの CPU に関連付けられます。When using hardware based non-uniform memory access (NUMA) and the affinity mask is set, every scheduler in a node will be affinitized to its own CPU. affinity mask を設定しない場合、各スケジューラは NUMA ノード内の CPU のグループに関連付けられ、NUMA ノード N1 にマップされたスケジューラはノード内の任意の CPU で作業をスケジュールできますが、他のノードに関連付けられた CPU ではスケジュールできません。When the affinity mask is not set, each scheduler is affinitized to the group of CPUs within the NUMA node and a scheduler mapped to NUMA node N1 can schedule work on any CPU in the node, but not on CPUs associated with another node.

1 つの NUMA ノードで実行中のすべての操作は、そのノードのバッファー ページのみを使用できます。Any operation running on a single NUMA node can only use buffer pages from that node. 操作を複数のノードの CPU で並行して実行する場合、メモリは関連する任意のノードから使用できます。When an operation is run in parallel on CPUs from multiple nodes, memory can be used from any node involved.

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

動的関係は、CPU ライセンスにより厳密に制限されます。Dynamic affinity is tightly constrained by CPU licensing. SQL ServerSQL Server では、ライセンス ポリシーに違反する関係マスク オプションの構成が許可されていません。does not allow any configuration of affinity mask options that violates the licensing policy.

起動時Startup

SQL ServerSQL Server の起動時またはデータベースのアタッチ時に、指定された関係マスクがライセンス ポリシーに違反する場合、エンジン層により起動処理や、データベースのアタッチおよび復元操作は完了されますが、その後、関係マスクの sp_configure 実行値が 0 にリセットされ、 SQL ServerSQL Server エラー ログにエラー メッセージが記録されます。If a specified affinity mask violates the licensing policy during SQL ServerSQL Server startup or during database attach, the engine layer will complete the startup process or database attach/restore operation, and then it will reset the sp_configure run value for the affinity mask to zero, issuing an error message to the SQL ServerSQL Server error log.

再構成時Reconfigure

Transact-SQLTransact-SQL の RECONFIGURE コマンドの実行時に、指定された関係マスクがライセンス ポリシーに違反する場合は、エラー メッセージがクライアント セッションと SQL ServerSQL Server エラー ログに報告されます。データベース管理者による関係マスクの再構成作業が必要になります。If a specified affinity mask violates the licensing policy when running Transact-SQLTransact-SQL RECONFIGURE command, an error message is reported to the client session and to the SQL ServerSQL Server error log, requiring the database administrator to reconfigure the affinity mask. この場合、RECONFIGURE WITH OVERRIDE コマンドの実行が許可されません。No RECONFIGURE WITH OVERRIDE command is accepted in this case.

参照See Also

リソースの利用状況の監視 (System Monitor) Monitor Resource Usage (System Monitor)
RECONFIGURE (Transact-SQL) RECONFIGURE (Transact-SQL)
サーバー構成オプション (SQL Server) Server Configuration Options (SQL Server)
sp_configure (Transact-SQL) sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)