目的別ガイド:内部解析編
データベース管理システムを使う利点は、ディスクとメモリの使い方や、データの検索方法を意識しなくてもアプリケーションが開発できることです。とはいえ、より性能を引き出したり、トラブルシュートの際には、内部の動作を知っておくと役立ちます。ここでは、アーキテクチャや動作解析に関する記事をまとめます。
また、PostgreSQLはオープンソースで開発されているソフトウェアなので、ソースコードのレベルでも調査ができることも魅力です。ソースコードの追い方や開発プロセスへの参加方法も併せて紹介します。
アーキテクチャ解説
PostgreSQLはクライアント/サーバ型のRDBMSです。クライアントとサーバは専用のプロトコルで通信を行い、サーバは複数のリクエストを平行して処理するために、マルチプロセスで構成されます。データの保存には、テーブルごとに1個または複数のファイルを使用します。
他の大規模向けDBMSと比較して、ファイルシステムやプロセス・スケジューラを始め、OSへの依存が比較的大きいことがPostgreSQLの特徴です。「OSのほうが低レイヤの仕組みを良く知っているのだから、任せるべきだ」という思想に基づいています。PostgreSQLの性能を引き出すには、OSの選択やチューニングも重要な要素です。
関連リンク
- 記事: PostgreSQL の構造とソースツリー
- PostgreSQLアーキテクチャ入門 (Uptime Technologies, LLC., 2011年)
- PostgreSQLの概要とアーキテクチャ (ThinkIT, 高塚遙 氏, 2009年)
動作解析
PostgreSQLには内部で行われる処理の概要や、各種処理の実行回数のカウンタを表示する機能があります。それらを利用すると、アーキテクチャに関する知識は必要なものの、効率的な解析ができます。
- 記事: 稼動統計情報を活用しよう
- 記事: systemtapで動的追跡をしよう
- 記事: xlogdumpによるトランザクションログの解析
SQL実行計画
- Explaining EXPLAIN (しくみ分科会+アプリケーション分科会 第19回, 第20回, 第21回)
- 記事: スロークエリの改善
- Explaining EXPLAIN - Greg Stark, EnterpriseDB (PG UK 2008)
- 問合せ最適化インサイド (板垣貴裕 氏, 2006年)
ソースコード解析
PostgreSQLはオープンソースですので、ソースコードを読み解いて理解を深めることもできます。可読性と保守性を重視したコーディングになっているため、コード・リーディングの勉強にも良いでしょう。最新の開発版は git レポジトリから取得することができます。
- 本家: リポジトリ (git)
- 本家: ソースコード ビューア (doxygen)
- 記事: PostgreSQLのソースコード
開発への参加
データベース本体の開発に関してもオープンです。英語メーリングリストでのやり取りを通して提案、開発されるスタイルです。2ヵ月ごとに CommitFest として提案されたパッチの採択が行われ、1年に1回のペースでメジャーバージョンがリリースされます。
- 記事: PostgreSQLの開発プロセス
- 記事: OSS の開発コミュニティってどんなところ?
- 本家: Developers
- Development information (PostgreSQL Wiki)
- CommitFest