max worker threads サーバー構成オプションの構成

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server の max worker threads サーバー構成オプションを構成する方法について説明します。 max worker threads オプションは、SQL Server プロセスで利用できるワーカー スレッド数を構成します。 SQL Server では、オペレーティング システムのネイティブ スレッド サービスを使用しているため、1 つ以上のスレッドが SQL Server で同時にサポートされている各ネットワークをサポートし、他のスレッドがデータベース チェックポイントを処理し、スレッド プールがすべてのユーザーを処理します。 max worker threads の既定値は 0 です。 この場合、ワーカー スレッドの数が、SQL Server によって起動時に自動で構成されます。 既定の設定は、ほとんどのシステムで最適な設定です。 ただし、システム構成によっては、max worker threads を特定の値に設定するとパフォーマンスが向上することがあります。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    推奨事項

    セキュリティ

  • 以下を使用して max worker threads オプションを構成するには:

    SQL Server Management Studio

    Transact-SQL

  • 補足情報: max worker threads オプションを構成した後

作業を開始する準備

制限事項と制約事項

  • 実際のクエリ要求数が max worker threads に設定した値を下回る場合、1 つのスレッドで 1 つのクエリ要求が処理されます。 一方、実際のクエリ要求数が max worker threads に設定した値を超える場合は、ワーカー スレッド プールが 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

    注意

    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 オプションを構成するには

  1. オブジェクト エクスプローラーで、サーバーを右クリックし、[プロパティ] をクリックします。

  2. [プロセッサ] ノードをクリックします。

  3. [ワーカー スレッド最大数] ボックスに、128 ~ 32767 の値を入力するか、または選択します。

    [ワーカー スレッド最大数] オプションを使用して、SQL Server プロセスで利用できるワーカー スレッド数を設定できます。 ほとんどのシステムの場合、[ワーカー スレッド最大数] の既定値を使用するのが最適です。 ただし、システム構成によっては、max worker threads の値を小さくするとパフォーマンスが向上することがあります。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

Transact-SQL の使用

max worker threads オプションを構成するには

  1. データベース エンジンに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。 この例では、sp_configure を使用して、max worker threads オプションを 900 に設定する方法を示します。

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
GO
EXEC sp_configure 'max worker threads', 900 ;
GO
RECONFIGURE;
GO

詳細については、「サーバー構成オプション」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

補足情報: max worker threads オプションを構成した後

データベース エンジンを再起動しなくても、変更は直ちに有効になります。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

参照

RECONFIGURE (Transact-SQL)

sp_configure (Transact-SQL)

概念

サーバー構成オプション

データベース管理者用の診断接続