|
トランザクショナル インターフェイス には、パフォーマンスを向上させる以下の機能があります。
パフォーマンスを向上し、データの回復を支援するために、トランザクショナル インターフェイスは 1 つまたは複数のコミットされたオペレーション(トランザクションと非トランザクションの両方)をシステム トランザクションと呼ぶオペレーションのまとまりに入れます。トランザクショナル データベース エンジン は、ファイルごとにシステム トランザクションを作成します。システム トランザクションには、同じエンジンで動作する 1 つまたは複数のクライアントからのオペレーションとユーザー トランザクションを含めることができます。
メモ
システム トランザクションと、排他または並行トランザクションを混同しないでください。本書では、「トランザクション」という用語は排他トランザクションまたは並行トランザクション(ユーザー トランザクションとも呼びます)を指しています。ユーザー トランザクションはキャッシュ内のページに変更を加える方法に影響を与えるのに対して、システム トランザクションはキャッシュ内のダーティページをディスク上のファイルの一部にする方法に影響を与えます。トランザクショナル データベース エンジンは、システム トランザクションの起動とプロセスを制御します。
ユーザー トランザクションとシステム トランザクションはともにアトミック トランザクションです。つまり、これらのトランザクションは、すべての変更が行われるか、または変更が何も行われないといった具合に発生します。システム障害が発生すると、トランザクショナル データベース エンジンは障害の起きたシステム トランザクションに関連するすべてのファイルを再度開くときにそれらのファイルを回復します。障害の起きたシステム トランザクションに対して行われたすべての変更、つまり、終了した最後のシステム トランザクション以降にそのエンジン上のすべてのクライアントによって行われたファイルに対するすべてのオペレーションは失われます。ただし、ファイルは矛盾のない状態に復元されるので、システム障害の原因を解決した後にオペレーションを再試行することができます。
Pervasive PSQL は、アクセラレイティド モードで開いたファイルを除くすべてのログ記録可能なファイルのトランザクション一貫性保守を保証します。(ファイルに少なくとも 1 つの重複のない重複不能キーが含まれている場合は、そのファイルをログに記録することができます。キーはシステム定義とすることができます。)トランザクション一貫性保守は、トランザクショナル データベース エンジンが End Transaction に対し正常終了のステータス コードをクライアントに返す前にトランザクション ログへの書き込みを終了することを保証する機能です。アクセラレイティド モードでファイルを開くと、トランザクショナル インターフェイスはファイルをログに記録しません。したがって、トランザクショナル データベース エンジンはファイルにエントリを記録しません。したがって、トランザクショナル データベース エンジンはそのファイルのトランザクション一貫性保守を保証できません。
トランザクショナル データベース エンジンはファイルのシステム トランザクションをロールバックした後、次にファイルを開くときにログを再生します。これにより、システム トランザクションのロールバックによって、ログには格納されているがファイルに書き込まれていないコミット済みのオペレーションが復元されます。
各システム トランザクションは 2 つの段階、つまり、準備と書き込みから構成されています。
準備段階では、トランザクショナル データベース エンジンは現在のシステム トランザクションですべてのオペレーションを実行しますが、ファイルにページを書き込みません。トランザクショナル データベース エンジンは必要に応じてキャッシュに登録されていないページをファイルから読み取り、キャッシュにだけ新しいページ イメージを作成します。
以下のアクションはどれも準備段階の終了を引き起こし、書き込み段階の開始を示します。
メモ
一般に、準備段階はトランザクショナル インターフェイス オペレーションの完了後に終了します。しかし、ユーザー トランザクションが完了する前に時間制限またはキャッシュしきい値に達する可能性があります。トランザクショナル インターフェイスは、いずれにしても書き込み段階に切り替わります。
書き込み段階では、トランザクショナル データベース エンジンは準備段階で準備されたすべてのページをディスクに書き込みます。MicroKernel はまず、すべてのデータ ページ、インデックス ページおよび可変ページを書き込みます。これらのページは実際にはシャドウ ページです。これらのページが書き込まれている間、ディスク上のファイルの一貫性は変わりません。
しかし、PAT ページは現在のページとしてシャドウ ページを指示するため、システム トランザクションの重要部分は PAT ページが書き込まれている間に発生します。この段階を保護するために、トランザクショナル データベース エンジンは FCR にフラグを書き込みます。すべての PAT ページが書き込まれると、最後の FCR が書き込まれるため、ファイルは一貫性を保ちます。この段階でシステム障害が発生すると、次にファイルが開かれたときにトランザクショナル データベース エンジンはシステム障害を認識し、ファイルを直前の状態にロールバックします。次に、トランザクション ログ ファイル内の一貫性保守可能なユーザー トランザクションはすべてファイルに書き込まれます。
システム トランザクションの頻度を低くすると、ほとんどの構成ではパフォーマンスが向上します。その中には、ファイルが排他的に開かれる、クライアント/サーバー、シングル エンジン ワークステーションおよびマルチエンジン ワークステーション環境があります。
トランザクショナル データベース エンジンがシステム トランザクションの起動回数を少なくすると、ダーティページ、つまり、書き込みが必要なページはメモリ内に長く存在します。アプリケーションが多数の変更操作を行っている場合、これらのページはディスクに書き込まれる前に何回も更新される可能性があります。つまり、ディスクの書き込みが少なくなります。実際に、最も効率の良いエンジンは必要なときだけ書き込まれるエンジンです。
到達するとシステム トランザクションが起動される制限には、オペレーション バンドル制限、起動時間制限、キャッシュ サイズの 3 つがあります。これらの制限に達すると、トランザクショナル データベース エンジンはシステム トランザクションを起動します。この設定の詳細については、『Advanced Operations Guide』を参照してください。
システム トランザクションの回数を減らす最も良い方法は、オペレーション バンドル制限と起動時間制限をさらに高い値に設定する方法です。キャッシュのサイズを増やすこともできます。
トランザクショナル データベース エンジンがシステム トランザクションを実行する回数を少なくすることの欠点は、ディスクに書き込まなければならないマシンのメモリ内のデータが常に多くなるという点です。停電などのシステム障害が発生すると、失われるデータが多くなります。トランザクショナル データベース エンジンはファイルを一貫性のある使用可能な状態に保つようにつくられていますが、その状態には最新の変更が含まれていない場合があります。もちろん、トランザクション一貫性保守でユーザー トランザクションを使用すると、このリスクが最も少なくなります。パフォーマンスの向上に対してシステム トランザクションの回数を減らすことのリスクをよく考慮してください。
たとえば、アプリケーションがワークステーション エンジンを使用し、低速または信頼性の低いネットワーク接続を通じてリモート ファイルを更新している場合、変更データができるだけ早くディスクに書き込まれるようにシステム トランザクションを頻繁に実行する必要があります。
キャッシュは、読み取るページをバッファーするためにトランザクショナル データベース エンジンが予約するメモリ領域です。アプリケーションがレコードを要求すると、トランザクショナル データベース エンジンはまず、そのレコードを含むページが既にメモリ内にあるかどうかを確認するためにキャッシュを調べます。そうであれば、トランザクショナル データベース エンジンはレコードをキャッシュからアプリケーションのデータ バッファーに転送します。ページがキャッシュ内になければ、トランザクショナル データベース エンジンはページをディスクからキャッシュ バッファーに読み込んでから要求されたレコードをアプリケーションに転送します。トランザクショナル データベース エンジン キャッシュはローカル クライアントにより共有され、複数のオペレーション間で使用されます。
トランザクショナル データベース エンジンが新しいページをメモリに転送しようとするときにすべてのキャッシュ バッファーがいっぱいであれば、トランザクショナル インターフェイスがキャッシュ内のどのページを上書きするかを LRU(least recently used)アルゴリズムが決定します。LRU アルゴリズムは、最近参照されたページをメモリに保持することによって処理時間を短縮します。
アプリケーションがレコードを挿入または更新すると、トランザクショナル データベース エンジンはまず対応するページのシャドウ イメージを作成し、キャッシュでそのページを変更し、次にそのページをディスクに書き込みます。変更されたページは、トランザクショナル データベース エンジンが新しいページでキャッシュ内のそのページのイメージを上書きできると LRU アルゴリズムが決定するまで、キャッシュ内に残ります。
一般に、キャッシュが大きいほどパフォーマンスが向上するのは、ある時点でメモリ内に保持するページ数を多くすることができるからです。トランザクショナル データベース エンジンを使用して、I/O キャッシュ バッファーに予約するメモリ量を指定することができます。メモリ量を決定する場合は、アプリケーションの必要メモリ量、コンピューターにインストールされた総メモリ量、および、すべての並行 Pervasive PSQL アプリケーションがアクセスする全ファイルの結合サイズを考慮してください。このキャッシュの設定は、[キャッシュ割当サイズ]で行います。
Pervasive PSQL V8 以降のリリースでは、2 番目の動的 L2 キャッシュも使用できます。この動的キャッシュの設定は、[トランザクショナル データベース エンジンの最大メモリ使用量](v9.1 以降では[MicroKernel の最大メモリ使用量])で行います。これらの設定の詳細については、『Advanced Operations Guide』を参照してください。
メモ
使用可能な物理メモリよりキャッシュを多くすると、実際にパフォーマンスが大きく低下する可能性があるのは、仮想メモリ内のキャッシュメモリの一部がディスク上にスワップされるからです。トランザクショナル データベース エンジン キャッシュは、オペレーティング システムがロードされた後で使用可能な物理メモリの約 60% に設定することをお勧めします。
たとえば、Windows NT 上でこの値を見つけるには、タスクバーで時計を右クリックし、[タスク マネージャー]を選択します。[パフォーマンス]タブを選択すると、ダイアログ ボックスの右下近くに使用可能な物理メモリが表示されます。
ページ プリアロケーションは、トランザクショナル データベース エンジンがディスク領域を必要とするときにそのスペースを使用できるようにします。データ ファイルがディスク上の連続する領域を占有する場合、ファイル操作を高速化することができます。速度の向上は、非常に大きなファイルで最も顕著です。この機能の詳細については、「ページ プリアロケーション」を参照してください。
Extended オペレーション-Get Next Extended(36)、Get Previous Extended(37)、Step Next Extended(38)、Step Previous Extended(39)および Insert Extended(40)-を使用すると、パフォーマンスを大幅に向上できます。Extended オペレーションは、アプリケーションにもよりますが、トランザクショナル インターフェイスの要求数を 100 分の 1 以下に減らすことができます。これらのオペレーションには、不要なレコードがアプリケーションに送られないように返されたレコードにフィルターをかける機能があります。この最適化手法は、ネットワークを介してデータを送受信しなければならないクライアント/サーバー環境で最も良い結果をもたらします。
これらのオペレーションの詳細については、マルチレコードのオペレーションを参照してください。
|