天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

最強DB講義 #19 PostgreSQL の拡張機能(山田達朗氏)に参加してきた

dblectures.connpass.com

こちらのイベントに参加してきたので、会であった話と感想を書いていこうと思います。

会であった話

PostgreSQLの状況とPostgreSQLの強み

PostgreSQLは高い人気を誇って*1いるという話からスタートしました。

人気の理由としては、

  • BSDライセンス
  • SQLの方言があまりない
  • 拡張性が高い(OSSだからという意味ではなく、ユーザのニーズに合わせて拡張できるという意味)

の3つが挙がっていました。

拡張機能の仕組み

拡張機能の種類と数

拡張機能には公式、非公式それぞれあり、2つ合わせると1100以上の拡張機能が存在するということでした。(2022/9/1現在、公式は56個、非公式は1079個)

拡張機能には膨大な種類があるため、本イベントでは一部のみの紹介となりましたが、

  • 運用監視(pg.statsinfo, pg.stat.statements)
  • 実行計画制御(pg.hint.plan)
  • 実行計画蓄積(pg.store.plans, auto.explain)
  • 実行計画チューニング(pg.plan.advsr)

などが紹介されていました。

拡張機能を利用する際の注意点

拡張機能を利用する際の注意点として、以下の点が挙がっていました。

  • 非公式機能はリリースが不安定であるため、拡張機能が便利かどうかだけではなく、コミュニティが活発かどうかも検討指標とした方が良い
  • 不具合発生時の対応が遅れる可能性もあるため、不具合が出た際にはコミュニティベースで任せるか自分たちで対応するかを事前に決めた方が良い。
  • DBaaSではサポートされている拡張機能に差異がある。
拡張機能で手を入れることができる箇所

非常に多岐に渡っていたので驚きましたが、以下の箇所は拡張可能だということです。

  • 関数
  • 演算子
  • テーブル
  • インデックス
  • 言語
  • Custom Scan
  • FDW
  • 処理
Hookポイントの紹介

ソース上のさまざまな処理存在し、コールバックの仕組みを用いることでユーザの処理を差し込むことができる仕組みであるHookポイントの紹介がありました。

使用頻度が高いExecutorのHookポイントを中心に紹介してくれて、指定した実行時間を超過したクエリのログ出力を行うAuto_Explainを説明してくれました。関数の実装レベルまで踏み込んだ解説を聞くことができて非常に面白かったです。

Hookポイントを用いた開発の最初の一歩

まず最初のstepとしては、pg_plugins/Blackholeを使用することをイベント内ではお勧めされていました。(ソースコードも少なく拡張機能についての理解が進みやすく開発しやすい)

その上で、次のstepとしては、PG本体のcontrib/auto_explainを利用するのが良いのではないかということでした。

FDW

続いて、Postgre以外のDBMSと共存してPostgreを動かしたり、Postgreにデータをマイグレーションしたり、Postgreを複数たてて分散処理を行う場合に用いる機能であるFGWの説明がありました。

Postgre以外のDBMSと共存してシステムを稼働させる際にFDWを利用すると、データのエクスポートやインポートをすることなくPostgreでSQLを発行するのみで済むというメリットがあるという話や、FDWには125種類もの種類があるという話、PlannerとFDW APIsのマッピングに関する話...をしてくれました。

FDW開発の最初の一歩

Hookポイントと同様に、どういうstepを踏んで開発を行うといいかの道筋を紹介してくれました。

まずはBlackhole_fdwを動かし、Postgres_fdwなど自分のターゲットに近いfdwを触ってみるのがいいのではないかということでした。

拡張機能の開発者向け留意点

以下の点が、拡張機能を開発する際の留意点として挙がっていました。

  • C言語の習得が必須
  • Postgreのアーキテクチャ理解やDBMS全般の理解が必須
  • システムリリース後のメンテナンスコストの考慮が必要(バージョン追跡...)
  • 公式の拡張機能を作る際には開発コミュニティと何度も議論が必須
拡張廃発に取り組む意義

上で書いた留意点を踏まえても、拡張機能を開発する意義は確実にあるということで、特に以下のポイントについて紹介がされていました。

  • 利用者よりも深い知識の習得が可能
  • 自社のみならず開発コミュニティ全体への貢献が見込まれる

全体を通した感想

話の順序や内容の粒度、スライド、話し方...どれをとっても質が高くて、非常にわかりやすかったです。

拡張機能開発にちょうど興味を持っていたところだったので関心のあるテーマだったので、参加することができてよかったです。

*1:DBエンジンランキング4位、AmazonGoogleをはじめ、クラウドベンダの多くがPostgreSQLのサービスを提供している