マルチテナント(Oracle Multitenant)は12c R1から提供されている機能です。データベースの中にデータベースを作ることができ、統合・集約を加速させる新しい手段として登場しました。最大の特長は集約率の高さで、H/W、OS、DBMSを共有するためリソースに無駄がなく、単一のインフラ上で多くのデータベースを稼働させることができます。
※以下の記事で詳細なアーキテクチャを解説していますので、併せてご参照ください。
まさに12cの“c”が示すとおりクラウドを意識した機能と言えますが、いち技術者として見る限り、国内市場への浸透はまだ道半ばという印象です。アーキテクチャが変われば運用も変わるので、慎重に時間をかけて評価するというケースがほとんどではないでしょうか。データベースのメジャーバージョンアップはそれだけで一大プロジェクトです。できるだけ変更要素を減らしてリスクを抑えるという判断が働くのも当然と言えます。
また、12c R1のマルチテナントを検証すると機能的な課題にぶつかることがあります。検証プログラムや技術者同士のディスカッションに参加した際、よく聞こえてきた課題が以下の4つです。
- PDBごとにメモリの割当てを制御したい
- 異なるキャラクタセットのデータベースを統合したい
- データベースを止めずにクローンやUnplug/Plugなどの操作を実施したい
- 各PDBで共通して使うデータを一元管理したい
結論から言うと、これらの課題は12c R2ですべて解決できます。12c R2のマルチテナントはユーザの意見を取り入れた機能改善が多く行われており、12c R1とは違った評価を得られるだけの魅力が備わっています。今回はマルチテナントの進化をいくつかのポイントに分けてご紹介します。
PDBごとのメモリ管理
マルチテナントは、単一のインフラ上で高密度のデータベース統合を実現する機能です。そのため、CPUやメモリ、ストレージといった限られたリソースをPDB間でどう制御していくかが鍵になります。
リソース制御については12c R1の時点である程度機能が備わっており、PDBごとにCPUとI/O(*1)を制御できます。ただし、メモリについてはPDBごとに制御できず、全PDBで1つのSGA(System Global Area)を共有しています。リソースの無駄をなくして集約率を高める仕組みになっているのですが、以下のように高負荷なPDBがSGAを占有すると、他のPDBに影響を与える可能性があります。
(*1)12c R1のI/O制御はExadata環境でのみ可能
12c R2のマルチテナントではPDBごとにメモリ関連のパラメータを設定することができるようになりました。SGA_MIN_SIZEというパラメータが新しく追加され、これを設定しておけばPDBに割り当てられる最低限のSGAを保証できます。また、PDBにSGA_TARGETを設定するとそれがSGAの上限値になるので、他のPDBに影響を与えずに済みます。
初期化パラメータ | 説明 |
SGA_TARGET |
PDBのSGA最大サイズ (CDBのSGAに空きがあっても上限突破しない) |
SGA_MIN_SIZE |
PDBに保証されるSGAのサイズ (SGA_TARGETの50%以下に設定) |
DB_CACHE_SIZE | PDBに保証されるバッファキャッシュのサイズ |
SHARED_POOL_SIZE | PDBに保証される共有プールのサイズ |
PGA_AGGREGATE_LIMIT | PDBのPGA最大サイズ |
PGA_AGGREGATE_TARGET | PDBのPGAターゲットサイズ |
このように、12c R2ではPDBごとにきめ細かくメモリを制御できます。PDBの独立性が高まり、より安全に統合・集約を進められるようになったと言えるでしょう。ただし、パラメータの設定は慎重に行う必要があります。例えば、SGA_MIN_SIZEを必要以上に高く設定すると集約率が落ちてしまいます。最初からすべてのPDBを対象とせず、必要なPDBに絞ってパラメータを設定することをお薦めします。
参考までにOracle社が提供するクラウドサービスであるExadata Express Cloud Serviceのパラメータを覗いてみましょう。Exadata Express Cloud Serviceは、マルチテナントのPDBだけを提供するPaaSです。つまり、1つのCDBを独占して利用するのではなく、複数のユーザで共有しているのです。
初期化パラメータ | 設定値(*1) |
SGA_TARGET | 3G |
SGA_MIN_SIZE | 0 |
PGA_AGGREGATE_LIMIT | 3G |
PGA_AGGREGATE_TARGET | 1500M |
(*1)X20という最小のプランを選択した場合の値です
パラメータを見ると、SGA_TARGETは設定されていますがSGA_MIN_SIZEは0になっています。つまり、上限だけが設定されている状態です。クラウドサービスのように集約率を重視する場合、こうした設定にしておくとリソースの無駄がありません。Exadata Express Cloud Serviceは月額\21,000という低価格で提供されているのですが、もしかしたらこのあたりに安さの秘訣があるのかもしれません。