システムグローバル領域 (システムグローバルリョウイキ) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

システムグローバル領域 (システムグローバルリョウイキ) の読み方

日本語表記

システムグローバル領域 (システムグローバルリョウイキ)

英語表記

System Global Area (システムグローバルエリア)

システムグローバル領域 (システムグローバルリョウイキ) の意味や用語解説

システムグローバル領域は、一般的にSGA(System Global Area)という略称で知られており、Oracle Databaseにおける中心的なメモリ構造の一つである。データベースインスタンスが起動する際にオペレーティングシステムから割り当てられる共有メモリ領域であり、データベースを構成する複数のバックグラウンドプロセスやサーバプロセスが共同で利用する作業スペースとしての役割を担う。SGAの主な目的は、データベースのパフォーマンスを最大限に引き出すことにある。コンピュータシステムにおいて、ディスクへのデータの読み書き(ディスクI/O)は、メモリ上でのデータアクセスに比べて非常に低速である。そのため、頻繁にアクセスされるデータや情報をメモリ上、つまりSGA内に保持しておくことで、物理的なディスクアクセスの回数を減らし、データベース全体の応答速度を劇的に向上させることが可能となる。SGAは、データベースインスタンスの稼働中は常に存在し、インスタンスが停止されると解放される。この領域は、複数のメモリコンポーネント、すなわちメモリプールから構成されており、それぞれが特定の役割を担って連携することで、データベースの効率的な運用を実現している。 SGAを構成する最も重要なコンポーネントの一つが、データベースバッファキャッシュである。これは、ディスク上のデータファイルから読み込まれたデータブロックのコピーを一時的に保持するための領域である。ユーザーからのデータ要求があった場合、Oracle Databaseはまずこのバッファキャッシュ内に目的のデータが存在するかを確認する。データが存在すれば、ディスクにアクセスすることなくメモリから直接データを返すことができるため、非常に高速な応答が可能となる。これはキャッシュヒットと呼ばれる。一方、データが存在しない場合(キャッシュミス)は、ディスクからデータを読み込み、バッファキャッシュに格納した上でユーザーに返す。このとき、キャッシュに格納されたデータは、後続の同じデータへのアクセスのために再利用される。また、ユーザーによって変更されたデータも、一旦バッファキャッシュ上で更新される。変更されたデータブロックはダーティバッファと呼ばれ、即座にディスクに書き戻されるのではなく、DBWn(データベースライター)というバックグラウンドプロセスによって、効率的なタイミングでまとめてディスク上のデータファイルに書き込まれる。このように、バッファキャッシュはディスクI/Oの削減に直接的に貢献し、そのサイズはデータベースの性能に大きな影響を与える。 次に重要なコンポーネントが共有プールである。共有プールは、複数のユーザープロセス間で共有される様々な情報を格納する領域であり、主にライブラリキャッシュとデータディクショナリキャッシュから構成される。ライブラリキャッシュは、実行されたSQL文やPL/SQLコードの解析済み情報、つまり実行計画をキャッシュする場所である。ユーザーがSQL文を実行すると、Oracle Databaseはその構文をチェックし、最適なデータアクセス方法を決定する解析処理(パース)を行う。この処理はCPUリソースを比較的多く消費する。しかし、一度実行されたSQLの実行計画がライブラリキャッシュに保存されていれば、次に同じSQLが実行された際には、解析処理を省略してキャッシュ内の実行計画を再利用できる。これにより、CPUの負荷が軽減され、処理速度が向上する。データディクショナリキャッシュは、テーブルの定義、列の情報、ユーザーの権限情報といった、データベースの構造や定義に関する情報(データディクショナリ)をキャッシュする。これらの情報はSQLの解析時などに頻繁に参照されるため、メモリ上に保持することで高速なアクセスを実現する。 REDOログバッファは、データベースに加えられた全ての変更履歴を記録するためのメモリ領域である。ユーザーがINSERT、UPDATE、DELETEなどの操作でデータを変更すると、その変更内容を示すREDO情報が生成され、まずこのREDOログバッファに書き込まれる。バッファに書き込まれたREDO情報は、コミットが実行された際や、バッファが一定量満たされた際などの特定のタイミングで、LGWR(ログライター)というバックグラウンドプロセスによってディスク上のREDOログファイルに書き出される。この仕組みは、データベースの耐久性と一貫性を保証するために不可欠である。万が一、データベースインスタンスに障害が発生してメモリ上のデータが失われたとしても、ディスク上のREDOログファイルにはコミットされた全ての変更履歴が残っているため、インスタンス再起動時にその情報を元にデータベースを障害発生直前の状態に復旧(リカバリ)することができる。 その他にも、SGAには特定の目的のためのメモリプールが存在する。ラージプールは、共有サーバ構成でのユーザーセッション情報や、パラレルクエリ、RMANによるバックアップ処理など、大きなメモリ領域を必要とする特定の操作のために確保されるオプションの領域である。共有プール内で大きなメモリを確保すると、メモリの断片化を引き起こしやすくなるため、それを避ける目的でラージプールが利用される。Javaプールは、データベース内でJava仮想マシン(JVM)を利用し、Javaストアドプロシージャなどを実行する際に必要なメモリを格納する。ストリームスプールは、Oracle Streamsという機能を用いてデータベース間でデータを複製・伝播させる際に使用される。これらのコンポーネントのサイズを含むSGA全体のサイズは、データベースのパフォーマンスに直結するため、適切に設定することが重要である。近年のOracle Databaseでは、自動メモリ管理(AMM)や自動共有メモリ管理(ASMM)といった機能が提供されており、データベースのワークロードに応じて各メモリコンポーネントのサイズを動的に調整し、メモリ使用の最適化を自動で行うことが可能となっている。システムエンジニアにとって、これらのSGAの構造と各コンポーネントの役割を理解することは、データベースの性能分析やチューニングを行う上で基礎となる重要な知識である。

システムグローバル領域 (システムグローバルリョウイキ) とは | 意味や読み方など丁寧でわかりやすい用語解説