免責事項 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目 的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を 提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定さ れます。 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
© Copyright 2024