SAP R/3およびSAP BWシステムに
対応する索引圧縮
Jan Klokkers
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです 。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むこと はできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメ ント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下 さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期につ いては、弊社の裁量により決定されます。 Oracle、PeopleSoft、JD Edwards、及びSiebelは、米国オラクル・コーポレーション及びその子会社、関連会社の 登録商標です。その他の名称はそれぞれの会社の商標の可能性があります。
内容
•
Oracleのストレージ領域の削減技術の概要
•
Oracleのストレージ領域の削減技術の概要
• データ型の優位性 • ビットマップ索引ット ップ索引 • Unicode•
SAPに対応するOracle 10g 索引圧縮
•
次バージョン展望 –
SAPに対応するOracle 11g Advanced Compression
•
高度なサポートの提供
<ここに画像を挿入> <ここに画像を挿入>
Oracleのストレージ領域の
内部データの表現
例
例
デ • データ表現方式: • 固定長 • 可変長CREATE TABLE XYZ (
COL1 NUMBER ( 10), COL2 NUMBER ( 10), 可変長 • Oracle: • NUMBER: 可変長 変 COL2 NUMBER ( 10), COL3 NUMBER ( 10), COL4 VARCHAR2(100) ) • VARCHAR: 可変長 • DB2、SQL*Server: • NUMBER: 固定長 ) <storage_desc> ; NUMBER: 固定長 • VARCHAR: 可変長 (非効率的)
内部データの表現
数値
数値
INSERT INTO XYZ (COL1, COL2, COL3) VALUES (12, 1234, 123456);
V1 V2 V2 V3 V3 V3
固定長の表現(合計15バイト):
可変長の表現(合計9バイト):
内部データの表現
文字値
文字値
INSERT INTO XYZ (COL4) VALUES ('ABC');
L1 L2 L3 L4 A B C DB2の表現:
Oracleの表現:
<ここに画像を挿入> <ここに画像を挿入>
ビットマップ索引
•
各値にビットマップ(ビット・ベクトル)を使用
•
各値にビットマップ(ビット・ベクトル)を使用
• 高圧縮データ•
標準のB*Tree索引より少なくとも25%小さい
標準のB Tree索引より少なくとも25%小さい
•
Oracleは、ディスクにビットマップ索引を格納する
唯一のデータベース
唯
のデ タ
ス
•
SAP BWは、ビットマップ索引を広範囲に活用
• BWシステムのディスク領域を大幅に節約 • スター・クエリーを超高速で実行永続ビットマップ索引
ビットマップ索引 表 ビットマップ索引 表 <青: 10001001 0001 0010 100> 緑 キー ビットマップ <緑: 0100 0000 1100 0001 001> <赤: 0001 0100 0010 0100 000> <黄: 0010 0010 0000 1000 010><ここに画像を挿入> <ここに画像を挿入>
Unicodeデータの表現
•
データベースで異なるエンコード・スキーマ
•
データベースで異なるエンコード・スキーマ
• UTF-8 – 可変長、ASCII文字は1バイトのみ • きわめて省スペースきわめて省 • 大多数のデータがASCII形式であれば、 ディスク領域を追加する必要はほとんどない UTF 16 固定2バイト表現 • UTF-16 – 固定2バイト表現•
OracleはSAPデータベースにUTF 8を使用
•
OracleはSAPデータベースにUTF-8を使用
• SAPのUnicode移行後は、標準のOracleデータベースが 20%小さくなるストレージ領域の削減技術 – まとめ
•
Oracleは 圧縮技術を使用せずに
•
Oracleは、圧縮技術を使用せずに、
どのデータベースよりも効率的にデータを格納
•
SAP BWシステムの例:
SAP BWシステムの例:
• 同じ量のデータの場合、Oracleが使用するディスク領域は、 圧縮なしの状態でDB2より50%少ない • ビットマップ索引の使用 • 数値の可変長ストレージ – BWデータの80%は数値で格納<ここに画像を挿入> <ここに画像を挿入>
SAPに対応するOracle 10g
g
索引圧縮
検討する動機
検討する動機
•
SAPシステムの大量のディスク領域を索引が使用
SAPシステムの大量のディスク領域を索引が使用
• SAP ERP(R/3): • データベースのディスク領域の30~50% • さらに多いケースも存在 • SAP BI(BW): デ タベ スのデ スク領域の25 40% • データベースのディスク領域の25~40% • ビットマップ索引を多用すると、比率が低下•
SAP索引は 索引圧縮にとって理想的
•
SAP索引は、索引圧縮にとって理想的
• 通常は、索引ごとに平均6列からなる複数列索引 • 索引の先頭列が最も選択的でないデータ索 先頭列 最 選択索引キーの圧縮技術
•
B*Treeのリーフ・ブロック内のデータ圧縮
•
B Treeのリーフ・ブロック内のデータ圧縮
•
各リーフ・ブロックは、個別に圧縮
(グローバルなシンボル表はない)
(グロ バルなシンボル表はない)
•
索引キーは、各ブロックに2個1組で格納
• 接頭辞部接頭辞部 • 接尾辞部•
同一の接頭辞は1回のみ格納
•
SAPアプリケーションに対して完全に透過的
• 大幅なデータ変更により、圧縮効果に影響がない•
SAP BR*SPACEによる完全なサポート
• Index Reorgsは圧縮属性を維持例 – 6列の索引
1 A X 1 A 1 ROWID1 1 A X 1 B 2 ROWID2 1 A X 2 A 3 ROWID3 1 A Y 1 B 4 ROWID4 1 A Y 3 C 5 ROWID5 1 A Y 3 C 5 ROWID5 1 A Y 3 C 6 ROWID6 1 A Y 3 D 7 ROWID7 1 A Y 3 D 7 ROWID7 1 B X 1 A 1 ROWID8 1 B X 1 A 2 ROWID9 1 B X 1 A 2 ROWID9 1 B X 1 C 3 ROWID10 1 B X 3 A 4 ROWID11 1 B X 3 C 5 ROWID12 1 B X 3 C 6 ROWID13例 – 接頭辞1 – 12少ない値
1 A X 1 A 1 ROWID1 A X 1 B 2 ROWID2 A X 2 A 3 ROWID3 A Y 1 B 4 ROWID4 A Y 3 C 5 ROWID5 A Y 3 C 5 ROWID5 A Y 3 C 6 ROWID6 A Y 3 D 7 ROWID7 A Y 3 D 7 ROWID7 B X 1 A 1 ROWID8 B X 1 A 2 ROWID9 B X 1 A 2 ROWID9 B X 1 C 3 ROWID10 B X 3 A 4 ROWID11 B X 3 C 5 ROWID12 B X 3 C 6 ROWID13例 – 接頭辞2 – 22少ない値
1 A X 1 A 1 ROWID1 X 1 B 2 ROWID2 X 2 A 3 ROWID3 Y 1 B 4 ROWID4 Y 3 C 5 ROWID5 Y 3 C 5 ROWID5 Y 3 C 6 ROWID6 Y 3 D 7 ROWID7 Y 3 D 7 ROWID7 1 B X 1 A 1 ROWID8 X 1 A 2 ROWID9 X 1 A 2 ROWID9 X 1 C 3 ROWID10 X 3 A 4 ROWID11 X 3 C 5 ROWID12 X 3 C 6 ROWID13例 – 接頭辞3 – 30少ない値
1 A X 1 A 1 ROWID1 1 B 2 ROWID2 2 A 3 ROWID3 1 A Y 1 B 4 ROWID4 3 C 5 ROWID5 3 C 5 ROWID5 3 C 6 ROWID6 3 D 7 ROWID7 3 D 7 ROWID7 1 B X 1 A 1 ROWID8 1 A 2 ROWID9 1 A 2 ROWID9 1 C 3 ROWID10 3 A 4 ROWID11 3 C 5 ROWID12 3 C 6 ROWID13例 – 接頭辞4 – 28少ない値
1 A X 1 A 1 ROWID1 B 2 ROWID2 1 A X 2 A 3 ROWID3 1 A Y 1 B 4 ROWID4 1 A Y 3 C 5 ROWID5 1 A Y 3 C 5 ROWID5 C 6 ROWID6 D 7 ROWID7 D 7 ROWID7 1 B X 1 A 1 ROWID8 A 2 ROWID9 A 2 ROWID9 C 3 ROWID10 1 B X 3 A 4 ROWID11 C 5 ROWID12 C 6 ROWID13例 – 接頭辞5 – 15少ない値
1 A X 1 A 1 ROWID1 1 A X 1 B 2 ROWID2 1 A X 2 A 3 ROWID3 1 A Y 1 B 4 ROWID4 1 A Y 3 C 5 ROWID5 1 A Y 3 C 5 ROWID5 6 ROWID6 1 A Y 3 D 7 ROWID7 1 A Y 3 D 7 ROWID7 1 B X 1 A 1 ROWID8 2 ROWID9 2 ROWID9 1 B X 1 C 3 ROWID10 1 B X 3 A 4 ROWID11 1 B X 3 C 5 ROWID12 6 ROWID13例 – 接頭辞6 – 節約しない
1 A X 1 A 1 ROWID1 1 A X 1 B 2 ROWID2 1 A X 2 A 3 ROWID3 1 A Y 1 B 4 ROWID4 1 A Y 3 C 5 ROWID5 1 A Y 3 C 5 ROWID5 1 A Y 3 C 6 ROWID6 1 A Y 3 D 7 ROWID7 1 A Y 3 D 7 ROWID7 1 B X 1 A 1 ROWID8 1 B X 1 A 2 ROWID9 1 B X 1 A 2 ROWID9 1 B X 1 C 3 ROWID10 1 B X 3 A 4 ROWID11 1 B X 3 C 5 ROWID12 1 B X 3 C 6 ROWID13例
14000
Total Number of Leaf Blocks
10000 12000 14000 4000 6000 8000 blocks 0 2000 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 prefix length
構文
•
CREATE INDEX <xxxx> ON <TABLE>
•
CREATE INDEX <xxxx> ON <TABLE>
(<COLUMNLIST>)
COMPRESS <n>
•
<n> = 接頭辞の長さ
•
一意の索引の接頭辞の最大長: N-1
最適な接頭辞の長さの計算(1)
•
非効率的な方法:
ANALYZE INDEX VALIDATE STRUCTURE
• ANALYZE INDEX <xxx> VALIDATE STRUCTURE
• SELECT opt_cmpr_count, opt_cmpr_pctsave FROM index stats_
• オンライン操作なし、索引をロック • きわめて低速、並行スキャンなし • 一度に1つの索引のみ分析 • DBAが索引の作成/再構築の文を記述することが必要 • 時間がかかる • 時間がかかる • 誤りが発生しやすい
最適な接頭辞の長さの計算(2)
•
最適な方法:
• Package IND COMP from SAP Note 1109743
• Package IND_COMP from SAP Note 1109743
• exec ind_comp.get_column( ... ) • 完全なオンライン操作 • きわめて高速 • 並行スキャン • 既存の統計を使用 • 既存の統計を使用 • SAPの索引設計と索引使用方法の知識 • きわめて簡潔 • 最大N個の索引を分析可能 • 別個のSQLファイルで、索引の作成/再構築の完全な構文を 生成 • 領域節約統計を提供
Parameters of ind_comp
• Ind_comp (‘table spec‘, logging, opmode) パラメ タ: • パラメータ: • 表固有の値: • 表名、たとえばRFBLG • 表の数、たとえば100 • ロギングの値: • True – 領域統計問合せの生成 • True – 領域統計問合せの生成 • False – デフォルト • Opmode値: デ 築 • オンライン – デフォルト: オンラインで再構築するための文を生成し、 パーティション化された索引を無視する • オフライン – パーティション化されていない索引にはオンラインで再構 築された文を生成し、パーティション化された索引には削除/作成の文 を生成する。パーティション化された索引を圧縮する必要がある場合 は、BWシステムに使用することが必要
ind_compのインストール方法
• 手順1: SAP Note 1109743を参照 • 手順2: SAP Note 1109743から添付文書をダウンロード • 手順2: SAP Note 1109743から添付文書をダウンロ ド • 手順3: ファイルの名前を変更する。 Ind_comp.txt から ind_comp.sql I d t t t から i d t l Ind_comp_part.txt から ind_comp_part.sql • 手順4: データベース・アカウント<sapsid>を準備 sqlplus connect / as sysdba <sapsid>に任意のディレクトリを作成する権限を付与する <sapsid>に任意のディレクトリを削除する権限を付与するp • 手順5: PL/SQLパッケージIND_COMPをデータベースにロード sqlplus sqlplus connect <sapsid>/<password> start ind_compind_compの使用方法 (1)
• 単一の特定表のすべての索引を分析
sqlplus sqlplus
set serveroutput on size 1000000 connect <sapsid>/<passwd>
exec ind_comp.get_column (‘GLPCA‘);
exec ind_comp.get_column (‘/BIC/ECUSTOMER001‘);
• すべての索引で、N個の最大数の表を分析
sqlplus
t t t i 1000000
set serveroutput on size 1000000 connect <sapsid>/<passwd>
ind_compの使用方法 (2)
す
索
追
統計を持
個
数
•
すべての索引で、追加の領域統計を持つN個の最大数の
表を分析
sqlplus sqlplusset serveroutput on size 1000000 connect <sapsid>/<passwd>
co ect saps d / pass d
ind_compの使用方法 (3)
•
すべての索引で、追加の領域統計とオンライン・モー
ドを持つN個の最大数の表を分析(パーティション化
された索引は無視)
された索引は無視)
sqlplusset serveroutput on size 1000000 set se e output o s e 000000 connect <sapsid>/<passwd>
ind_compの使用方法 (4)
す
索
追
統計を持
個
数
•
すべての索引で、追加の領域統計を持つN個の最大数の
表を分析し、パーティション化された索引を含める
sqlplus sqlplusset serveroutput on size 1000000 connect <sapsid>/<passwd>
co ect saps d / pass d
Ind_comp出力
デ
を生成
•
/tmpまたはc:¥tempディレクトリに.sqlファイルを生成
•
各表に1つのファイル
例 • 例: GLPCA_IX_COMP.sql•
すべてのSQL文が含まれる1個のサマリー・ファイル
IX COMP sql
IX_COMP.sql
Ind_compの出力例とロギング
IX_COMP.sql
spool IX_COMP.log
col index_name format a30 col partition_name format a30p _
select segment_name index_name, partition_name, round (bytes/1024/1024) MB from user_segments
where segment name = 'GLPCA~7' where segment_name GLPCA 7 ;
alter index "SAPR3"."GLPCA~7" rebuild online compress 5 parallel 4 pctfree 1; alter index "SAPR3" "GLPCA~7" noparallel;
alter index SAPR3 . GLPCA~7 noparallel;
select segment_name index_name, partition_name, round (bytes/1024/1024) MB from user_segments
here segment name = 'GLPCA 7' where segment_name = 'GLPCA~7' ;
索引の再構築
表
有
実
•
表固有のSQLファイルの実行
sqlplus connect <sapsid>/<passwd> connect <sapsid>/<passwd> @glpca_ix_comp•
サマリー・ファイルIX COMP sqlの実行
サマリ
ファイルIX_COMP.sqlの実行
sqlplus
connect <sapsid>/<passwd> @start ix_comp
最適化
ピ
を実
•
システム・コピーでind_compを実行
• 最適な圧縮係数を計算するために、本番システムに負荷を追加 する必要はない する必要はない。•
索引表領域の領域パラメータをチェック。大きい値は領域
の節約効果を低下させる
の節約効果を低下させる
• DMTS: 初期エクステント・サイズまたはネクスト・エクステント・ サイズ、pctincrease値 設定 • LMTS: Uniform設定 • UNIFORMのかわりにAUTOALLOCATEを使用 • 大きい索引には UNIFORMサイズに10MBを選択 • 大きい索引には、UNIFORMサイズに10MBを選択注意および警告
分析フェ ズはオンライン操作 • 分析フェーズはオンライン操作 • 本番システムのCPUおよびIOの負荷が10~20%増加する • SAPシステムのピーク時間には実行しないこと • オンライン・モードの実行フェーズは、ダウンタイムが不要であるため、 SAPシステムのアップタイム中に実行可能 • REBUILD ONLINE機能を使用する • REBUILD ONLINE機能を使用する • SAPシステムのピーク時間には実行しないこと • 必要なCPU、メモリーおよびIOリソースが増加する • オフライン・モードの実行フェーズは、SAPシステムのダウンタイムが 必要 • パーティション化された索引の圧縮は、索引の削除/作成を実行することにパ ティション化された索引の圧縮は、索引の削除/作成を実行することに よってのみ有効化できる結果 – 領域
•
索引GLPCA~1のサイズが 18GBから4 5GBに縮小される
•
索引GLPCA~1のサイズが、18GBから4.5GBに縮小される
• 領域が75%節約•
全般:
全般:
• R/3における最小ケース: • 索引が完全に再編成された後で、索引圧縮が有効になり、データ ベース全体で15~20%の領域が節約 • BWにおける最小ケース: 索引が完全に再編成された後で 索引圧縮が有効になり デ タ • 索引が完全に再編成された後で、索引圧縮が有効になり、データ ベース全体で10~15%の領域が節約 • R/3およびBWの標準的なケース: • データベース全体で、20~30%の領域が節約結果 – パフォーマンス
•
圧縮された索引を使用する場合
•
圧縮された索引を使用する場合、
追加のCPUサイクルが必要
•
索引のフル・スキャンおよび範囲スキャンの場合
索引のフル スキャンおよび範囲スキャンの場合、
物理的および論理的I/Oは減少
•
顧客の経験による情報
顧客の経験による情報
• 索引圧縮の導入はスループットに悪影響を及ぼさないか、 または、SAPシステムのスループットがわずかに上昇索引圧縮のその他の利点
•
追加ライセンスの費用が不用
•
追加ライセンスの費用が不用
• Oracleサーバーの標準機能。•
索引圧縮は Oracle8iから導入されているため
索引圧縮は、Oracle8iから導入されているため、
完成された機能
•
すぐにディスク領域を節約
すぐにディスク領域を節約
• Oracle11g Advanced Compressionオプションを待つ必要がない
• Oracle11gでは、索引圧縮機能への機能拡張はない
<ここに画像を挿入> <ここに画像を挿入>
次バージョン展望:
展
Oracle Database 11g
Advanced Compression
オプション
Advanced
プ
Compressionオプション
能
•
機能
• OLTP表の圧縮 • 従来のDML(挿入 アップデート)をサポート • 従来のDML(挿入、アップデ ト)をサポ ト • INSERTおよびUPDATEは、再圧縮を行わない • ブロック・レベルの圧縮(グローバルなシンボル表はない) <=修正 • SecureFilesの非構造化データ圧縮(LOBの代替) • 表内のSecurefiles列は、表とは別に圧縮することが必要• Data Pump圧縮Data Pump圧縮
• RMANバックアップ圧縮