How to Use the PowerPoint Template

免責事項
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目
的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を
提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。
オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定さ
れます。
Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。
他社名又は製品名は、それぞれ各社の商標である場合があります。
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
2
Oracle Database 12c Release 1 (12.1.0.2)
CoreTech Seminar
Oracle Database In-Memory: メモリー構造と設定
日本オラクル株式会社
データベース事業統括 製品戦略統括本部
データベースエンジニアリング本部 Database & Exadata技術部
井上 克己
2014/08/20
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Agenda
1
メモリー構造
2
ポピュレーション
3
インスタンス・レベルの設定と動作
4
オブジェクト・レベル、カラム・レベル設定
5
圧縮
6
プライオリティ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
4
インメモリ・カラム・ストアの基本構成
SGA内の新たな領域として、
インメモリ領域を追加
System Global Area (SGA)
Buffer Cache
Large Pool
Shared Pool
Other shared
Memory
Components
Redo Buffer
INMEMORY_SIZE
パラメータによりサイズ設定
最小値は100MB
SGA_TARGETは十分に
大きな値の設定が必要
In-Memory
Area
静的プールとして確保
INMEMORY_SIZE
パラメータ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
5
インメモリ・カラム・ストア: 2つのプール領域
SGA
Buffer Cache
インメモリ・カラム・ストア
1 MB Pool
64 KB Pool
メタ
データ
IMCU
ジャーナル
メタ
データ
メタ
データ
IMCU
IMCU = In-Memory Compression Unit
IMCU
ジャーナル
IMCO
Wnnn
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
6
インメモリ・カラム・ストアの構成
• 1MBプール と 64KBプール
– 1MBプール: 列型形式のデータがIMCUとして格納される
• 1MBの倍数単位で割り当てられる
– 64KBプール: 複数の目的で使用される
• IMCUのメタデータ格納のため使われる
• データ更新時、削除時などにジャーナルとして使われ使用率が増える
• inmemory_sizeパラメータで指定したサイズの一定の割合が64KBプールと
して自動で割り当てられる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
7
ディスクとインメモリ: 比較
インメモリ・カラム・ストア: 列型フォーマット
ディスク上の表領域: 行型フォーマット
In-Memory Area
Data file 1
IM セグメント
Data file 2
セグメント
Data file N
IMCU = In-Memory Compression Unit
IM セグメント
セグメント
Extent
Block
Extent
Extent
Block
IMCU
IMCU
Extent
行
行
行
行
Block
8KB
IMCU
カ
ラ
ム
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
カ
ラ
ム
カ
ラ
ム
カ
ラ
ム
n MB
8
IMCU(In-Memory Compression Unit): カラム以外の構成物
6列の表の例
P_PARTKEY
P_NAME
P_MFGR
他のカラム
RowID Min/Max
全てのIMCU内にカラム数分
のカラム圧縮ユニット
IMCU内の行数は圧縮指定に
より異なる
100M行の表の場合
数百個のIMCU
数十万行分の値
各IMCU内にRowID CUと
各カラムの最大最/小値エリア
が存在
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
9
Agenda
1
メモリー構造
2
ポピュレーション
3
インスタンス・レベルの設定と動作
4
オブジェクト・レベル、カラム・レベル設定
5
圧縮
6
プライオリティ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
10
ポピュレーション(population)とは
インメモリ・カラム・ストア
• データをディスクからインメモリ・カラム・
ストアへ載せる動作を指す
– データベースに新しいデータを取り込まない
– 既存データをメモリー中に最適化されたカラム
型フォーマットで取り込む
• ポピュレーションはバックグラウンドで実
行される
SALES
ora_w001_orcl
– ora_wNNN_${SID} プロセス
– ワーカー・プロセス数は新しく追加された
INMEMORY_MAX_POPULATE_SERVERS
パラメータで設定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
11
ポピュレーション
• 対象セグメント(表、パーティションなど)
を水平分割し複数プロセスで処理
– 分割時の処理については後述
• ダイレクト・パス読み取り
– バッファ・キャッシュには載らない
• 右図の解説
– 行数の異なる3つの表で
合計9つのIMCUの場合
– 9ワーカー・プロセスが同時に起動
PRODUCTS
CUSTOMERS
SALES
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
12
IMCUへの分割
• ポピュレーション時に内部で自動的に分割し、1ワーカー・プロセスが1つ
のIMCUを作成
• IMCUのサイズは行数、または、ディスク上でのサイズにより分割される
– 数十万行、数100MB程度
– 1行のサイズの平均が小さい場合、行数で分割される
• HCC(Hybrid Columnar Compression)と比較するとユニット・サイズは大きい
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
13
最大値/最小値(ストレージ・インデックス)
• ポピュレーション時に全てのIMCUで全てのカラムのmin/max値が格納される
• NUMBER、VARCHAR2、CHAR、DATE型などはmin/max値が格納される
• Exadataのストレージ・インデックスと類似する機能
– Database In-Memoryでは全てのカラムについて格納される点が異なる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
14
プロセス構成
• IMCO(In-Memory Coordinator)プロセスがコーディネータとして機能
– SMCO(space management coordinator)と連携し"KTSJ"と呼ばれるタスク管理機構を
使用
– ポピュレーションのリクエストはキューに入れられる
– 2分間隔でキューから取り出されタスクが実行される
• キューは優先度が指定される
• 実際のポピュレーションはワーカー・プロセス(ora_wNNN_${SID})が実行
– CPUとI/Oリソースを多く使用する傾向がある
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
15
起動するワーカー・プロセスの最大プロセス数の指定
• 初期化パラメータ
INMEMORY_MAX_POPULATE_SERVERS
で明示的に設定可能
• 右: ポピュレーション実行時の
topコマンドの画面ショット
(Linuxプラットフォーム)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
16
起動するワーカー・プロセス数
• デフォルトで起動される
プロセス数は
PGA_AGGREGATE_TARGET、
PGA_AGGREGATE_LIMIT
により決まる
– 上記2つがある程度大きい場合、
(コア数)*(スレッド数)/2
• 各プロセスがPGAを使用
– PGA合計使用量に加算される
• 右: oratopコマンド画面ショット
– MOS NOTE Doc ID 1594172.1
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
17
ポピュレーション: その他
PRODUCTS
• IMCUの範囲を読み取り一貫性でデータを読み取る
CUSTOMERS
– "ORA-1555: Snapshot is too old" などのエラーが発生した場合は
自動的にリトライされる
ORDERS
• ポピュレーション実行時のCPUリソースとメモリーの使用量
– 圧縮率レベルの指定やデータ(データ型、カーディナティなど)に依存
• 必ずバックグラウンドで行われる
• V$IM_HEADERビューのTIME_TO_POPULATEカラムで個々のIMCUの
ポピュレーションにかかった時間を確認可能
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
18
インメモリ領域の使用率の確認方法
• V$INMEMORY_AREAビューを使用
• 1MBプールと64KBプールの両方に未使用領域がある場合
SQL> SELECT * FROM V$INMEMORY_AREA;
POOL
ALLOC_BYTES
USED_BYTES
------------ -------------- -------------1MB POOL
171781914624
81371594752
64KB POOL
42932895744
298975232
POPULATE_STATUS
CON_ID
---------------- ------DONE
0
DONE
0
– 通常、64KBプールの方が"使用率"が低い
• 1MBプールに空き領域がない場合
POOL
ALLOC_BYTES USED_BYTES POPULATE_STATUS
---------------- ----------- ---------- ---------------1MB POOL
8186232832 8186232832 OUT OF MEMORY
64KB POOL
2063597568
26345472 DONE
– 64KBプールが枯渇することはない
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
19
インメモリ・カラム・ストア領域が枯渇する場合
• ポピュレーションを行うプロセスは1MBプール領域を全て使い、1つでも多く
のブロックをインメモリ化する
– 部分的にインメモリ化される表が存在する可能性がある
• エラーはアプリケーションのユーザーには返らない
– 非同期にバックグラウンドで実行されるため
• alert.logに以下のメッセージが出力される
Insufficient memory to populate table to inmemory area
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
20
ポピュレーションに関する統計値
• AWRレポート、システム統計(V$SYSSTATビュー)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
21
CPU待機クラス: Database In-Memory関連の待機イベント
• Enterprise Manager Cloud Control 12c
のASH(Active Session History)
分析画面でCPU待機クラスへ
ドリルダウン
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
22
CPU待機クラス: Database In-Memory関連の待機イベント
• ポピュレーション時のCPUリソース使用
は以下のように2種類に分けて集計
• CPU: IM Prepopulate
– 優先度(CRITICAL、HIGH…)が付けられ
ているセグメントに対するポピュレーション
• CPU: IM Populate
– 優先度NONEのセグメントに対して
オン・デマンドで行われるポピュレーション
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
23
Agenda
1
メモリー構造
2
ポピュレーション
3
インスタンス・レベルの設定と動作
4
オブジェクト・レベル、カラム・レベル設定
5
圧縮
6
プライオリティ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
24
メモリー領域
• INMEMORY_SIZEパラメータのみの設定で使用可能
EMCC12c メモリー・アドバイザー
– 設定可能な最小値は100MB
– Enterprise Manager Cloud Control 12cでも設定可能
• スタティックな領域で自動メモリー管理により増減されない
– SGA_TARGET、SGA_MAX_SIZE、MEMORY_TARGET、MEMORY_MAX_TARGET で設定
されるメモリー容量にはINMEMORY_SIZEに割り当てられるサイズが含まれるため、
設定値を増加について検討が必要となる場合がある
• ALTER SYSTEM FLUSHに相当するコマンドはない
– 個別(セグメント<表、パーティション>)は ALTER TABLE … NO INMEMORY 文で可能
• COMPATIBLEパラメータを"12.1.0.0.0"以上に設定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
25
Database In-Memoryを使うための初期化パラメータ設定例
SQL> ALTER SYSTEM SET SGA_TARGET=8G SCOPE=SPFILE;
SQL> ALTER SYSTEM SET INMEMORY_SIZE=1G SCOPE=SPFILE;
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
SQL> SELECT * FROM V$SGA;
NAME
-----------------Fixed Size
Variable Size
Database Buffers
Redo Buffers
In-Memory Area
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
VALUE
--------2927176
570426808
4634022912
13848576
1024483648
26
Database In-Memoryに関連する初期化パラメータ(1)
SQL> show parameter inmem
NAME
-------------------------------------------inmemory_clause_default
inmemory_force
inmemory_max_populate_servers
inmemory_query
inmemory_size
inmemory_trickle_repopulate_servers_percent
optimizer_inmemory_aware
TYPE
----------string
string
integer
string
big integer
integer
boolean
VALUE
-----------DEFAULT
64
ENABLE
120000000
1
TRUE
• DBCAでデータベース作成時に上記の
パラメータの値を任意に設定可能
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
27
Database In-Memoryに関連する初期化パラメータ(2)
• INMEMORY_CLAUSE_DEFAULT
– デフォルトの圧縮レベル、優先度等を設定
• 注意点: 値に"INMEMORY …"と指定すると新規に作成される表はINMEMORY指定がない場合でも
インメモリ化される
• INMEMORY_FORCE
– "OFF"に設定することで "INMEMORY" 指定されている表もインメモリ化されなくなる
• INMEMORY_MAX_POPULATE_SERVERS
– ポピュレーション時の最大プロセス数を指定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
28
Database In-Memoryに関連する初期化パラメータ(3)
• INMEMORY_QUERY
– インメモリ検索の有効化/無効化を指定
• INMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENT
– トリクル再ポピュレートのためにワーカープロセスが使用可能なCPUリソースの割合
(%)を設定
Enterprise Manager Cloud Control 12c を利用したパラメータ設定
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
29
読み取り専用オープンでのDatabase In-Memory機能
• ALTER DATABASE OPEN READ ONLYでのオープン時は内部的にDatabase
In-Memory機能が無効化される
• Active Data Guardで スタンバイ・データベースを読み取り専用でオープン
してもDatabase In-Memory機能は使用できない
– 将来のバージョンでの対応を予定
– ロジカル・スタンバイ・データベースおよびOracle GoldenGateの複製先では
Database In-Memory機能を使用することが可能
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
30
Agenda
1
メモリー構造
2
ポピュレーション
3
インスタンス・レベルの設定と動作
4
オブジェクト・レベル、カラム・レベル設定
5
圧縮
6
プライオリティ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
31
インメモリ・カラム・ストアにポピュレーションすることが
可能なオブジェクトの種類
•表
– 1つの表内の特定の列のみ指定することも可能
• パーティション
– 全てのタイプ(リスト、レンジ…)に対応
– 表レベルで設定された場合、全てのパーティションがインメモリ化される
– サブ・パーティションも指定可能
• マテリアライズド・ビュー
ALTER TABLE sales INMEMORY;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
32
インメモリ・カラム・ストアにポピュレーションすることが
不可能な表
• グローバル一時表(GTT)
ORA-14451: この機能は一時表ではサポートされていません。
• 外部表
ORA-30657: operation not supported on external organized table
• 索引構成表
• クラスタ化表
• SYSユーザーが所有する SYSTEM表領域、SYSAUX表領域のオブジェクト
• ディスク上のサイズが64KB以下の表
• Advanced Replicationが設定されている表
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
33
インメモリ・カラム・ストアにポピュレーションすることが
不可能なカラム
• 同一表中のインメモリ化が不可能なカラム以外はポピュレーションされる
• サポートされないデータ型
– LONG
– インラインでないCLOB、BLOB
• ENABLE STORAGE IN ROWの場合4KBまではインメモリ化される
– 4KB を超えるVARCHAR2、RAW
• 初期化パラメータMAX_STRING_SIZEにEXTENDEDを設定している場合
– 上記パラメータの設定がない場合、VARCHAR2、RAW共に最大は4KB
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
34
カラム・レベルでの指定
• V$IM_COLUMN_LEVELビューで確認
SQL> ALTER TABLE sales INMEMORY
NO INMEMORY (PROD_ID);
SQL> SELECT TABLE_NAME, COLUMN_NAME, INMEMORY_COMPRESSION
FROM V$IM_COLUMN_LEVEL;
• プライオリティ と RAC 固有属性はカラム間で異なる設定はできない
• 圧縮レベルのみカラムごとに個別で設定が可能
• パーティション毎に異なる設定はできない
– ORA-14049: invalid ALTER TABLE MODIFY PARTITION option
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
35
カラム・レベル:
Enterprise Manager Cloud Control 12cでの設定例
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
36
Database In-Memory機能とDDL操作に関する注意点
• インメモリ化するオブジェクトに対してアクティブなトランザクションがある
場合、ALTER TABLE … INMEMORYの実行時にORA-54エラーが発生
– ORA-00054: リソース・ビジー。NOWAITが指定されているか、タイムアウトしました
– ポピュレーション中にDML操作を行うことは可能
• "圧縮" 変更(後述)によりインメモリ・カラム・ストア中の該当IMCU領域は無
効化および再ポピュレーションが行われる
• "プライオリティ"変更(後述)により インメモリ・カラム・ストア中の該当IMCU
領域は無効化され再度ポピュレーションが行われる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
37
DDL操作と再ポピュレーションの必要性
• カラム追加: インメモリ・カラム・ストアに影響なし
– ALTER TABLE … ADD
• カラム削除: 表全体が一旦インメモリ・カラム・ストアから無効化 され再ポ
ピュレーションが発生する
• カラム属性変更: 無効化されない
• パーティション関連の操作
– パーティションの交換操作(EXCHANGE PARTITION)では再ポピュレーションは発生し
ない
– その他 MOVE / SPLIT / MERGE ではインメモリ・カラム・ストアからの無効化および再
ポピュレーションが発生する
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
38
パーティションの交換操作時の動作
• ALTER … EXCHANGE PARTITION実行前にINMEMORY属性を非パーティション表に設定
1.外部表の作成
2.CTASで非パーティション表
にロード
temp_sales
3. INMEMORY
属性の設定
4.統計情報の収集
temp_sales
Sales 表
Sales 表
April 4th
2014
April 4th
2014
April 5th
2014
April 5th
2014
April 6th
2014
April 6th
2014
April 7th
2014
April 7th
2014
April 8th
2014
April 8th
2014
April 9th
2014
April 9th
2014
5. alter table sales exchange partition
2014_4_9 with temp_sales
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
39
確認: *_TABLESビュー INMEMORY列
• *_TABLESディクショナリ・ビューに
SQL> SELECT table_name, inmemory
FROM
USER_TABLES;
TABLE_NAME
-----------CHANNELS
COSTS
CUSTOMERS
PRODUCTS
SALES
TIMES
INMEMORY
-------DISABLED
DISABLED
ENABLED
DISABLED
新規にINMEMORY列が追加
• INMEMORY はセグメント属性
• *_TABLESビューではロジカル・オブ
ジェクトにはセグメント属性を表示
しない
• COSTSとSALESはパーティション
化されている、つまり、ロジカ
ルオブジェクト
• *_TAB_PARTITIONSビューにも
INMEMORY列が追加
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
40
確認: INMEMORY属性が設定された表のステータス
SELECT segment_name name,
• 新規ビュー V$IM_SEGMENTS
populate_status status
• EMCC 12cから参照可能な情報:
FROM
v$IM_SEGMENTS;
NAME
--------PRODUCTS
SALES
STATUS
-------COMPLETED
STARTED
• インメモリ・カラム・ストアにポピュレート
されたオブジェクト
• 現在のポピュレーション・タスクのステー
タス
• 圧縮率
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
41
AWRレポート: インメモリ・セグメント統計
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
42
Agenda
1
メモリー構造
2
ポピュレーション
3
インスタンス・レベルの設定と動作
4
オブジェクト・レベル、カラム・レベル設定
5
圧縮
6
プライオリティ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
43
IMCU内のカラムユニットごとに圧縮
flag
NULL Bit Vector
カラムユニット
# Runs
Run Lengths
メモリー
CRLA
CLA
Length Vector
ディクショナリ
Dict Size
Data Vector/ Dictionary
ディクショナリ・コード
または
Dictionary Encoded Values
カラム・データ
IMCU#2
IMCU#4
flag
# Runs
CRLA
CLA
NULL Bit Vector
カラムユニット
Run Lengths
Length Vector
Dict Size
ディクショナリ
Data Vector/ Dictionary
SALES
カラム型
フォーマット
ディクショナリ・コード
または
Dictionary Encoded Values
カラム・データ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
44
カラム(列)型フォーマットで最も一般的な圧縮法:
ディクショナリ圧縮
日付
店舗
お客様
商品
注文数
2014-04-01
品川支店
鈴木健司
iPhoenix 5x
1
79,800
2014-04-01
品川支店
菅野敏明
iPhoenix 5x
2
158,800
2014-04-01
品川支店
加山公一
iPhoenix 5x
2
149,800
2014-04-01
新宿支店
高橋真由美
iPhoenix 5x
2
158,800
2014-04-01
新宿支店
佐藤薫
iPhoenix 5x
3
199,400
2014-04-01
新宿支店
橋元豊
Experience Z
1
68,700
2014-04-01
新宿支店
筒井隆
Experience Z
1
68,700
2014-04-01
新宿支店
藤田公彦
AKIOASIS S
1
68,000
2014-04-01
八王子支店
松田勝久
AKIOASIS S
2
100,800
売上金額
…
…
…
…
…
…
…
…
2014-05-01
八王子支店
相内一也
AKIOASIS S
2
100,800
2014-05-01
八王子支店
沼田洋子
Arrays FX
1
58,900
2014-05-01
横浜支店
凪野隆志
Arrays FX
1
58,900
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
45
IMCU内のカラム・ユニット: EMP表のJOB列のケース
ディクショナリは
ポピュレーション時に
ソートされる
カラムユニット ヘッダー
EMP表
JOB列
-------------ANALYST
PRESIDENT
MANAGER
ANALYST
PRESIDENT
CLERK
SALESMAN
ANALYST
PRESIDENT
データベクトル/ディクショナリ/
シンボルテーブル
カラムの値
ビット表現 / 2進
ANALYST
000
CLERK
001
MANAGER
010
PRESIDENT
011
SALESMAN
100
ディクショナリでエンコードされた値
000 | 011 | 010 | 000 | 011 | 001 | 100 | 000 | 011
カラムユニット: JOB
ユニーク値の数(NDV) = 5
型: CHAR(10)
ディクショナリ
・コードの並び
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
46
カラムユニット: JOB
ユニーク値の数(NDV) = 5
型: CHAR(10)
ビット・パッキング
000 | 011 | 010 | 000 | 011 | 001 | 100 | 000 | 011
• ユニークな値の数が8以下の場合は上記のように3 bitでディクショナリへの
インデックスを保持できる
– 他の例: 都道府県
• ユニークな値の数が47なので6 bitで可能 (2**6 = 64)
• ビット・パッキングが選択された場合、圧縮率が高くなり、CPUキャッシュによ
り多くキャッシュすることができるため、処理速度の向上が期待できる
– ビット・パッキングにより値を読み取る際に必要なCPUインストラクション数は増える
• ビット・パッキングが選択されない場合は、8-bitや16-bitなどとなるようにパ
ディングされてメモリー中で保持されるため、圧縮率は下がる
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
47
ディクショナリ圧縮以外の圧縮法:
ランレングス圧縮(連長圧縮、Run Length Encoding:RLE)
カラム・ユニット
EMP表
JOB列
-------------ANALYST
ANALYST
ANALYST
PRESIDENT
PRESIDENT
MANAGER
MANAGER
CLERK
PRESIDENT
ディクショナリ・メタデータ #1
ディクショナリ・
メタデータ #3
データベクトル/ディクショナリ/
シンボルテーブル
ディクショナリ・コード + ランレングス
の配列
カラムの
値
ビット表現 /
2進
ANALYST
000
CLERK
001
MANAGER
010
PRESIDENT
011
SALESMAN
100
Run Length ベクトル
[RL,Code]
[ 3,0 ] | [ 2,3 ] | [ 2,2 ]| [ 1,1 ] | [ 1,3 ]
000 | 011 | 010 | 001 | 011
000
カラム・ユニット: JOB
ユニークな値の数: 5
型: CHAR(6)
011
010
000
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ディクショナリ・コード
48
6段階の圧縮
• NO MEMCOMPRESS
– 圧縮なし
SQL> ALTER MATERIALIZED VIEW mv1 INMEMORY
MEMCOMPRESS FOR QUERY;
SQL> CREATE TABLE trades (Name varchar(20),
Desc varchar(200))
INMEMORY
MEMCOMPRESS FOR DML(desc);
• MEMCOMPRESS FOR {DML | QUERY [LOW | HIGH]|CAPACITY [LOW | HIGH]}
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
49
6段階の圧縮
• MEMCOMPRESS FOR DML
– ある程度のデータ更新がかかるセグメントに適した圧縮レベル
• MEMCOMPRESS FOR QUERY LOW
– デフォルト圧縮レベル
– この圧縮レベル以上(下記も含む)は前出のディクショナリやランレングス圧縮、ビット・パッキングを使用
• MEMCOMPRESS FOR QUERY HIGH
– 上記QUERY LOWより高圧縮、下記CAPACITY LOWよりは低圧縮
• MEMCOMPRESS FOR CAPACITY LOW
– 上記までに加え新規開発のアルゴリズムでOracleデータ型に特化した圧縮を適用
• MEMCOMPRESS FOR CAPACITY HIGH
– 上記までに加え一般的なgzip、DEFLATEなどに近い圧縮を適用
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
50
圧縮レベルとポピュレーション、クエリーの関係
圧縮レベル
NO
MEMCOMPRESS
圧縮率
ポピュレーション時
CPU
使用量
無
FOR
DML
QUERY
LOW
QUERY
HIGH
CAPACITY
LOW
CAPACITY
HIGH
高
低
高
低
クエリー速度
速
最
速
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
速
51
圧縮: その他
• 圧縮率は一般に2 – 20倍 (1/2 から 1/20)程度
• EHCCと比較すると圧縮率は低い
– 圧縮しすぎるとSIMD処理のための前処理が多く必要になり高速スキャンできないため
• IMCU毎、かつ、カラム毎に圧縮される
• ディクショナリ作成時のソート処理などのため、ポピュレーション時にCPUリ
ソースが多く使われる
– 文字列はBINARYソート
• 型だけではなく実際の値(カーディナリティ等)により圧縮方法が決定される
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
52
圧縮: パーティション
• パーティション毎に圧縮率を変えることが可能
• 3段階のレベル
– "FOR DML"
DML頻度が多いパーティションや表に設定
– "FOR QUERY"
多くの表/partitionに最適
– "FOR CAPACITY"
アクセスの少ない表。クエリーは上記より低速に
CREATE TABLE ORDERS ……
PARTITION BY RANGE ……
(PARTITION p1 ……
INMEMORY NO MEMCOMPRESS
PARTITION p2 ……
INMEMORY MEMCOMPRESS FOR DML,
PARTITION p3 ……
INMEMORY MEMCOMPRESS FOR QUERY,
:
PARTITION p200 ……
INMEMORY MEMCOMPRESS FOR CAPACITY
);
• ILM(Information Lifecycle Management)
ポリシーに合わせて圧縮レベルを切り替えることが容易
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
53
圧縮アドバイザ: Database In-Memory対応
• 6段階の圧縮レベルに対応
• 内部的にはサンプルデータに
対し圧縮を試行
COMP_INMEMORY_NOCOMPRESS
COMP_INMEMORY_DML
COMP_INMEMORY_QUERY_LOW
COMP_INMEMORY_QUERY_HIGH
COMP_INMEMORY_CAPACITY_LOW
COMP_INMEMORY_CAPACITY_HIGH
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
54
Enterprise Manager Cloud Control 12c
インメモリ・セントラル: 圧縮率の確認
圧縮率
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
55
Agenda
1
メモリー構造
2
ポピュレーション
3
インスタンス・レベルの設定と動作
4
オブジェクト・レベル、カラム・レベル設定
5
圧縮
6
プライオリティ
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
56
CREATE TABLE orders
(c1 number,
c2 varchar(20),
c3 number)
INMEMORY PRIORITY CRITICAL;
5段階のプライオリティ
• NONE
– 該当テーブルへのアクセスによりポピュレーションが
トリガーされる
• LOW ― CRITICAL
– CREATE TABLE/ALTER TABLEなどの実行時にポピュレーション・タスクが
キューイングされる
– プライオリティ別のキューが4本存在
– DB起動時も同じようにキューイング
– ポピュレーション完了後にDBをオープンするモードはない
• ポピュレーション速度には影響しない
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
57
プライオリティ:NONE - オン・デマンドのポピュレーション
• SELECT文によるクエリーが索引のみで結果が返される場合、ポピュレー
ションはトリガーされない
– FULLヒントを付けることで明示的にポピュレーションを発生させられる
• SELECT /*+ FULL(t1) */
• トランザクションの中でFull Scanされる場合はトリガーされない
– 例: CREATE TABLE NO_INMEM_TBL1 AS SELECT * FROM INMEM_TBL1
– 例: INSERT … SELECT * FROM INMEM_TBL2
• スキャンの完了を待たずにポピュレーションは開始される
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
58
プライオリティ: LOW / MIDDLE / HIGH / CRITICAL
• タスク・キューが2分間隔でpollされる
– 注意点: ポピュレートされていないプライオリティがCRITICALに設定されている表があ
り、インメモリ・カラム・ストアに空きがない場合でも、ポピュレート済みのプライオリ
ティがLOWの表を落とす動作は起こらない
• システム統計では"PrePopulate"と表現される
Critical
High
Middle
Low
IMCO
Wnnn
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
ポピュレーション
タスク
59
プロシージャによる明示的なポピュレーション
• DBMS_INMEMORYパッケージを使用
• INMEMORY属性がない表に対する実行ではエラーが発生する
SQL> alter table COMPTEST.TAB1 inmemory;
Table altered.
SQL> exec dbms_inmemory.populate('COMPTEST','TAB1');
PL/SQL procedure successfully completed.
SQL> alter table COMPTEST.TAB1 no inmemory;
Table altered.
SQL> exec dbms_inmemory.populate('COMPTEST','TAB1');
BEGIN dbms_inmemory.populate('COMPTEST','TAB1'); END;
*
ERROR at line 1:
ORA-03211: The segment does not exist or is not in a valid state
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
60
Enterprise Manager Cloud Control 12c
インメモリ・セントラル: プライオリティの確認
プライオリティ(優先度)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
61
まとめ – Database In-Memoryは容易な設定で利用可能
1. 使用するメモリー容量を設定
INMEMORY_SIZE = XXX GB
2. インメモリ・カラム・ストアに格納するオブジェクトを指定
SQL> ALTER TABLE | PARTITION … INMEMORY;
3. オブジェクトごとに圧縮レベル、プライオリティを指定可能
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
62
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
63