Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

プロセス管理

すべての Caché プログラムとアプリケーションはプロセスによって実行されます。プロセスはシステムが生成する整数値のプロセス ID (pid) によって識別されます。

プロセスはフォアグラウンド (対話型) プロセスまたはバックグラウンド (非対話型) プロセスのいずれかになります。バックグラウンド・プロセスは JOB コマンドを使用して ObjectScript で開始されます。JOB コマンドを発行するプロセスは親プロセスと呼ばれ、開始されたバックグラウンド・プロセスは子プロセスと呼ばれます。バックグラウンド・プロセスは「ジョブ起動プロセス」または「生成されたプロセス」と呼ばれることもあります。

プロセスはロックを使用して共有リソースの保持と解放を行います。ObjectScript では、プロセスは LOCK コマンドを使用してロックの取得と解放を行います。現在のロックを表示するには、"Caché ObjectScript の使用法" の “ロック管理” の章で説明されているシステム全体のロック・テーブルを参照してください。

この章では、プロセス管理の以下の側面について説明します。

プロセス管理のその他の側面については、%SYS.ProcessQueryOpens in a new tab クラスを参照してください。

Note:

Caché では、プロセス管理のすべての側面に対して最適な既定が用意されています。プロセスのこれらの既定の変更は、特定の特別な状況に限って慎重に行ってください。

バッチ・モード

プロセスは、インタラクティブ・モードと呼ばれることもある既定モード (これはユーザー対話とは無関係です) またはバッチ・モードのいずれかで実行されます。バッチ・モードは特殊な状況でのみ使用してください。

データベースの広範囲の部分にアクセスするプロセスは、システムで実行されている他の (バッチでない) プロセスへの影響を限定するために、バッチ・モード・プロセスに設定される場合があります。特に、バッチ・モード・プロセスは、読み込みや変更対象のデータベース・ブロックによってデータベース・キャッシュを圧迫しないようになっています。例えば、データ圧縮ユーティリティはバッチ・モードで適切に実行される場合があります。

バッチ・モード・プロセスはジョブ起動プロセスと同じではありません。ジョブ起動プロセスは JOB コマンドを使用して生成されます。ジョブ起動プロセスはバックグラウンドで実行される非対話型のプロセスです。

%SYSTEM.Util.SetBatch()Opens in a new tab メソッドを使用すると、プロセスをバッチ・モードで実行できます。pid を使用してプロセスを指定するか、現在のプロセスを既定にします。SetBatch() はブーリアン引数を取ります。0=ダイレクト・モード (既定)、1=バッチ・モードです。SetBatch() は、前のモード設定を返します。

優先度

プロセスの優先度は、複数の並行プロセスに CPU リソースの競合が発生する仕組みを決定します。優先度が高いプロセスは CPU 時間に優先的にアクセスします。

優先度は正数値です。正数値の範囲はプラットフォームに依存します。Windows の場合、優先度の範囲は 1 ~ 15、通常=8 です。UNIX® の場合、優先度の範囲は -20 ~ 20、通常=0 です。一般的に、低、通常、高の 3 つの正数値のみが使用されます。通常優先度がユーザ・プロセスの既定値です。通常優先度はロード・バランシングを使用して CPU の使用率を調整します。

プロセスの現在の優先度は、%SYS.ProcessQueryOpens in a new tab クラスの PriorityOpens in a new tab プロパティを使用して決定できます。

Note:

プロセスの優先度の変更はほぼ不要です。変更するとシステムの安定性を損なう可能性があります。

SetPrio() メソッド

%SYSTEM.Util.SetPrio()Opens in a new tab メソッドを使用して、現在のプロセスまたは pid で識別される別のプロセスの優先度を変更できます。正または負の整数を指定して、現在の優先度をその分だけ増減します。Windows では、最小優先度は 1 です。優先度を 1 より小さい値にしようとしても、優先度は 1 に設定されます。通常優先度は 8 です。最大優先度は 15 です。SetPrio() は新しい優先度のレベル設定値を返します。(15 より大きい値を指定しようとすると、優先度は 1 にリセットされるか、その他の予期しない結果を招く可能性があります。15 を超える SetPrio() の戻り値は実際の優先度設定を反映していません。)

^%PRIO ユーティリティ

古い ^%PRIO ユーティリティを使用して現在のプロセスの優先度を決定し、優先度を低、通常、高のいずれかの値に設定できます。

現在の優先度を決定するには、DO ^%PRIO コマンドを発行します。後続の引数のない WRITE コマンドは、現在の優先度を %PRIO=8 のように返します。

現在のプロセスの優先度を設定するには、DO LOW^%PRIODO NORMAL^%PRIO、またはDO HIGH^%PRIO のいずれかのコマンドを発行します (コマンドは大文字/小文字を区別します)。設定済みの優先度の戻り値 (Windows の場合) は 低 =4、通常 =8、高 =13 です。

SetBatch(1) は現在のプロセスの優先度を変更しません。ただし、プロセスがバッチ・モード (1) の場合、上記のコマンドを使用して現在のプロセスの優先度を上げると、プロセスのモードはバッチ・モード (1) からダイレクト・モード (0) に変わります。

バッチ・モードと現在のプロセスの優先度の両方を設定するには、DO SET^%PRIO(priority,mode) を指定します。priority,mode は大文字/小文字が区別される文字列で、priority にはLOW、NORMAL、またはHIGHのいずれか、mode には、BATCH または NOBATCH のいずれかを指定します。コンマ区切りオプションのいずれか一方、または両方を指定できます。例 : DO SET^%PRIO("LOW,BATCH")。このコマンドにより、バッチ・モード・プロセスのモード・ステータスに影響を与えることなくプロセスの優先度を変更できます。

ジョブ起動プロセスの優先度

JOB コマンドにはジョブ起動 (バックグラウンド) プロセスの優先度を設定するオプションが用意されています。指定しない場合、子プロセスはシステム定義のジョブ優先度変更子によって調整された親プロセスのベース優先度を使用します。例えば、Windows の場合、通常優先度 (priority=8) の親プロセスは、ジョブ優先度変更子により、priority=7 の子プロセスを開始します。優先度が高のジョブ起動プロセスは、対話型プロセスと対等に CPU リソースを取り合います。

FeedbackOpens in a new tab