max worker threads サーバー構成オプションの構成
このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server の max worker threads サーバー構成オプションを構成する方法について説明します。 max ワーカー スレッド オプションは、SQL Server プロセスで使用できるワーカー スレッドの数を構成します。 SQL Server はオペレーティング システムのネイティブ スレッド サービスを使用するため、1 つ以上のスレッドが SQL Server が同時にサポートする各ネットワークをサポートし、別のスレッドがデータベース チェックポイントを処理し、スレッドのプールですべてのユーザーを処理します。 max worker threads の既定値は 0 です。 この場合、ワーカー スレッドの数が、 SQL Server によって起動時に自動で構成されます。 既定の設定は、ほとんどのシステムで最適な設定です。 ただし、システム構成によっては、 max worker threads を特定の値に設定するとパフォーマンスが向上することがあります。
このトピックの内容
作業を開始する準備:
以下を使用して max worker threads オプションを構成するには:
補足情報: ワーカー スレッドの最大数オプションを構成した後
始める前に
制限事項と制約事項
- 実際のクエリ要求数が max worker threadsに設定した値を下回る場合、1 つのスレッドで 1 つのクエリ要求が処理されます。 ただし、クエリ要求の実際の数が、 max ワーカー スレッドで設定された量を超えた場合、SQL Server は、次に使用可能なワーカー スレッドが要求を処理できるようにワーカー スレッドをプールします。
推奨事項
このオプションは高度なオプションであり、経験豊富なデータベース管理者または認定 SQL Server 技術者のみが変更する必要があります。
スレッド プールは、多数のクライアントがサーバーに接続されている場合のパフォーマンスの最適化に役立ちます。 通常、クエリ要求ごとに個別のオペレーティング システム スレッドが作成されます。 ただし、サーバーへの接続が数百にもなる場合、クエリ要求ごとに 1 つのスレッドを使用すると大量のシステム リソースが消費されることがあります。 max worker threads オプションを使用すると、 SQL Server によってワーカー スレッド プールが作成され多数のクエリ要求を処理できるようになります。その結果、パフォーマンスが向上します。
次の表は、CPU と SQL Server のバージョンのさまざまな組み合わせに対して自動的に構成された最大ワーカー スレッド数を示しています。
CPU の数 32 ビット コンピューター 64 ビット コンピューター <= 4 個のプロセッサ 256 512 8 個のプロセッサ 288 576 16 個のプロセッサ 352 704 32 個のプロセッサ 480 960 64 個のプロセッサ 736 1472 128 個のプロセッサ 4224 4480 256 個のプロセッサ 8320 8576 Note
64 個を超える CPU を使用する場合の推奨事項については、「 64 個を超える CPU を搭載したコンピューター上で SQL Server を実行する場合のベスト プラクティス」を参照してください。
警告
32 ビット コンピューターで実行されている SQL Server のインスタンスのワーカー スレッドの最大数として、1024 をお勧めします。
クエリの実行が長時間にわたり、すべてのスレッドがアクティブになっている場合、いずれかのワーカー スレッドが処理を完了し使用できるようになるまで、 SQL Server が応答していないように見えることがあります。 これは欠陥ではありませんが、望ましくない場合があります。 プロセスが応答せず新しいクエリを処理できない場合は、専用管理者接続 (DAC) を使用して SQL Server に接続し、プロセスを終了します。 このような状態を回避するには、ワーカー スレッド数を増やします。
max worker threads サーバー構成オプションでは、可用性グループ、Service Broker、ロック マネージャーなど、すべてのシステム タスクに必要なスレッドは考慮されません。 構成されたスレッドの数を超えている場合は、次のクエリによって、追加のスレッドを生成したシステム タスクに関する情報が取得されます。
SELECT
s.session_id,
r.command,
r.status,
r.wait_type,
r.scheduler_id,
w.worker_address,
w.is_preemptive,
w.state,
t.task_state,
t.session_id,
t.exec_context_id,
t.request_id
FROM sys.dm_exec_sessions AS s
INNERJOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
INNER JOIN sys.dm_os_tasks AS t
ON r.task_address = t.task_address
INNER JOIN sys.dm_os_workers AS w
ON t.worker_address = w.worker_address
WHERE s.is_user_process = 0;
セキュリティ
アクセス許可
パラメーターなしで、または最初のパラメーターだけを指定して sp_configure を実行する権限は、既定ですべてのユーザーに付与されます。 両方のパラメーターを指定して sp_configure を実行し構成オプションを変更したり RECONFIGURE ステートメントを実行したりするには、ALTER SETTINGS サーバーレベル権限がユーザーに付与されている必要があります。 ALTER SETTINGS 権限は、 sysadmin 固定サーバー ロールと serveradmin 固定サーバー ロールでは暗黙のうちに付与されています。
SQL Server Management Studio を使用する
max worker threads オプションを構成するには
オブジェクト エクスプローラーで、サーバーを右クリックし、[プロパティ] を選択します。
[プロセッサ] ノードをクリックします。
[ワーカー スレッド最大数] ボックスに、128 ~ 32767 の値を入力するか、または選択します。
[ワーカー スレッド最大数] オプションを使用して、 SQL Server プロセスで利用できるワーカー スレッド数を設定できます。 ほとんどのシステムの場合、 [ワーカー スレッド最大数] の既定値を使用するのが最適です。 ただし、システム構成によっては、 max worker threads の値を小さくするとパフォーマンスが向上することがあります。
Transact-SQL の使用
max worker threads オプションを構成するには
データベース エンジンに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。 この例では、 sp_configure を使用して、
max worker threads
オプションを900
に設定する方法を示します。
USE AdventureWorks2012 ;
GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
GO
EXEC sp_configure 'max worker threads', 900 ;
GO
RECONFIGURE;
GO
詳細については、「サーバー構成オプション (SQL Server)」を参照してください。
補足情報: max worker threads オプションを構成した後
変更はすぐに有効になります。データベース エンジンを再起動する必要はありません。
参照
RECONFIGURE (Transact-SQL)
サーバー構成オプション (SQL Server)
sp_configure (Transact-SQL)
データベース管理者用の診断接続