PostgreSQL 9.4の新機能のうち、postgresql.auto.confを使った設定変更の方法や、pg_prewarm、 MATERIALIZED VIEWのCONCURRENTLYオプションなど、主にPostgreSQL環境を運用する際に関係する改善点を中心に紹介します。
本稿では、間もなくリリースが予定されているPostgreSQL 9.4beta2を基に、新機能をレビューしています。
実は、PostgreSQL 9.4のリリースが例年のメジャーバージョンリリースと比べてちょっと遅れています。2014年5月に9.4 beta1がリリースされ、7月にbeta2が出たのですから、例年であれば9月にはrc版をリリース、10月初旬には正式リリースというところですが、執筆時点(10月3日)ではいまだrc版もリリースされていません。
開発コミュニティコアメンバーのJosh Berkus氏のブログ記事によると、JSONBデータ型(第1回参照)の実装について、従来のJSON型と比べて性能改善しないケースが報告されていて、それに対して更なる改良をしていることが理由だそうです。10月前半には、この改良を適用した9.4 beta3がリリースされる見通しです。
本稿で紹介する機能は、beta版を基に解説していますが、いずれも正式版での実装が決定していますので、使い方などに大きな変更はないでしょう。
ここからは前回に引き続き、PostgreSQL 9.4の注目機能を紹介していきます。今回はPostgreSQLの運用管理を改善する機能を中心に見ていきましょう。設定ファイルをSQLで変更する方法、データベースのウォーミングアップによる高速化(pg_prewarm)、マテリアライズドビューのロック待ち軽減、アーカイブログの状態を見る(pg_stat_archiver)の順で紹介します。
PostgreSQLユーザーならご存じの通り、PostgreSQLの設定は、リスト1のような変数=値という形式のpostgresql.confファイルで行います。なお、「#」から右はコメントになっており、デフォルトのpostgresql.confファイルには、各行のコメント部分にに設定パラメーターの説明が記述されています。
shared_buffers = 128MB # min 128kB (change requires restart) huge_pages = try # on, off, or try (change requires restart) temp_buffers = 8MB # min 800kB work_mem = 4MB # min 64kB
PostgreSQLでは、以前からいくつかの設定項目については、データベース接続したクライアントごとに以下のようなSQLで変更できました。例えば図1は、ソートの処理やテーブル結合の際のハッシュ生成処理などを行う際に使用されるメモリを設定する場合のSQLです。
db1=> SET work_mem TO '40MB';
ただし、この操作は当該の接続に限定した一時的な変更です。永続的な変更をする場合、また、SETコマンドでの変更が禁止されている項目についてはpostgresql.confファイルを書き替えて設定を再読み込みさせる操作が必要でした。
従来、クライアントからSQLで一時的な設定変更しかできなかったのと対比して、PostgreSQL 9.4では、ALTER SYSTEMというコマンドが追加され、永続的な設定変更をSQLコマンドから実行できるようになりました。ALTER SYSTEMコマンドはデータベース管理者ユーザーで接続して使います。下記コマンドはテンポラリバッファーサイズを80Mバイトに変更する場合の例です。
$ psql -U postgres db1 db1=# ALTER SYSTEM SET temp_buffers TO '80MB';
これを実行すると、データベースサーバーのpostgresql.auto.confというファイルに指定した設定が書き込まれます。このファイル内容は、postgresql.confに対して記述されている設定内容を上書きするものとして、解釈されます。
PostgreSQL 9.3以前の環境では、SQLコマンドで設定ファイル内容を反映させる方法そのものは用意されていました(事前に設定ファイルを書き換えておく必要があります)。以下の関数を実行すれば、postgresql.confおよびpostgresql.auto.confの内容が稼働中のPostgreSQLに反映されます。
db1=# SELECT pg_reload_conf() ;
なお、postgresql.confファイルのコメント欄に「(change requires restart)」と書いてある設定項目は、変更を反映させるのにPostgreSQLの再起動が必要となります。これらについても、ALTER SYSTEMコマンドで設定変更はできますが、SQLコマンドでPostgreSQLを再起動させる方法が用意されていないので、結局、データベースサーバーにログインしてOS上のコマンドを実行しなければいけません。
何らかの事情で再起動に失敗したら復旧のためにはOSログインが必要になるので、データベース接続を通して再起動できるようにするかは、管理ポリシー上、議論の分かれるところです。いまのところ標準機能ではできないものとなっています。
Copyright © ITmedia, Inc. All Rights Reserved.