プリミティブなところがごっそり変わったという印象ではない
谷川:7月にOracle Database 12cが国内提供開始となりました。12cの新機能や特徴についてざっくばらんに語っていきたいと思います。まずはマルチテナントアーキテクチャから。コンテナデータベース(CDB)やプラガブルデータベース(PDB)がまだよく分かっていません。どう考えればいいのかな。
新久保:中身までは見ることができないので触った印象ですが、PDBはスキーマです。スキーマがあたかもデータベースのように振る舞っているかのように見えます。例えばライブラリのダンプ(*1)を見ると、PDBはスキーマの拡張のようだと感じています。
近藤:PDBがスキーマと違う点はアプリケーションの実行環境であるということです。アプリケーションに必要なデータベース環境をPDBの中に閉じ込めて分けるというコンセプトになっています。PDBにアプリケーションの環境を閉じ込めて、テナントとして分けると移動しやすくなるという利点が生まれます。
新久保:そうそう。Oracle DatabaseからPDBを見たらどう見えているのかな。
谷川:PDBがスキーマの拡張に見えるというあたり、ユーザーはSQLをたたくとか操作すれば片りんを見ることができるの?
新久保:いいえ、SQLやデータベースのレイヤでは見られません。ただメモリのダンプを取るとスキーマっぽく見えます。
谷川:長年データベースをやっていてどうですかね?気持ち的には。
新久保:違和感ないです。
谷川:オラクルのメッセージとしては「マルチテナント」という新しいアーキテクチャを出したのだけど、手をかけて全く新しい機能を実装したというわけではないのか。もちろん手をかけていないとは言わないけど(笑)
新久保:プリミティブなところがごっそり変わったという印象ではないですねえ。
谷川:ひとつ疑問が。CDBでリソースを共有できるというけど、どこまで本当でしょうか?
新久保:悩ましいです。マルチテナントアーキテクチャにおいて、共有か、非共有か。どちらと言うべきか。揺れる想いみたいなものが……。
一同:(笑)
新久保:データファイルは一部を除き非共有です。メモリは完全に共有。CPUも共有。でも、CPUは分ける方法が用意されているのに対して、メモリだと分ける方法はありません。分けたい時もあるんですよね。
これまでの複数インスタンスの運用とマルチテナントの運用とは方向性が違います。そういう意味では設計が難しくなるかもしれません。単純にぼんとCDBを立て、PDBは最大252個まで積めますが、本当に最大限積んだら大変なことになりそう。
谷川:ハードウェア的には「このくらい積まないとマルチテナントにする意味がない」というような目安はありますか?コア数とか、メモリとか。
新久保:絶対値として数字を出すのは難しいですが、リソース的にはジャブジャブにあったほうがいいでしょうね。
谷川:それこそExadataくらいに(笑)
*1)マルチテナント・アーキテクチャがスキーマっぽく見える件の補足
11gR2で、スキーマの異なるオブジェクトに対して、同一SQL文を実行した際のLibrary Cacheのダンプと12cR1で、プラガブル・データベースが異なるオブジェクトに対して、同一SQL文を実行した際のLibrary Cacheのダンプを比較してみると、あたかも12cR1はプラガブル・データベースが11gR2までのスキーマ構造の拡張として扱われているように見える。
11gR2のカーソルのダンプ
親カーソル抜粋
LibraryHandle: Address=0x8f4edb988 Hash=6428dffc LockMode=0 PinMode=0 LoadLockMode=0 Status=VALD
ObjectName: Name=select /* Welcome to JPOUG */ * from test
子カーソルの依存オブジェクト部分の抜粋(KSHINKUBユーザーで実行)
Dependency: num='1'
Reference=0x80e76fc48 Position=37 Flags=DEP[0001]
Handle=0x914e631f8 Type=TABLE(02) Parent=KSHINKUB.TEST
子カーソルの依存オブジェクト部分の抜粋(KSHINKUB2ユーザーで実行)
Dependency: num='1'
Reference=0x80e73dc48 Position=37 Flags=DEP[0001]
Handle=0x90dbdc3e0 Type=TABLE(02) Parent=KSHINKUB2.TEST
* 11gR2以前は、スキーマが異なるオブジェクトは上記の様に"スキーマ"."オブジェクト"として表現される。
12cR1のカーソルのダンプ
親カーソル抜粋
LibraryHandle: Address=0x103b8e0048 Hash=6428dffc LockMode=0 PinMode=0 LoadLockMode=0 Status=VALD
ObjectName: Name=select /* Welcome to JPOUG */ * from test
子カーソルの依存オブジェクト部分の抜粋(プラガブル・データベースIQPDB01のKSHINKUBユーザーで実行)
Dependency: num='1'
Reference=0x103b96a700 Position=37 Flags=DEP[0001]
Handle=0x103bd16850 Type=TABLE(02) Parent=IQPDB01.KSHINKUB.TEST
子カーソルの依存オブジェクト部分の抜粋(プラガブル・データベースIQPDB02のKSHINKUBユーザーで実行)
Dependency: num='1'
Reference=0x103b8de438 Position=37 Flags=DEP[0001]
Handle=0x103b9000c0 Type=TABLE(02) Parent=IQPDB02.KSHINKUB.TEST
* 12gR1のマルチテナント・アーキテクチャでは、プラガブル・データベースが異なるオブジェクトは上記の様に"プラガブル・データベース"."スキーマ"."オブジェクト"として表現が拡張されている。
≪気になったら今すぐトライアル!≫
Oracle Database 12c トライアル・キャンペーン!
Oracle Database 12cは、もうお試しになりましたか?
Oracle Technology Networkでは、Oracle Database 12cのリリースを記念して、トライアル・キャンペーンを実施中です。 Oracle Database 12c 試用版ソフトウエアをお試しいただき、アンケートに回答していただいた方の中から、合計1,212名様にOracle Database 12cロゴ入りのスペシャルグッズをプレゼントします。Oracle Databaseを使用しているデータベースエンジニアの皆様、ぜひ挑戦してみてください!