PostgreSQL Conference Japan 2018 に参加してきました

 

 11/22に東京で行われた「PostgreSQL Conference Japan 2018」に参加してきました。

 本イベントは日本PostgreSQLユーザー会主催のイベントで、PostgreSQLに関する色々なお話が聞ける楽しいイベントでした。有料イベントではありますが一般参加なら5,000円(早割なら半額)と比較的安価なので、気軽に参加できました。とはいっても、私はお仕事として参加したので会社持ちです。(しかし懇親会費用は出なかった)

 当日はTwitterでハッシュタグ付きでツイートしまくってたので、最近私をフォローした人はビックリしたかもしれません。普段はずっと「ラブライブがー!」「Aqoursがー!」とかばかりツイートしてますが、実は私、本当は技術者側の人間なんですよ!(デデン

 ということで、ざっくり振り返りです。自分のメモとかツイートとかベースに振り返ってます。
 AMは基調講演が2つ、PMは3つのトラックに分かれて一般公演、という感じです。受付でノベリティとしてロゴ入りの水とシールなどをもらいました。わーい。

image image

◆基調講演

 基調講演1つ目は、NTT OSSセンタの坂田氏による、企業ユーザーから見たPostgreSQLの歴史と展望。Ver8あたりから使って・コミュニティに貢献されてきたとのことで、自分が知らない時代の話が聞けて面白かったです。
 私がさわりはじめたのがVer9.4からなんですが、この話に出てきたVer8のころは色々と課題も多かったようで……チェックポイント時に大幅に性能が低下するとか、VACUUM時の課題とか……。そういった課題を確実に対応していって、今ではビジネスユースにも十分に応えられるものになっていったんですね。
 また、レプリケーション機能に関して、当時コミュニティとしては「外部機能として実装」というスタンスでいたものの、8.1のころにNTT内部で開発を勧めて8.3でOSS版を公開し、それの必要性を各所で語って回った結果本体機能として段階的に取り込まれていったそうです。中々に胸熱な話でした。
 現状もPostgreSQLはまだ課題を抱えていたり機能として中途半端なものもあるけれど、上記のように段階的に進んでいくとのことなので、今後の更なる改善に期待がもてそうです。

 2つ目の基調講演は、Microsoftの藤田氏。
 なんとMicrosoftはこのイベントのプラチナサポンサーとのこと。随所で、MSはOSSに力いれてますよって話とセットで古き悪しきMS帝国みたいな自虐的な話が入り、正直自分はその手のネタはもう食傷気味なんですが、参加者にはそれなりにウケていました。MSに対してはまだそんな感じのイメージの人が多いんだなぁ、とぼんやり思ったり。
 前半ではAzureの話、後半からはAzure上の「Azure Database for PostgreSQL」の紹介。Azureに限らずクラウドのフルマネージドなDBサービス使うと楽ですよー、といった感じ。これは自分も全面的に同意です。
 AzurenoPostgreSQLは、MS独自のカスタマイズはしておらず、コミュニティ版をそのまま使っているそうです。何か手を入れたくなったときはコミュニティにパッチを投げているとのこと。現状は9.5、9.6、10をサポート。11はもう少し待ってください、とのことでそう遠くないうちにサポートされそうですね。
 ひとつ驚いたのは、「Azure Database for PostgreSQL」はダウンタイム無しでスケーリング可能とのことです。AmazonのRDSは1分程度ダウンすると聞いていたので、Azureもそうだと思ってたんですけど。ちなみにこれはService Fabricのおかげとかなんとか。(詳細はよくわかってないです)

 ちなみにAzure上のPostgreSQLは、実体としてはWindowsコンテナとして動作しているとのこと。前半の内容ではAzure上で動いているOSはLinuxが50%以上になった的な話もしてたので、これにはビックリしました。てっきりLinuxかと……。Windowsコンテナで動いてるってことは、PostgreSQLもWindows版ってことですから、ちょっとだけ注意が必要になりそうですね。

 

◆一般公演

 PMからの一般公演は3つのトラックにわかれており、そのうちの1つはチュートリアルコースとなっていました。私はこれには参加してないのですが、10月にリリースされたVer11の解体新書とか、チューニングに関する話とか、結構興味のある内容もありました。身体が3つあれば……!
 というわけで参加したやつだけ、簡単に振り返りをば。

 

・A1.MySQLからPostgreSQLへの移行とDBリファクタリング

 株式会社オミカレの高橋氏による、実例に基づいた話。いわゆる「秘伝のソース」状態と化していたため、例えばDBテーブルの性別欄に入っている値が「0、1、2、男性女性」という状態になっているといった、「あーあるある」ってみんなの目が死ぬような状況にあったものを、PostgreSQLへ移行したというお話。
 僕個人としては、担当してるシステムのDBは最初からPostgreSQLなので移行という観点ではあまり関係ないのですが、移行時にMySQLと比較した場合のメリットとか(トリガー関連が決め手になったようです)が聞けて、中々に新鮮な話でした。

 

・A2.EDB Postgres はここまできた!パフォーマンス問題解決のヒント

 株式会社アシストの佐瀬氏による、PostgreSQL11での性能改善に関する話が中心でした。セッションタイトル的にEDB版の話がメインのように感じられますが、実際にはそんなにEDB要素は無かったです。
 パーティショニングに関する性能改善がかなり大きいらしく、パーティション化していない9.6のDBとパーティション化したPostgreSQL11のDBとでは、最大350倍もの性能差があったとのこと。350……これは大きいですね。どうしてそこまでの性能差が出たのか、内部的な動きも一部含めて解説。
 また、アシスト社への問い合わせが多い内容や実例などから、パフォーマンスチューニングで実際に起こっていた問題と対処方法などをいくつか紹介してくれました。Oracleから移行してきたパターンだとOracleのヒントをそのまま使っている場合に誤った実行計画になるとか、大量にテーブルを結合している場合の「join_collapse_limit 」「from_collapse_limit」パラメータに関する話など。このあたりは結構参考になりそうで、助かります。

 

・B3.Citusを使ってPostgreSQLをスケールアウトしてみよう

 ここだけBトラックに移動して、スケールアウトの話を聞いてきました。
 日本HPの篠田氏によるCitus(サイタス。シータスではないらしいです)の概要とその導入方法。CitusはExtensionsとして提供されているため、導入は簡単に行えるというのが最大のメリットかと。コーディネーターと複数のワーカーによって構成されて、実データはワーカー側に分散して保存する、というもの。
 しかし意外と制約が多く、一例として「分散キーの更新不可能」「SELECT FOR UPDATE不可能(レプリカ作成してる場合のみ)」「WITH RECURSIVE句使用不能」「PARTITION BY句の使用に制限あり」など。WITH RECURSIVEが使えないのは結構痛いですね……。しっかり吟味する必要はありますが、条件があうなら簡単に分散化できるので検討の余地はありかと。

 

・A4.運用が大分変わるよ。オンプレ PostgreSQL から AWS のマネージド PostgreSQL の担当になっての知見

 オイシックス・ラ・大地株式会社の林氏による、ECサイト上の分析基盤としてAWS上のPostgreSQLを使うようになった話。それ以前はMySQLを使用されていたそうです。
 この直前に行われていたA3トラックがAWSの紹介だったことと、そのまま継続してA4を受けている人が多かったからか、クラウドを採用するメリットを説明する際にAWSへの熱いダイマが入っていました(サーバーを即用意できるとか、フルマネージドなので管理が楽とか)。 AWSにしろAzureにしろ、特に理由がない限りはもうクラウド上のマネージドサービス使ったほうが圧倒的に楽なんですよねぇ……と改めて実感。
 また、AWSのRDS PostgreSQLはスケーリングに応じて一定の閾値でチューニングが自動的に行われるため、ある程度はチューニングを意識せずに使える、というメリットもあるとのこと。これは初耳でした。しかしスケーリング時には一時停止があるため注意、とのこと。無停止でスケーリング可能なAzureと、チューニング不要のAWSと……どっちもメリットデメリットがある感じですね。

 

◆LT

 最後にLTがいくつかありました。
 「デッドロックが趣味」という人とか、「PostgreSQLで山手線ゲーム」をした人など、中々に濃い?内容でした。今までMS系の勉強会とかカンファレンスへの参加が多めな私でしたが、ああ、どこ行っても頭おかしい(誉め言葉)人はいるんだなぁ、と感じました。(小並感)

 その後は懇親会でしたが、私は不参加なのでここで終了と相成りました。

 

 個人的には、結構収穫の多いカンファレンスだったなと思います。
 最近の自分は、なんだかんだでPostgreSQLにどっぷりになりつつあるので、今後も勉強会とかカンファレンスがあれば積極的に参加していきたいですね。

 あ、あとA4で紹介されてた「[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Amazonへのリンク)」は、早速買ってきました。まずはざっくり読んでおこうかなと。

PostgreSQL:お仕事の関係でAzure Database for PostgreSQLを立てたので、そのメモ

 仕事のほうではずっと社内のWindows版PostgreSQLしか使ってこなかった自分ですが、ここ最近になって、DBをクラウドのフルマネージド環境に移行させる流れがあがってきまして。その流れでAzure上に1つ作成したのですが、折角なので、メモを残しておきます。そんなに大して難しくないですけど。

 尚、Azureのアカウント作ったりとかそういうところはバッサリとカットです。

◆AzureにPostgreSQLのDBを作成する

 まず、ポータル画面にアクセスしたら、左のメニューの「すべてのサービス」を開きます。
 Azureにはいっぱいサービスがありますが、「データベース」カテゴリの中に「AzureDatabase for PostgreSQL」があります。名前の右側にある「★」のマークをクリックすれば、左メニューのお気に入り欄に表示されるようになるので、押しておきましょう。

image

 

 メニューをクリックしたら、PostgreSQLの作成したインスタンス一覧が表示されます。最初は何もないですけど、スクリーンショット取ったのが作成後なので既に出来ちゃってますが、気にしないでください。
 新しく作成するためには、左上にある「追加」をクリックします。

image

 

 新規作成にあたって入力する内容はそんなに多くないです。

image

 サーバー名:任意のもの
 サブスクリプション:契約してるやつを
 リソースグループ:とりあえずテキトーなリソースグループを作成しました
 サーバー管理者ログイン名:任意のもの(ここでは定番の「postgres」に)
 パスワード:任意のもの(パスワード文字列にはルールあり)
 場所:任意の場所
 バージョン:11月2日現在で選べたのは 9.5、9.6、10 の3つ

 そして最後の「価格レベル」の欄です。
 サーバーに割り当てるスペックに応じて金額が変わります。高スペックであれば当然、高価格になりますし、低スペックならばそれなりに安くなります。

image

 ほぼほぼ最低状態にして、毎月のコスト見積もりがおおよそ4400円。これ、実際には使用した分に応じての課金っぽいので、あくまでも見積もり価格だということに気を付けましょう。

 構成を選んだら画面下のOKボタンを押すと、一つ前の画面に戻ります。内容に間違いがなければ、これまた画面下の「作成」ボタンを押します。それからしばらく(1分程度?)待つと、通知欄に作成完了の旨が表示されます。

 

◆接続してみる

 作成が完了したら、Azure Database for PostgreSQLの一覧に表示が出てきていますので、サーバー名をクリックします。すると、そのサーバーの「概要」ページが表示され、詳細が確認できます。

image

 設定の「接続のセキュリティ」をクリックします。

image

 

 テスト用なので、「SSL接続」を無効に。ファイアウォール規則のところに、自PCのIPアドレスを打ち込んで接続許可の状態にします。(入力後、画面上の「保存」を押すのを忘れずに)

 

 ここまで設定しておけば、とりあえず、ローカルクライアントから接続可能になっているはずです。pgAdminなりA5SQLなりのクライアントを起動して、接続テストをしてみます。今回、この記事書いてる段階で自PCのpgAdminがご機嫌ナナメだったので、A5SQLで確認してみます。

 

サーバー名:先ほどの概要ページに表示されているので、それを
データベース名:postgres
ユーザー名:作成時に指定したもの(後ろに「@サーバー名」をつける必要があるので注意)
パスワード:作成時に指定したもの
ポート番号:既定の5432

image

 内容に誤りが無ければ、テスト接続できるはず。

 

 接続できたあとは、普通にPostgreSQLです。

 

◆少しだけ見てみる

 さてさて、これでPostgreSQLのインスタンスが立ち上がったわけですが、現在どんな状態なんでしょうか。少しのぞいてみます。まずはさくっと、バージョン確認。

image

 作成時に指定したバージョンは「10」でした。実際にインストールされたものは「10.5」です。10.5がリリースされたのは今年の8月で、現時点では10での最新版ですね。割と早めに新しいバージョンが導入されているようで、好感触です。流石に先月リリースされたばかりのPostgreSQL 11 は、まだみたいですが。

 

 次に、DB一覧を見てみます。

image

 初期状態では、デフォルトのpostgres以外にも2つ、DBがあることがわかります。名前的に恐らくAzure側の管理・メンテ用でしょう。これらにはウカツに触れないようにしておきましょう。

 では、試しにCREATE DATABASEしておきましょう。

CREATE DATABASE test_db_01 WITH
       OWNER = postgres
       TEMPLATE = DEFAULT
       ENCODING = 'UTF8'
       TABLESPACE = DEFAULT
       CONNECTION LIMIT = -1
;

 

 で、もう一度、DB一覧を取得してみます。

 

image

 

 ちゃんと出来てますね、OK。

 

 これから先、しばらくAzure Database for PostgreSQLを少しいじっていってみたいと思います。なのでまた何か記事にするかも。