こんにちは。技術部の髙岡です。 12/10(月)~12/12(水)に秋葉原でPGConf.ASIA 2018が開催されました。 12/11(火)は業務都合で行けなかったのですが、12/10(月)午後と12/12(水)午後のプログラムを聴いてきました。 PostgreSQLの経験が有る人でも無い人でも、有益な情報を得ることができるプログラムが揃っておりました。ノウハウ的な内容を聞くことができたり、日頃から疑問に思っていたことを解決することもできたので、とても勉強になりました。 以下、特に興味深かったことを抜粋します。
商用DBからPostgreSQLへの移行が向いていないケース
- 分散処理やインメモリデータベースとしての利用
- OracleRAC型の更新系スケールアウトからのリプレース先
- 逆に言うと、OracleRACでは過剰だと思われる場合の選択肢としては適している。
- ライセンス費用を抑えたいという理由のみでの移行
機能の違いを吸収するための対策や移行コストを試算すると、商用DBのまま運用した方がコストメリットがあるケースもあるそうです。機能の違いの具体例を紹介します。
<具体例>
・PostgreSQLは別トランザクションがコミットした結果でなく、自分が処理している最中のトランザクションを見てしまう。そのため、処理結果が異なってしまうケースがある。
これは、要注意ですね。プログラムのテストをすべてやり直して、テストNGの処理は改修する、という作業が必要かと思うと、本当に大変そう。。
・トランザクションで実行しているDMLのエラーが発生した場合、PostgreSQLの場合はエラーが発生したDMLのみでなく、そのトランザクション全体をロールバックしてしまう。発表者の方の言葉を借りると、思わず「え~!?」と叫んでしまいたくなります。
PostgreSQLをWindows上で運用した場合の性能の検証
- 一般論として、Linux版と比べると、Windows版は性能に問題があると言われております。
PGEconsの山本様が実際に検証した結果を報告してくださいましたが、顕著な性能差は無かったそうです。
PostgreSQLをクラウド上のマネージドDBでなく、OS上に構築して運用した方がよいケース
- 米国でコンサルタントをされているCorey様が、広告のアクセスログを収集するシステムを事例に説明してくださいました。マネージドDBのメリットばかりが語られることが多い中、最も興味深いテーマでした。
- カスタムのExtentionを使いたい場合
- マネージドDBではコスト高になってしまうようなワークロードを実行する必要がある場合
- copyコマンドのように、OS機能と密接に関わった処理が必要となる場合
- マネージドDBでは変更できない細かいチューニングをしてみたい
運用支援機能
- Zabbixには、PostgreSQLの監視用テンプレートを導入可能です。
Zabbixは結構使うので存在自体は知っていたのですが、PostgreSQLの監視テンプレートをきちんと見たことがありませんでした。DB内部の状態の何を監視しているのか、今度、じっくり見てみます。
MySQLと比べた優位点
- これも興味深いテーマでした。機会を作って、実際に比較検証してみたいと考えております。
- PostgreSQLは多機能志向なので商用DBからの移行先として向いている。
- 結合のアルゴリズムの選択肢が多い。ソートマージ、ネストループ、HASH Join、Merge Join、等、一通り使うことができる。MySQLはネストループのみ。
- 逆に言うと、MySQLは向いているユースケースが限定されているが、ユースケースがハマれば、軽いし、早い。
PostgreSQLが使うディスク領域について
- PostgreSQLは、データの領域としてはファイルのみ選択可能で、ローデバイスを選択できません。(今まで気づいていませんでした。。)
そのため、メモリ上のキャッシュデータがディスクに書き込まれるまで、ファイルシステムのキャッシュを経由する必要があります。
メモリとストレージが常に同期されているかとても不安なので、ストレージのバックアップを正常に取得できないのでは?という話に関連しており、日立の稲垣様が実際にバックアップを検証したそうです。詳細は割愛しますが、不安を払拭できるバックアップ方法を紹介してくださいました。