サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
www.postgresqlinternals.org
トランザクション管理 トランザクション処理におけるACID特性 ここではPostgreSQLのトランザクション管理について解説します。 トランザクション処理には「ACID特性、ACID属性」と呼ばれる要件があります。ACIDは、それぞれ「Atomicity、Consistency、Isolation、Durability」の頭文字を取ったもので、それぞれに備えているべき特徴があります。 Atomicity (原子性) それ以上分解できない単位の操作である 「変更された」か「変更されていないか」のどちらか Consistency (一貫性、整合性) 予め定められたルールに則った(整合性の取れた)状態である 正の値しかとらない、など。 Isolation (分離性、独立性) 実行中のトランザクションが他のトランザクションに影響を与えない 実行中のトランザクションの状態を参照・変更することができ
ロック制御 ロック 並行して処理を行っているRDBMSでは、データの整合性のためにリソースに対する排他制御が必須 データの読み取り、書き込み、その他 ロックには、ロックレベルと粒度の概念がある ロックのレベル(モード)はPostgreSQLでは8種類 粒度は、テーブル、レコード、トランザクションなど ロックとのいうは、当然データを操作する上で非常に重要にな要素です。特に並行して処理を行っているデータベースではデータの整合性を担保するためにリソースに対する排他制御は必須の機能になります。ロックすべき処理には、データの読み取りや書き込み、その他にもいろいろあります。 ロックには「レベル」と「粒度」という概念があります。 例えば、ロックのレベル、PostgreSQLではモードとも呼ばれますが、この種類は8種類くらいあります。 ACCESS SHAREという共有ロックから始まって、行の排他ロックや
エグゼキュータの役割 テーブルスキャン インデックススキャン 結合 エグゼキュータは、SQLを実行する最後の段階で、実際にブロックアクセスなどによってデータを読み込んだり演算して返却したりする処理です。 エグゼキュータの中では、テーブルスキャン、インデックススキャン、結合というような処理が行われていますが、ここでは結合、JOINに絞って見ていきます。 結合処理 Nested Loop Join Merge Join Hash Join PostgreSQLでは、大きく分けて3つ結合処理、Nested Loop Join、Merge Join、Hash Joinが実装されています。 Nested Loop Join Nested Loop Join Outer tableを一行読んで、Inner table のカラムに該当する値を探す Outer tableが少ないのが望ましい Inner
共有メモリとローカルヒープ 共有メモリ 複数のバックエンドで共有されるデータを保持する セッション(バックエンド)をまたいで共有すべきデータ 共有バッファ、トランザクション情報、ロック情報、等 サービス起動時に固定サイズを確保する CreateSharedMemoryAndSemaphores() @ ipci.c ローカルヒープ 個別のセッション(バックエンド)で使用するメモリ ソート、演算処理などを実行する時に使用するメモリスペース 必要となる度に確保、不要になったら開放 palloc(), pfree() @ mcxt.c PostgreSQLのメモリ管理について、PostgreSQLの中で使われるメモリには大きく分けて「共有メモリ」と「ローカルヒープ」という領域があります。 第1章で「共有バッファ」というキーワードがでてきましたが、アーキテクチャの図の一番右の方にあったメモリが「共
テーブルファイル まず、ユーザのデータを保存するテーブルファイルとその構造について解説します。 8kB単位のブロック単位で構成される 各ブロックの中に実データのレコード(タプル)を配置 基本的に追記のみ 削除したら削除マークを付加する(VACUUMで回収) レコード更新時は「削除+追記」を行う。 PostgreSQLのテーブルファイルは、基本的に8kB単位のブロックで構成されています。図にありますが、全体をひとつのテーブルファイルだと考えると、その中にブロック1、ブロック2、ブロック3…というように、8kB単位で作成されています。 各ブロックの中に実データのレコード(タプル)が入っているという構造になっています。第3章でサンプルを見ながら解説しましたが、基本的には追記されるだけで、updateされる時には違うレコードとして追記していく、というしくみになっております。 右側にはテーブルの統計
PostgreSQLの構成要素 PostgreSQLの構成要素としては、大きくプロセスとメモリとファイルがあります。上記の図のように複数のプロセスがさまざまなメモリの領域を使って、ファイルのデータにアクセスするという構造になっています。 プロセスには、クライアントからの接続を受け付けるリスナプロセス、SQLの処理を実際に行うバックグラウンドプロセス、それ以外にもバックグラウンドライタやログを出力するロガープロセス、あとWALライタなどのプロセスがあります。 メモリには、共有バッファやWALバッファなどを始めとした、さまざまなメモリの領域があります。 ファイルは、実際のユーザデータを保持しているテーブルファイルやインデックスファイルがあります。また、トランザクションログファイル、アーカイブログファイルなどもあります。 PostgreSQLの内部では、これらが関連して動作しています。 Post
本コンテンツは、2014年1月30~31日に筑波大学で開講された「情報システム特別講義D」における講義「Inside PostgreSQL Kernel」の内容を再構成、加筆・修正したものです。 はじめに 本コンテンツについて 本コンテンツへのフィードバックについて アーキテクチャ概要 PostgreSQLの構成要素 PostgreSQLの基本的なアーキテクチャ SQL文の処理される流れ トランザクション管理 トランザクション処理におけるACID特性 各レコードの可視性の管理 Atomicity(原子性)の実装 Consistency(一貫性)の実装 Isolation(分離性)の実装 トランザクション分離レベルの定義 Durability(永続性)の実装 チェックポイント メタデータ管理 pg_controlファイル OID/XID/TID システムカタログ MVCCとストレージ構造 テ
このページを最初にブックマークしてみませんか?
『はじめに · PostgreSQL Internals』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く