TOP>企業情報>コラム>技術情報>利用範囲がさらに広がる!Postgres Plus 9.4新機能の全容 Vol.2

利用範囲がさらに広がる!Postgres Plus 9.4新機能の全容 Vol.2

EDB Postgres

商用RDBMSと遜色ない機能を持ち、エンタープライズ用途での採用が拡がるPostgres Plusの最新バージョン9.4が、今秋のPostgreSQL 9.4リリースに追随する形で2014年11月にリリースされます。本連載では3回にわたり、エンジンであるPostgreSQLとともにPostgres Plus 9.4に実装される新機能の全容に迫ります。

Vol.2 Postgres Plus 9.4独自の新機能解説

Postgres Plus 9.4 独自のエンタープライズ向け新機能


Postgres Plus Advanced Server(以下、PPAS)は、Postgres Plus Enterprise Edition(以下、PPEE)のデータベース・エンジンで、PostgreSQLをベースとしパフォーマンスやセキュリティなどの分野のエンタープライズ向け機能が強力されています。

図1はPPAS 9.4の主な新機能をカテゴリ別にまとめたもので、エンジンであるPostgreSQL 9.4には性能、運用、可用性、データウェアハウス、開発などのカテゴリで主要な新機能が実装されており、PPAS 9.4には性能、運用でより使いやすいRDBMSを目指したエンタープライズ向けの機能が追加されています。

図1:PPAS 9.4の主な新機能

図1:PPAS 9.4の主な新機能

前回は、エンジンであるPostgreSQL 9.4の新機能の中からエンタープライズでの利用を想定した以下の機能に焦点を当ててご紹介しました。

・性能 - HugePage対応
・運用 - ALTER SYSTEMコマンド
・可用性 - レプリケーション・スロット
・データウェアハウス - マテリアライズド・ビューの拡張
・開発 - バイナリJSON

今回は、PPAS 9.4独自のエンタープライズ向け新機能として「パーティション」と「リソースマネージャ」をご紹介します。

ハッシュ・パーティションで用途に合わせたデータ分割


パーティションとは、図2のように大規模な表をパーティションというより小さくて管理しやすい固まりに分割して格納する機能です。各パーティションを異なるディスク領域へ配置することで検索処理を高速化したり、管理の効率化を図ることができます。

図2:パーティションによるデータ分割

図2:パーティションによるデータ分割

PPASではPostgreSQLと同様に「継承」「制約」「トリガ」の3つの機能を組み合わせてパーティショニング機能を実現していますが、PostgreSQLに比べて設定手順が簡略化されています。PostgreSQLでは親テーブル、パーティションの位置づけとなる子テーブルの作成に続き、データ挿入のためのINSERTトリガ作成など複数のステップを踏む必要がありますが、PPASはOracle Databaseのパーティションテーブルと同じ構文をサポートしており、親テーブルを作成するコマンド1つですべての作業が内部的に行われるため、設定はとても簡単です。(※1)

パーティションによる検索処理を高速化するために、内部ではパーティション・プルニングと呼ばれる機構が動作します。例えば、図3のようにsales表から5月の売り上げを検索する場合、WHERE句にパーティションキーであるorderdate列を「2013-05-01から2013-05-31」と指定すると、4月から6月分のデータが格納されたパーティションにのみアクセスします。それによりディスクI/Oを抑制し、処理の高速化を実現しています。

図3:パーティション・プルニングの動作

図3:パーティション・プルニングの動作

PostgreSQLではテーブルに定義したCHECK制約を利用してアクセスする子テーブルを絞り込みます。そのため、子テーブルの数が増えると絞り込む際にオーバーヘッドが発生する可能性があり、子テーブルは100個程度が上限と言われています。PPASではこの点にも改善が加えられており、1,000個の子テーブルを持つテーブルに対する複数セッションからの検索処理では最大76倍、大量データの挿入では450倍以上の性能向上が確認されています。(※1)

(※1)PPASのパーティションテーブル作成コマンド、処理性能の詳細は、以下の記事をご参照ください。→「Postgres Plus 9.3 いかに進化したのか検証してみた

一般的にパーティションには用途に応じていくつかの種類が用意されており、PPASでは従来から「レンジ」「リスト」がサポートされています。どちらのパーティションを利用するかはパーティション・キーに指定する列の値をどのような方法で分割するかで決定します。

