第2章ではPostgreSQLの内部構造を紐解きながら,基礎的な部分にフォーカスしていきます。PostgreSQLの内部構造を知ることで,次章以降の事前知識にもなりますし,PostgreSQLの新機能がいかにして成長してきたかも見えてきます。PostgreSQLのソースコードの場所PostgreSQLのソースコードは全部で120万行以上(2018月11月27日現在)あります。これをすべて把握するのは難しいので,本章では重要なワードとその概要を押さえながら話を進めていきます。詳しく知りたいと思った人は,そのワードで公式ドキュメントを検索してください。それよりもさらに深く知りたいと思った人は,ソースコードリーディングをお勧めします。PostgreSQLのコードは,統率されたきれいなコードとなっています。C言語の初心者でも読みやすく,ミドルウェアのコードとしても学びが多いです。プロセスの構造と役割まずはプロセスについて説明します。PostgreSQLは,マルチプロセスタイプのアーキテクチャです。比較対象に挙がるMySQLは,マルチスレッドタイプのアーキテクチャです。MySQLはコネクションが生成された場合,メインプロセスがスレッドを生成します。それに対してPostgreSQLはプロセスを生成します。Linuxアーキテクチャに詳しい人からすると,PostgreSQLは無駄な実装に感じるかもしれません。たしかにスレッドとプロセスの生成ではスレッドのほうが軽量です。RDBMSの性能はそこだけで決まるほど簡単なものではなく,たとえばロックの待ち時間に比べれば誤差と言えるでしょう。このようにPostgreSQLはマルチプロセスですから,それぞれのプロセスを知ることは重要です。主なプロセスは表1のとおりで,それらプロセスの流れは図1のとおりです。図1に登場していない表1のプロセスは,スタートアッププロセスのように常駐しないものや,アーカイバやWALセンダのように設定した場合のみ登場するものです。自動VACUUMを実行する。主なプロセスの流れPostgreSQLは,ライタがデータファイルやインデックスファイルをディスクに更新しています。その更新は,コミットに合わせてリアルタイムで行われているわけではありません。性能向上のため,チェックポイントと呼ばれる更新タイミングが発生するまでは,更新があっても共有バッファにデータを貯めておきます。この貯められたデータをダーティページと呼びます。チェックポイントのタイミングで,チェックポインタがダーティページをディスクに書き込みます。そのため,共有バッファに更新情報を貯めている間に障害が起きると,ダーティーページを失う可能性があります。それを防ぐために,共有バッファ中のデータに対してどのような更新を行ったかの情報を保存しているのがWALです。WALはコミットのタイミングでWALライタが記録しています。クラッシュリカバリが必要になったときは,WALの中にある記録を使用してデータ消失を防ぎます。共有バッファなどのメモリについては次節で説明します。このようにPostgreSQLは,さまざまプロセスが役割分担をしながら処理しています。メモリ著者プロフィール曽根壮大(そねたけとも)株式会社オミカレ副社長兼CTO。Engineer)を経て現職。MVPをはじめ,日本PostgreSQLユーザ会の理事として勉強会の開催を担当し,各地で登壇している。2017,YAPC::Kansaiなどのイベントでベストスピーカーを受賞し,分かりやすく実践的な内容のトークに定評がある。他に,岡山Python勉強会を主催し,オープンラボ備後にも所属。Design』誌で,データベースに関する連載「RDBアンチパターン」をまとめた『失敗から学ぶRDBの正しい歩き方』を執筆。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。