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