[Database] Questions You Asked: How do I limit the amount of memory each PDB can use in the IM column store?

原文はこちら。
https://blogs.oracle.com/In-Memory/entry/questions_you_asked_how_do

PDBがどういうものかよく把握されていないかもしれないので、まずMultitenant環境がどういうもので、PDBがどのようにMultitenant環境に適合するのかを説明させてください。
Oracle MultitenantはOracle Database 12cにおける新しいデータベース統合モデルで、複数のPluggable Database(PDB)を一つのContainer Database(CDB)内で統合します。
Oracle Multitenant (Blogエントリ)
https://blogs.oracle.com/Multitenant/
単一のデータベースの分離の側面を維持しながら、Oracle Multitenantを使うとPDBはシステムグローバルエリア(SGA)を共通のCDBのバックグラウンドプロセスと共有することができます。


Oracle Database In-Memoryと共に使用する場合、PDBは単一のIn-Memoryカラムストア(IMカラムストア)も共有しますので、「各PDBがIMカラムストアで利用可能なメモリサイズをどのように管理すればよいか」という質問が出てきます。

IMカラムストアの全サイズは、CDBで設定するINMEMORY_SIZEパラメータによって制御されます。デフォルトでは、各PDBはIMカラムストア全体を見て、完全にそれを移入し、仲間のPDBにメモリが割り当たらない可能性があります。

他のPDBがメモリを使えないことを避けるため、以下のコマンドを使い、PDBレベルでINMEMORY_SIZEパラメータを設定することで、PDBが利用できる共有IMカラムストアの量を指定することができます。
ALTER SYSTEM SET inmemory_size = 4G container = OE scope = spfile;
所定のCDBが管理するすべてのPDBがIMカラムストアを使う必要はありません。あるPDBはINMEMORY_SIZEパラメータをゼロ(0)に設定される可能性があります。これはIn-Memoryカラムストアを全く使わないことを意味します。以下の図では3個のPDBを使った例を示しています。

PDBのINMEMORY_SIZEパラメータの合計がCDBのINMEMORY_SIZEパラメータのサイズよりも小さいもしくは等しくする必要はありません。PDBがIMカラムストアをオーバーサブスクライブすることが可能です。PDBをシャットダウンもしくは抜く場合、オーバーサブスクリプションはIMカラムストアの貴重な領域を無駄にしないことを保証することができます。INMEMORY_SIZEパラメータは静的(すなわち、変更を反映するためにはデータベース・インスタンスの再起動が必要)なので、PDBにオーバーサブスクライブさせたほうがよいです。そうすることで、IMカラムストアのすべての領域を利用することができます。
しかし、これを行う場合、オーバーサブスクリプションが原因で、別PDBにとってIMカラムストアの領域が足りなくなる可能性があります。任意のPDBを長時間シャットダウンしたり、PDBが抜かれたりすることは期待できない場合、オーバーサブスクライブしないことをお勧めします。
ここで、PDBの移入の順序を管理する方法がどうなっているのか疑問に思われるかもしれません。
各PDBは、完全なOracle databaseですので、そのため各PDBは自身のプライオリティリストを有しています。PDBは自身のプライオリティリストのオブジェクトを起動すると、利用可能な領域があると仮定して、そのプライオリティリストをIn-Memoryカラムストアに順に移入します。
In-Memory Priority
https://blogs.oracle.com/In-Memory/entry/in_memory_priority

0 件のコメント:

コメントを投稿