PostgreSQL アンカンファレンス@東京(2)
NTTデータ 藤井雅雄 ・ 澤田雅彦
ゆるいテキスト検索
原田氏による、ゆるいテキスト検索(類似検索・正規化など)についての話です。全文検索時によく問題となる表記ゆれ(ブとヴ、ニャルラトホテプとニャラルトホテプなど・・)を解決すべく、原田氏が独自にPostgreSQLにHookを仕込み、類似検索用の評価関数を差し込んだ結果がデモと共に解説されました。愉快な検索例などで笑いも交えつつ、わかりやすい講演で参加者を楽しませていました。Hookそのものの解説や、シソーラス(類義辞書)や機械学習に頼らないストイック?な実装、表記ゆれを解決する全文検索としての有用性などの話もあり、短い時間で多くの技術要素が盛り込まれた講演でした。本講演の資料はこちらにあります。
PG9.3の新しいロックモード
笠原氏による、PostgreSQL9.3で新規に加わったロックモードについての話です。PostgreSQLの共有ロックにまつわる改良について、古いバージョンから9.3に至るまでの流れで解説していました。PostgreSQLは、外部参照制約にトリガを利用していますが、参照テーブルへの更新時に被参照テーブルへかかるロックが元で起こる様々な問題が起こっていました。それを解決すべく、8.1で共有ロック(FOR SHARE)が、そして9.3で新たにFOR KEY SHAREとFOR NO KEY UPDATEというロックモードが追加されました。これにより、参照テーブルへの更新と、被参照テーブルへの更新処理が競合しなくなり、性能改善されたという話が内部の仕組みとともに紹介されていました。非常に大きなパッチだったそうで、こういったDBMSの基礎的な機能が地道に改善されているところがPostgreSQLの魅力です。
pg_hint_plan PGのHINT句
藤井氏(@fujii_masao)による、今特定の界隈で話題沸騰中の「PostgreSQLのHINT句」、pg_hint_planを紹介する講演です。HINT句は、一部商用DBMSに見られる、SQL文へスキャンや結合方式のヒントを記述することで、実行計画をユーザ側で制御できる機能です。 講演では、pg_hint_planでのHINT句の指定方法やどこまで実行計画を制御できるのかについて、デモを交えながら解説されていました。HINT句を多用しているような商用DBのシステムでも、pg_hint_planを利用することでPostgreSQLに移行できそうです。
また、講演では、PostgreSQLコミュニティがHINT句を嫌いな理由という切り口で、HINT句自体の問題点を挙げていました。これらのHINT句のリスクを見切った上で、pg_hint_planを利用するのが重要とのことです。藤井氏は、pg_hint_planを、基幹系システムの性能安定化やSQLチューニングの最終手段、さらには商用DBからPostgreSQLへの移行の宣伝材料として使っていくとのことでした。本講演の資料はこちらにあります。
AmazonEC2でPostgreSQL-XCをセットアップしてみた
永安氏による、Amazon EC2上でPostgres-XCをセットアップする方法についての話です。PostgreSQL互換のマルチマスタなクラスタ構成を組めるPostgres-XCを対象に、Aamazon EC2上でのセットアップ手順を紹介していました。手順的には公開ドキュメントどおりで問題ないようです。永安氏は直前までセットアップしていた結果を講演していたようで、残念ながら実際に使用してみた場合の結果などは次回?になるようです。意外と、使ってみた系の講演はアンカンファレンスの中でもここだけだったようです。
pg_dbms_stats 統計情報の固定化
藤井氏による、pg_dbms_statsの紹介講演です。pg_dbms_statsは、PostgreSQLが常に同じ実行計画を選択するように、統計情報を固定化するモジュールとのことです。OracleのDBMS_STATSパッケージのPostgreSQL版といったイメージのようです。 講演では、このモジュールにより何ができるのか図解しており、分かりやすい内容でした。実行計画の固定化にもHINT句と同様の問題があり、やはりそれらのリスクを見極めた上でモジュールを使うことが重要とのことです。別のセッションで講演されたpg_hint_planを組み合わせると、いざという時のSQLチューニングの強い武器になりそうです。
簡単にHookで遊ぶ
笠原氏による、PostgreSQLのHookを使った簡易実装についての話です。PostgreSQLは内部にHookを多く持ち、それを使って外部から内部の処理を制御できます。今回のカンファレンスでは、他に類似検索用のHookを仕込む話がありました。本講演では、PostgreSQL9.1で新たに加わったログのHookを使い、特定のSQLエラーコードを書き換える処理をデモとともに解説していました。
講演の後半では、笠原氏からこのようなHookを使って監査ログを柔軟に取りたい、という意見が出され、それをもとにいくつかの議論がされていました。参加者からは、Executorの権限チェックを行うHookを使うのがスマートだという意見や、商用DBMSにあるような特定のオブジェクトに関するSQLだけを取得したい、などの意見が出されていました。
マイグレの話
続いてはNTTデータでPostgreSQLへのマイグレーションに取り組んでいる江川(@daiti0804)氏による講演です。 講演では、近年加速しているPostgreSQLへのマイグレーションの現状とNTTデータで行っているマイグレーションサービスで得られたノウハウや実状を紹介していました。アセスメントでマイグレーションの向き不向きをしっかりと見極めること、ツールを利用するなどしてSQLの非互換箇所のコンバートを手をかけずに実施することがコストメリットを出すポイントのようです。 講演後の質問では、SQL移行に関するツールやストアドプロシージャの移行、移行後のバックアップ手法について活発な議論がなされていました。こういった議論を背景にPostgreSQLへの移行障壁が下がり、マイグレーションへの流れがさらに加速していくことが期待されます。
SQLの話
@choplin氏による、SQLで素因数分解やエラトステネスの篩、Grassを実行してみたショートセッションです。非常に短時間(3分くらい?)のライトニングトーク的な話でしたが、複雑な素因数分解や素数の洗い出し?、そしてGrassをすべてSQLで実装し処理してみた、といった非常に濃い話をデモとともに解説していました。もしかしたら、今回のカンファレンスで一番技術的に濃い話?だったかもしれません。GrassのSQL実装などに関しては@choplin氏のBlogに記載されています。このようなユーモラスで濃い話が聞けるのもアンカンファレンスの魅力でしょうか。
DWH用途でPostgreSQLを使っている人いませんか?どんな使い方してますか?
アンカンファレンス最後のセッションは、@kingyokkun氏による、DWHにまつわる自由ディスカッションでした。特に講演資料などはなく、DWHについて思うことを参加者が気ままに議論するスタイルで進行していました。DWHはやや特殊なDBMSの使い方となるため、議論の焦点も技術的に高度なものから、運用者観点で見た面白い課題まで幅広いものになっていました。流行りの列指向DBMSが得意とする圧縮処理をenum型を利用して類似の形をとってみたり、検索列すべてにインデックスを張ってインデックスオンリースキャンしか使えなくする方法、SQL性能もさることながらその処理想定時間を予め把握することが重要、ETLで重複情報を圧縮して検索に有利するとよい、などなど非常に興味深いトピックが議論されました。議論はなかなか尽きませんでしたが、本ディスカッションにてアンカンファレンスの締めくくりとなりました。
終わりに
初のアンカンファレンスでしたが、使ってみた話からPostgreSQLの新機能にまつわる技術講演、そして最後はディスカッションというように、講演者だけでなく参加者も巻き込んだインタラクティブな場となりました。開催者の永安氏からは、今後も定期的にこういったアンカンファレンスを行っていきたいとの話がありました。技術的な話だけでなく、運用者や初心者から見た悩みについての相談場としても有用な場だと思います。ぜひ、次のアンカンファレンスではもっと多岐にわたるトピックで盛り上がることを期待したいと思います。
アンカンファレンス後の飲み会風景(江川氏撮影)
補足
(2013 年 3 月 6 日公開)