レンジ・パーティションは、図4のようにパーティション・キーの範囲や期間に基づいて、データを分割します。これは最も広く使われているパーティション化で、主に日付データとともに使用されます。例えば、売り上げデータなど時系列で生成されるデータに対して、年、四半期、月といった日付をWHERE句に指定してアクセスする場合に有効です。また、リスト・パーティションは、国や地域、都道府県など順不同で関連性のないデータをグループ化し、任意のパーティションへ格納する場合に有効な手法です。

図4:従来のパーティションの種類

図4:従来のパーティションの種類

そして、今回、もう1つの主要パーティションである「ハッシュ」がPPAS 9.4でサポートされます。ハッシュ・パーティションは、レンジやリストによる分割が難しいデータをPPAS独自のハッシュ・アルゴリズムによって均等に分割します。レンジやリストによる分割はデータ自体に依存するため、図5にあるように各パーティションに格納されるサイズが均等にならないケースがありますが、ハッシュはパーティション間でデータを均等に分散するため、すべてのパーティションはほぼ同一のサイズになります。これにより、主にデータ挿入を含むバッチ処理でディスクアクセスを均等化し、パフォーマンスの向上が期待できます。今後、1つの処理を複数のプロセスで並列に実行できるパラレルクエリが実装されれば、ハッシュ・パーティションのメリットがより活かせるようになります。

図5:ハッシュ・パーティション

図5:ハッシュ・パーティション

さらに、Postgres Plusでは図6のように各パーティションの下にさらに小さいサブセットを持たせるサブパーティションもサポートされており、「レンジ」「リスト」「ハッシュ」の3種類のパーティションを用途にあわせて自由に組み合わせることができます。例えば、売り上げデータを年(レンジ)、国(リスト)で分割すると、期間ごとの各地域の売り上げを参照するアプリケーションで効果を発揮します。

図6:サブパーティション

図6:サブパーティション

異なる処理へリソースを適切に割り当てるリソースマネージャ


昨今、データベース統合などにより同一のサーバ上で複数の業務のデータベース処理が実行される環境が増えています。複数の業務処理が同時に実行される場合、データベース側で処理の優先順位付けができないと、業務で期待する優先度でシステム処理ができないケースもあります。

PPAS 9.4に新たに実装されたリソースマネージャは、データベースプロセスが利用するハードウェアリソースをリソースグループという単位で制御する機能です。設定できる範囲はデータベースクラスタ全体に加え、図7にあるようにデータベースやユーザ、またセッション単位など処理の特性に応じて柔軟にリソースを割り当てることができます。Oracle Database Enterprise Editionにも同様の機能がありますが、PPASではそれが標準機能として組み込まれたことになります。

図7:リソースマネージャによる制御

図7:リソースマネージャによる制御

リソースマネージャで制御できるリソースは2つです。1つはCPUでcpu_rate_limitパラメータに1CPUあたりの使用率を設定します。

例)CPU使用率を50%に設定する

ALTER RESOURCE GROUP resgrp_user1 SET cpu_rate_limit = .5 ;


もう1つは1秒間の共有バッファに対する書き込み量を制御する方法で、dirty_rate_limitパラメータにキロバイト単位の値を設定します。商用RDBMSには同等のパラメータは存在しないため、I/Oスループットを制御できるPPAS独特の方法と言えます。

例)1秒あたりの書き込みを10,240キロバイトに設定する

ALTER RESOURCE GROUP resgrp_user1 SET dirty_rate_limit = 10240 ;


リソースグループは3つのステップを踏むだけで設定でき、とてもシンプルです。CREATE RESOURCE GROUPコマンドでリソースグループを作成後、ALTER RESOURCE GROUPコマンドで各パラメータの値を設定します。そして最後にリソースグループを制御対象へ割り当てます。下記はuser1へresgrp_user1を割り当てた例です。尚、リソースマネージャによる制御は、リソースグループを制御対象へ割り当てた後に実行される処理からすぐに有効になります。

1.リソースグループを作成

CREATE RESOURCE GROUP resgrp_user1;

2.リソースパラメータに値を設定

