[
InterDB
] [
著者HP
] [
PREVIOUS
][
UP
][
NEXT
]
Copyright @ 2009, Suzuki Hironobu @ InterDB
PostgreSQL
[PostgreSQLの基礎知識]
PostgreSQLとは
PostgreSQLの概要
データベース,テーブル,スキーマとは
データベースユーザ,グループ,データベースシステムとは
データベースクラスタとは
システムカタログとは
文字コードの扱い
アクセス方法
[PostgreSQLの内部構造]
プロセス構造
メモリ構造
問い合わせ処理の流れ
プランナ
データ管理
トランザクションID(XID)の管理
トランザクションの隔離とは
ロックとは
WALとは(Write Ahead Logging)
WALの詳細
[Streaming Replication]
はじめに
クイックスタート
機能一覧
仕組み
プロトロルの検証(Coming Soon)
[
PostgreSQLの高可用性
]
高可用性システム、大規模システム
pgpool-II:オンラインリカバリ
slony-I:オンラインリカバリ
[
JPUG仕組み分科会
]
WALの仕組み
pgpool-IIのオンラインリカバリ仕組み
memcached
mcb: memcached benchmark tool
pgmemcached
memcached改造編
並行プログラミング
The Programmer's Guide to the Parallel World
MySQL
[MySQLの基礎知識]
MySQLとは
MySQLの概要
データベースシステムの構造
データベースシステムへのアクセス方法
ストレージエンジン(テーブル型)
[MySQLの内部構造]
プロセス構造
メモリ構造
問い合わせ処理
プランナ
エクゼキュータの処理
データベースディレクトリの構造
MyISAM型
InnoDB型
トランザクションの隔離レベル
INSERT DELAYED文
クエリキャッシュ(Query Cache)
old contents
Hironobu's HOMEPAGE
■2-02■ メモリ構造
メモリモデル
PostgreSQLは起動時に、データ処理の効率化と信頼性向上のため、共有メモリ上に3つのメモリ領域を確保します(補足 1)。
また、バックエンドプロセスごとにソートメモリ領域(sort_mem)とVACUUMメモリ領域(vacuum_mem)を確保します(【図.2-2】参照)。
図.2-2 メモリモデル
これらバッファとメモリ領域の大きさは、設定ファイル“postgresql.conf”で設定します。
共有メモリ上に確保するメモリ領域
(1)共有バッファ(shared buffer)
PostgreSQLは共有バッファ上にデータを読み込み、更新や検索などのデータ操作を行います。つまり、共有バッファはキャッシュとして機能するわけです。
(2)WALバッファ(WAL buffer)
万が一のトラブルに備えて、PostgreSQLにはトランザクションログ(補足 2)を保存する機構:WAL(Write Ahead Logging)が実装されています。WALバッファはトランザクションログをバッファリングするために用意されています。共有バッファやWALバッファのデータがどのようにハードディスクに書き込まれるかは、【2-09】で解説します。
(3) 空き領域マップ(Free Space Map)
PostgreSQLは追記型のデータ管理方式を採用しているため、定期的にデータ領域中の不要領域を回収(または開放)する必要があります(補足 3)。空き領域マップは、不要となったデータ領域を記録するためのものです。
バックエンドプロセスが確保するメモリ領域
バックエンドプロセスごとに、ソートメモリ領域(sort_mem)とVACUUM メモリ領域(vacuum_mem)が確保されます。
これらのメモリ領域は常時確保されるのではなく、動的に確保されます。ソートメモリ領域は問い合わせを実行するとき、VACUUMメモリ領域はVACUUM処理を実行するときにそれぞれ確保され、実行後は開放されます。
(1)ソートメモリ領域(sort_mem)
プランナが問い合わせ実行計画を作成するときに使う、マージソート結合とハッシュ結合のためのメモリ領域です。大きなテーブルを処理する場合、このメモリ領域を大きく設定する必要があります。
複数のバックエンドプロセスが同時に問い合わせ処理を実行すると、メモリが不足する場合もありますので、サーバマシンには充分な実メモリを搭載するようにしてください。
(2)VACUUMメモリ領域(vacuum_mem)
これは、VACUUM処理実行時に一時的に確保するメモリ領域です。
補足
(1)
PostgreSQLに限らず多くのマルチプロセスシステムは、共有メモリを使って複数のプロセス間のデータ共有や排他制御を行います。
(2)
トランザクションログ: データ操作履歴のこと。
(3)
この処理は“VACUUM処理”とよばれることがあります。
[
PREVIOUS
][
UP
][
NEXT
]