Solaris Resource Manager 1.1 のシステム管理

データベース

Solaris Resource Manager 製品は、データベースの種類やその使用方法に応じて、複数のインスタンスでデータベース資源を管理するのに使用できます。

データベーストポロジー

通常データベースは、2n またはマルチスレッドサーバー (MTS) という 2 つのモードのどちらかで稼働しています。2n モードの場合、データベースの各ユーザーのために、個別のプロセスが存在します。マルチスレッドモードの場合、単一プロセスが多くのユーザーにサービスを提供します。マルチスレッドの単一プロセスとして実行されるデータベース、たとえば Oracle MTS のようなデータベースを管理する場合、Solaris Resource Manager を使用することはできません。

Graphic

上記の例では UID=oracle となっており、全ユーザーが同じユーザー ID に対して CPU を使用しているため、データベースレベルの場合に限って、Solaris Resource Manager で MTS モードのデータベースを制御できます。Solaris Resource Manager を使用して MTS データベースを統合できますが、データベース内でユーザーについては細かく制御できません。

Oracle 8i のようなデータベースには、照会またはユーザー単位で CPU の割り当てを制限するなどの資源の制御機能があります。この場合、資源の管理ポリシーと管理は、Solaris Resource Manager とは独立しており、別のツールセットで保守する必要があります。

Graphic

2n モードで稼働しているデータベース資源は、はるかに簡単に管理できます。同一ユーザーとしてデータベースのすべての処理を実行するのではなく、各ユーザーは異なるユーザー ID に対して処理を実行しています。

各ユーザーのために個別にプロセスを使用し、階層では各ユーザーに固有の l ノードが割り当てられているため、通常 2n モードでは Solaris Resource Manager を使用できます。

Solaris Resource Manager における 2n モード の Oracle

Oracle は 2n データベースの資源管理の実行方法を説明する格好の例です。2n モードの Oracle では、データベースに接続する各ユーザーに対して、「Oracle シャドウプロセス」という別のプロセスを生成します。このシャドウプロセスは、中央共有メモリー資源に接続して、データベースファイルに対して直接入出力処理を実行します。たとえ Oracle シャドウプロセスが setuid を設定した Oracle プロセスであっても、これらのプロセスは Solaris Resource Manager の別の l ノードには接続しません。これは、ログイン時に setuid() システムコールによって l ノードに接続しているため、ターゲットプログラムが setuid() を呼び出さない限り、setuid() プログラムの実行時に l ノードが変更されないからです。

次の図では、2n モードの Oracle が Solaris Resource Manager を使用する方法について説明します。

Graphic

2n モード Oracle のクライアントサーバーモード

クライアントサーバーモードの場合、Oracle ネットワークリスナーという補足的なプロセスがログイン手順に含まれ、これが原因となって、ユーザーコンテキスト情報を消失する場合があります。ネットワークリスナーはクライアントマシンからの接続を受け入れ、ユーザーのために Oracle シャドウプロセスを起動します。

Oracle リスナーによってシャドウプロセスを正しい l ノードに接続させるには、多少カスタマイズが必要な場合があります。

仮想メモリーとデータベース

Solaris Resource Manager 製品では、ユーザーと作業負荷が使用する仮想メモリー量を制限する機能を提供しています。この機能は物理メモリーを管理するのではなく、各ユーザーが使用する広域的なスワップ空間の容量を効果的に制限します。

ユーザーまたは作業負荷が l ノードの仮想メモリー制限値に達すると、システムはアプリケーションにメモリー割当エラーを返します。つまり、malloc() の呼び出しが失敗します。このエラーコードは、スワップ空間が不足しているかのようにアプリケーションに報告されます。

メモリー割当エラーに十分に対処できるアプリケーションはほとんどありません。したがって、データベースサーバーが仮想メモリー制限値に達するのを放置するのは危険です。制限値に達した場合、データベースエンジンがクラッシュして、データベースが壊れる可能性があります。

仮想メモリー制限値は、通常の状況ではその値に達しないように、高く設定しなければなりません。また、仮想メモリー制限値を使用して、データベースサーバー全体に上限を設定できますが、こうすることで、メモリーリークをともなう障害を起こしたデータベースがシステム上の他のデータベースや作業負荷に影響を与えるのを防止できます。