永続記憶域 (ボリューム) への不要なアクセスを防ぐために、データベースシステムによって読込操作および書込操作がワークメモリにバッファされます。いつワークメモリから永続記憶域に情報が書き込まれるかについては、データ記憶域を参照してください。
データベースシステムでは、ワークメモリはページ単位で使用されます。
データベースシステムでは、使用されるワークメモリが以下の領域に分割されます。
● 以下の要素で構成される I/O バッファキャッシュ
○ データキャッシュ (最大部分)
○ コンバータ
○ 内部ファイルディレクトリ
● カタログキャッシュ
● 共有 SQL キャッシュ
● 順序キャッシュ
● ログキュー
● liveCache データベースインスタンスのみ: OMS ヒープ
ワークメモリ領域
ワークメモリサイズの例 (MaxDB データベースインスタンスのテンプレートデスクトップ PC/ラップトップ)
Cache |
データベースパラメータ |
最大サイズ |
I/O バッファキャッシュ |
CACHE_SIZE = 2500 |
19.53 MB |
カタログキャッシュ |
CAT_CACHE_SUPPLY = 1632 |
12.75 MB |
共有 SQL キャッシュ |
SHAREDSQL_COMMANDCACHESIZE = 262144 |
256 MB (初期値は 16 MB) |
順序キャッシュ |
SEQUENCE_CACHE = 1 |
0.01 MB |
ログキュー |
LOG_IO_QUEUE = 50 (ログキューのサイズ) LOG_IO_QUEUE = 1 (ログキューの数) |
0.4 MB |
データベースシステムでは、I/O バッファキャッシュを使用して、I/O 操作に利用可能なすべてのワークメモリを管理します。
● データキャッシュ
データベースシステムでは、データ領域で最近読込アクセスまたは書込アクセスを行ったページを保存するためにデータキャッシュが使用されます。これにはたとえば、テーブル、索引、ロング値、UNDO ログエントリなどが含まれます。
データベースシステムでは、データ領域にアクセスする前に、必ずデータキャッシュでデータが検索されます。
データキャッシュのサイズは、データベースシステムのパフォーマンスに以下のような影響を与えます。
○ データキャッシュのサイズを大きくすると、ヒット率を高くすることができます。ヒット率は、少なくとも 98% 以上にすることをお奨めします。
○ ワークメモリが小さいコンピュータにデータキャッシュがある場合、データキャッシュのサイズを大きくすると、システムでワークメモリからハードディスクへのページのスワップが発生して、パフォーマンスが大幅に悪化することがあります。
● コンバータキャッシュ
コンバータには、どの論理ページ番号がどの物理的位置 (MaxDB ブロックアドレス) に保存されているかについての情報がデータベースシステムによって保存されます。データベースインスタンスが開始されると、データベースシステムによって、コンバータ全体がワークメモリにインポートされます。
コンバータを参照してください。
データベースの実行中にコンバータのサイズが大きくなり、追加のページが必要になった場合は、データベースシステムによって I/O バッファキャッシュからコンバータにページが提供されます。
データキャッシュとコンバータのサイズを直接設定することはできません。I/O バッファキャッシュのサイズをとおして、間接的に設定します。
データベースシステムでは、カタログキャッシュに以下の内容が保存されます。
● データベースカタログの情報。
● 個々のデータベースユーザによって実行された SQL 文についての情報 (ユーザ固有、SHAREDSQL データベースパラメータの値が NO の場合のみ)。複数のデータベースユーザが同じ SQL 文を実行した場合、その文はカタログキャッシュに複数回保存されます。
カタログキャッシュが一杯になると、情報はデータベースシステムによってデータキャッシュに移動されます。
カタログキャッシュ領域は、データベースセッションの開始時に、データベースシステムによって各ユーザタスクに割り当てられます。このカタログキャッシュは、データベースセッションの終了後にリリースされます。
カタログキャッシュのヒット率は、85% 以上であることが必要です。ヒット率の下限は、主にアプリケーションに応じて異なります。
SHAREDSQL データベースパラメータの値が YES の場合、データベースシステムでは共有 SQL キャッシュが使用されます。
共有 SQL キャッシュには、実行された SQL 文およびその実行計画がデータベースシステムによって保存されます。共有 SQL キャッシュは、すべてのデータベースユーザによって共有されるため、同じ SQL 文は 1 回のみ保存されます。
SHAREDSQL データベースパラメータの値が NO の場合、各データベースユーザが実行した SQL 文は、個別にカタログキャッシュに保存されます。
順序についてのすべての情報は、データベースシステムによって順序キャッシュに保存されます。
ログキューは、データベースシステムによって各トランザクションに割り当てられます。トランザクションは、REDO ログエントリをログキューに書き込みます。複数のトランザクションから同じログキューに書き込むことができます。
データ変更のログ記録を参照してください。
データベースインスタンスが開始されると、データベースシステムによって、内部ファイルディレクトリ全体がワークメモリにインポートされます。内部ファイルディレクトリには、B* ツリーのルートページのテーブル ID への割当などの、データベースオブジェクトの論理アクセスについての情報がデータベースシステムによって保存されます。
OMS ヒープは、SAP liveCache データベースインスタンスでのみ使用される、特定のワークメモリ領域です。OMS ヒープには、以下のデータが含まれています。
● OMS データのローカルコピー
整合性のあるビュー内のオブジェクトが最初にアクセスされるときに、データベースシステムによって対応するデータが OMS ヒープに書き込まれます。
● ローカルアプリケーションデータ
各 OMS バージョンのデータは、読み込まれるときに、データベースシステムによって OMS ヒープにコピーされます。
永続オブジェクトにアクセスする場合、最初にデータベースシステムによって OMS ヒープが検索されます。OMS ヒープにオブジェクトが見つからない場合は、データキャッシュが検索されます。データキャッシュにもオブジェクトが見つからない場合、そのオブジェクトはデータベースシステムによって、データ領域からデータキャッシュにコピーされ、さらにデータキャッシュから OMS ヒープにコピーされます。その後、データベースシステムによるすべての変更は、OMS ヒープ内のオブジェクトに対して行われます。整合性のあるビュー内で読み込まれるが変更されないオブジェクトは、データベースシステムによって OMS ヒープから削除されます。トランザクションが終了 (COMMIT) すると、OMS データは、データベースシステムによって OMS ヒープからデータキャッシュに書き込まれます。
アプリケーションによって追加のワークメモリが要求された場合には、OMS ヒープのサイズが大きくなります。OMS ヒープの最大サイズは、OMS_HEAP_LIMIT liveCache データベースパラメータで設定することができます。
liveCache データベースパラメータを参照してください。
クリティカルセクションは、データベースシステムで特別な同期ツール (リージョン、リーダ/ライタロック) を介して競合タスクのアクセスを同期化するために使用されるワークメモリ領域です。
特別な同期ツール
名称 |
用途 |
内容 |
地域 |
データキャッシュ |
排他ロック タスクからクリティカルセクションにアクセスする場合、関連するリージョンによって、その他すべてのタスクからこのクリティカルセクションへのアクセスがブロックされます。 |
リーダ/ライタロック |
カタログキャッシュ 共有 SQL キャッシュ |
排他ロックまたは共有ロック タスクからクリティカルセクションに書込アクセスを行う場合、関連するリーダ/ライタロックによって、このクリティカルセクションへのその他すべての書込アクセスがブロックされます。ただし、読込アクセスはブロックされません。 タスクからクリティカルセクションに読込アクセスを行う場合、関連するリーダ/ライタロックによって、このクリティカルセクションへのその他すべての書込アクセスがブロックされます。ただし、読込アクセスはブロックされません。 |
参照: