Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ データベース管理 » SQL Anywhere データベース接続 » SQL Anywhere データベースサーバ

 

SQL Anywhere のスレッド化

SQL Anywhere のスレッドモデルを理解するには、スレッドと要求処理の基本用語と概念を理解することが必要です。

  • 要求   要求は、クエリや SQL 文などの作業単位で、接続を介してデータベースサーバに送信されます。要求の存続期間は、要求がデータベースによって最初に受信されてから、結果の最後が返されてカーソルが閉じられるまで、または要求がキャンセルされるまでの間を指します。

  • タスク   タスクは、データベースサーバ内で実行されるアクティビティの単位です。また、データベースサーバによってスケジュールされる最小の作業単位でもあります。ユーザ要求は、それぞれ、データベースサーバ内で少なくとも 1 つのタスクになります。クエリ内並列処理が関連する場合は、複数のタスクになることもあります。データベースサーバは、ユーザ要求だけでなく、内部タスクを実行するために自身のタスクをスケジュールすることもできます。たとえば、データベースクリーナーの実行やタイマーの処理などがこれに該当します。同時に実行できるアクティブなタスクの最大数は、カーネル内のワーカプールのサイズによって異なります。ユーザ要求タスクがデータベースサーバに届き、そのタスクにワーカが割り当てられると、ActiveReq サーバプロパティの値が 1 増えます。要求が完了すると、ActiveReq サーバプロパティの値は 1 減ります。ただし、ユーザ要求タスクを実行するために使用できるワーカがない場合、そのタスクは実行のためにキューイングされ、UnschReq サーバプロパティの値が 1 増えます。ワーカが使用可能になり、タスクが実行のためにデキューされると、UnschReq サーバプロパティの値が 1 減り、ActiveReq プロパティの値が 1 増えます。

  • ワーカ   ワーカは、データベースサーバカーネル内で実行されている「制御用のスレッド」を抽象化したものです。Windows と Linux では、ワーカは「ファイバー」と呼ばれる軽量スレッドを使用して実装されます。その他のプラットフォームでは、オペレーティングシステムスレッドを使用して実装されます。ワーカは、データベースサーバのカーネルによって割り当てられたタスクを実行します。データベースサーバは、サイズが可変のワーカプールを利用してサーバの負荷を処理します。プールのサイズは、データベースサーバのマルチプログラミングレベルに対応します。

    パーソナルサーバと Windows Mobile 上のネットワークサーバには、固定サイズのプールがあります。これらのサーバでは、サーバの起動時に作成されるワーカの数を -gn オプションで制御します。他のすべてのネットワークサーバでは、-gnh オプションで指定された数のワーカがデータベースサーバによって作成されます。ただし、タスクに対してサービスを提供できるのは、サーバのマルチプログラミングレベルで指定された数のワーカのみです。デフォルトでは、ワーカプールのサイズは、データベースサーバの負荷の変化に応じてカーネルによって動的にチューニングされ、-gnl オプションと -gnh オプションでそれぞれ指定された下限と上限の間で上下します。

    タスクは、先入れ先出し (FIFO) 方式でワーカに割り当てられます。各タスクの優先度は、そのタスクを生成した接続に基づいて設定されます。タスクが実行のためにワーカに割り当てられると、カーネルのスケジューラーはタスクの優先度を考慮して CPU 時間をそのワーカに割り付けます。タスクの実行中、ロックを待機したり、I/O 処理の完了を待機したりするなどの理由でタスクのブロックが必要になった場合でも、ワーカはそのタスクに関連付けられたままです。タスクが完了した後にのみ、ワーカは他のタスクを実行するために使用できるようになります。

  • スレッド   スレッド、つまり実行スレッドは、オペレーティングシステムを構築するもので、単一プロセス内での同時実行を可能にします。データベースサーバを含め、オペレーティングシステムの各プロセスは、少なくとも 1 つのスレッドによって実行されます。複数のスレッドによって実行されることもあります。スレッドは、オペレーティングシステムによってアプリケーション外部でスケジュールされ、最終的にアプリケーション実行のすべてはスレッドによって行われます。Windows と Linux では、データベースサーバが作成するスレッドの数が決まっています。CPU コアごとに 1 つのオペレーティングシステムスレッドが作成され、-gtc オプションで制御されます。その他のプラットフォームでは、作成されるオペレーティングシステムスレッドの数はワーカプールのサイズと同じであり、ワーカプールサイズの制御に使用されるのと同じメカニズムで制御されます。

    スレッドの数は、データベースへの接続の数とは関係ありません。データベースサーバは、スレッドを特定の接続専用に割り当てません。代わりに、タスクは、実行のためにデータベースサーバに届くと、サーバスレッドの固定サイズのプールからスレッドが動的に割り当てられます。タスクがスレッドに割り当てられると、スレッドはタスクが完了するかキャンセルされるまでタスクを処理します。

 参照

UNIX でのワーカ
Windows と Linux でのワーカ
スレッド動作
マルチプログラミングレベルのデータベースサーバ設定