はじめに
昨今RDBMSをOSS化する動きは多いのではないだろうか?
当然ながら金銭面での苦労がなくなった分、OSSDBを利用する上で苦労する点はいくつかあるのでご紹介したいと思います。
これから導入を検討しようと考えている方 の参考にでもなればと思います。
同じクエリなのに・・・
最初に戸惑ったのは実行するクエリは一緒なのに実行時間が大きく異なる点となる。
異なるDBMSであるため、実行プランの組み立てや、内部キャッシュの仕組みは全然異なるという点に起因しているものと思われる。
実際、商用DBではすごく早く終了する処理がOSSDBで流すといつまでたっても終わらないということはざらにあるため、商用なりにこのあたりを 「いい感じ」 に処理するようになっているのかもしれない。
OSSDBを扱う上ではこれまで気にしなかった、プランナ/オプティマイザの理解や、実行プラン の見方など学習する必要がある。
Vacuum? なにそれ?
これもpostgreSQL特有の考え方であろう。
細かくは公式文書を見ていただきたいが、UpdateやDelete時にゴミが残るためそれを凍結・回収する仕組みが必要となる。
最近ではあまり気にせずともauto vacuumがデフォルトでonになっているが、vacuumの頻発は性能劣化につながるためパラメータチューニングが必要となる。
もちろんただいじればいいというものではなく、それぞれの パラメータがどのような意味で変更するとどこに影響するのか?というのを理解した上でデータ量や更新頻度に応じて適切な値を設定する必要がある。
一方、データ量・更新量が大きくなく、パフォーマンスについてもある程度は許容されるのであればそこまで気にする必要はないと思う。
また、拡張機能によりこういったわずらわしさから解放するような動きもあるので、情報収集が必要である。
使ったことある人ーー! シーン
同社内に先駆者がいればいいのだが、おそらくこの記事を興味深く見ている人こそその企業様の先駆者なのだろう。
困ることといえば大体のことを自分で公式文書をなめるように見渡し切り開く必要があることである。
そういった場合ユーザ会への参加していくなどコミュニティの一員となってみると相談相手がいていいかもしれない。
運用系の機能が
高級な商用DBでは月に一度インデックス再作成して〜レプリケーションして~とか保守・運用の機能がついていたりする。
もちろんのことながらそう言ったものは存在しない (拡張の中にあるのかもしれないが知識にはない) レプリケーションは構成すれば自動で走るため少し考え方が異なるが、REINDEXなど定期実行する場合はスケジューラと組み合わせて実行させる必要がある。
あれ? データベース跨ぎできないの?
DBMSの種類にもよりますが、クエリにデータベース指定を行うことができません。
データベース跨ぎでクエリを組むのに慣れてしまっている方は非常に厄介です。
ただしpostgres_fdwというDB跨ぎを可能とする拡張機能がありますので、それを利用することで可能となります。 が、ひと手間必要となるため使い方の学習が必要です。
終わりに
今では大分慣れましたが、切り替わった当初は多少苦労しました。
色々調べていくうちにもっと詳しくなりたいと思うようになり、ある程度の知識は得られたと思います。
先日postgreSQL Conferenceにも出席しましたが、より深い使い込みをしている事例が多数ありまだまだ勉強することがたくさんあるなと思った次第です。