ALTER RESOURCE GROUP resgrp_user1
SET cpu_rate_limit = .5 ;
ALTER RESOURCE GROUP resgrp_user1
SET dirty_rate_limit = 10240 ;

3.リソースグループをユーザに設定

ALTER ROLE user1
SET EDB_RESOURCE_GROUP = resgrp_user1;


PPAS 9.4では、リソースグループを管理するために2種類のシステムカタログが提供されています。edb_resource_groupビューは各リソースグループに設定した各パラメータの値を確認する際に利用します。


実際のリソースグループの利用状況はedb_all_resource_groupsを参照します。このシステムカタログを利用することで、参照した時点でアクティブとなっているプロセス数やそのプロセスが利用しているリソースの割合を確認することができます。


処理に応じて適切にリソースを割り当てるリソースマネージャが実装されたことにより、今後、データベース統合などによってOLTP、データウェアハウスなど複数の異なる処理が混在する環境下でのPostgres Plusの利用拡大が期待できます。

GUIツール、データ連携機能の進化でさらに使いやすく


PPEE全体ではPPASの新機能に加えて、GUIツールやデータ連携など周辺機能も強化されています。

Postgres Enterprise Manager(以下、PEM)は、複数サーバで稼働するPPEEおよびPostgreSQLデータベースの一元的な管理、監視、チューニングを実現するGUIツールです。

次期バージョン 5.0ではLog Analysis Expertと呼ばれるオプションが実装される予定で、サーバログに保存された情報を元にデータベースの稼働状況に関するレポートが生成されます。このレポートには1時間あたりのSQL処理の最小、最大、平均の処理時間やロック、待機イベントなどの統計情報が含まれ、主にデータベースの性能に関する各種パラメータ調整などの判断に役立ちます。

また、5.0ではストリーミング・レプリケーションを利用した可用性構成の監視ができるようになります。マスタサーバ、スレーブサーバの稼働状況を一元的に監視できるため、現場担当者の負荷を軽減します。

xDB Replication Server(※2)はテーブル単位でデータを複製する機能で、1つのマスタサーバと1つ以上のスレーブサーバで構成するシングルマスタレプリケーションと、複数のマスタサーバで構成するマルチマスタレプリケーションをサポートしています。

現バージョンでは、1つのマスタサーバに対してある拠点では読み取り専用のスレーブサーバとして、ある拠点では双方向で更新処理が可能なマスタサーバとして連携するようなシングルマスタとマルチマスタレプリケーションが混在する構成はサポートされていませんが、次期バージョン 5.2では連携先のシステムでデータ処理内容に応じた構成が可能になります。

また、トリガによってテーブルに対する更新処理を内部テーブルに保存し、その情報を元に連携先へデータを伝播する現在の仕組みに加えて、プラグインの位置づけでPPAS 9.4に新たに実装されるロジカルデコーディングの活用が計画されています。ロジカルデコーデイングはWALファイルからDML(INSERTやDELETE、UPDATE)による変更情報を抽出できる機能です。連携元のWALファイルから抽出されたSQLを使って連携先でデータを復元できるため、トリガベースの仕組みで課題となる性能などの改善が期待できます。

(※2)xDB Replication Serverの詳細は、以下ページをご参照ください。→「xDB Replication Server解説
 
今回はPPAS 9.4の主要な新機能とPPEE全体で実装される周辺機能をご紹介しました。次回は、これまで2回にわたって解説した9.4の新機能について、OLTP、データウェアハウスのカテゴリに絞り、弊社で行った検証結果も交えてさらに詳しくご紹介します。

  • Postgres Plus は、EDB Postgres の旧製品名です。


執筆者紹介

高瀬 洋子(Youko Takase)

株式会社アシスト データベース技術本部

アシスト入社後、Oracle Databaseのサポート業務を経て、2009年よりPostgreSQL、EDB Postgresのサービス立ち上げに参画。「PostgreSQLなら高瀬に聞こう」と社内外から言ってもらえる存在となることを目標に日々活動。2014年4月よりイギリスに拠点を移し、PostgreSQL、EDB Postgresの啓蒙活動と顧客対応の後方支援を担当。

高瀬の紹介記事はこちら

連載記事一覧

関連製品/サービス


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る