Calpont InfiniDBパフォーマンスチューニングガイド

Calpont InfiniDB®
パフ ォ ーマ ン スチ ュ ーニ ングガ イ ド
Release 3.5.1
Document Version 3.5.1-1
December 2012
2801 Network Blvd., Suite 220 : Frisco, Texas 75034 : 972.999.1355
info@calpont.com : www.calpont.com
Copyright © 2012 Calpont Corporation. All rights reserved.
InfiniDB お よ び Calpont 製品名は、 Calpont の商標です。 他社お よ びその製品への参照は、
各社が所有す る 商標を使用 し てお り 、 参照のみを目的 と し てい ます。
こ の文書の情報は予告な し に変更 さ れ る 場合があ り ます。 こ の文書にいかな る 誤 り があ る
場合 も 、 Calpont に責任はない も の と し ます。
ソ フ ト ウ ェ ア ラ イ セン ス
「GNU Free Documentation License」 の条項の も と 、 こ の文書を コ ピー、 配布、 修正す る 権
限が付与 さ れます。 Free Software Foundation に よ っ て発行 さ れたバージ ョ ン 1.3 以降に
は、 変更のない項、 表紙、 裏表紙が含まれてい ません。 ラ イ セ ン ス の コ ピーについては
「GNU Free Documentation License」 の項に記載 さ れてい ます。
ii
目次
は じ めに
i
対象読者 .......................................................................................................................i
表記規則 ......................................................................................................................ii
マニ ュ アル リ ス ト .................................................................................................iii
マニ ュ アルの入手 .................................................................................................iii
マニ ュ アルへの フ ィ ー ド バ ッ ク ....................................................................iii
追加 リ ソ ース ...........................................................................................................iii
第1章
パフ ォ ーマ ン スチ ュ ーニ ングの概要
1
InfiniDB のアーキテ ク チ ャ の目標 ................................................................. 1
InfiniDB を使用 し た結合の高速化 ................................................................. 2
構文に関する注意点 ............................................................................................ 2
InfiniDB の主要 コ ン ポーネ ン ト ...................................................................... 2
分析用デー タ ベース InfiniDB のエデ ィ シ ョ ン ....................................... 4
InfiniDB のエデ ィ シ ョ ン間のチ ュ ーニ ン グの相違点 .......................... 5
第2章
InfiniDB の分散処理モデル
7
ユーザーモ ジ ュ ールか らパ フ ォ ーマ ン ス モ ジ ュ ールへの
リ ク エ ス ト の処理の粒度 ................................................................. 7
パ フ ォ ーマ ン ス モ ジ ュ ール内の処理の粒度 (バ ッ チ
プ リ ミ テ ィ ブ) ....................................................................................... 8
バ ッ チ プ リ ミ テ ィ ブ ス テ ッ プ (BPS) ........................................................ 8
第3章
エ ク ステン ト マ ッ プ
11
スキ ャ ン に よ る エ ク ス テ ン ト マ ッ プ群 ...................................................11
他の列に対するパーテ ィ シ ョ ン ブ ロ ッ クの除外 ...............................12
列ス ト レ ージ、 バ ッ チ プ リ ミ テ ィ ブお よびエ ク ス テ ン ト
マ ッ プ機能に よ る I/O の除外 .....................................................13
iii
第4章
物理 I/O のチ ュ ーニ ング
15
最初のスキ ャ ン操作のチ ュ ーニ ン グ ........................................................15
追加の列の読取 り のチ ュ ーニ ン グ .............................................................17
第5章
同時実行および問合せ
19
第6章
InfiniDB の複数結合のチ ュ ーニ ン グ
21
簡単な 2 つの表の結合の詳細 .......................................................................21
複数結合の詳細 ....................................................................................................22
結合の最適化 .........................................................................................................23
主要なチ ュ ーニ ン グパ ラ メ ー タ : PmMaxMemorySmallSide ..........24
単一サーバーのイ ン ス ト ールの一般的なチ ュ ーニ ン グ
ガ イ ド ラ イ ン ....................................................................................24
複数 PM のイ ン ス ト ールの一般的なチ ュ ーニ ン グ
ガ イ ド ラ イ ン ....................................................................................24
第7章
メ モ リ ー管理
27
主要なチ ュ ーニ ン グパ ラ メ ー タ : NumBlocksPct お よび
TotalUmMemory ...................................................................................27
第8章
スケー ラ ビ リ テ ィ
29
スケー ラ ビ リ テ ィ : デー タ のサイ ズ と パ フ ォ ーマ ン ス ................29
スケー ラ ビ リ テ ィ : ユーザーモ ジ ュ ール ..............................................29
第9章
ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング
31
問合せのサマ リ ー統計 : calgetstats ..........................................................31
問合せの詳細統計 : calgettrace ...................................................................33
キ ャ ッ シ ュの フ ラ ッ シ ュ : calflushcache ................................................35
パラ メ ー タ の読取 り または変更 : configxml.sh ....................................36
エ ク ス テ ン ト マ ッ プの表示 : editem .........................................................36
第 10 章
iv
列デー タ ス ト レージの相違点
37
第 11 章
デー タ のロー ド 速度および リ アル タ イムに
近いロー ド
39
処理の優先順位付け ..........................................................................................39
第 12 章
InfiniDB のパフ ォ ーマ ン スの目安
41
第 13 章
追加 リ ソ ース、 ダウン ロー ド およびサポー ト
45
付録 A
GNU Free Documentation License
47
v
vi
は じ めに
『Calpont InfiniDB パフ ォ ーマ ン ス チ ュ ーニ ン グ ガ イ ド 』 へ よ う こ そ。 行ベース のデー
タ ベース での経験が豊富な開発者ま たは DBA の観点か ら 見 る と 、 InfiniDB 操作には従
来のデー タ ベース操作に関連す る も の と 、 直接関係のない も のがあ り ます。 ま た、 従
来の行ベース の DBMS シ ス テ ム に共通の基礎 と な る 操作が、 InfiniDB 内には存在 し な
い場合があ り ます (た と えば、 InfiniDB では全表ス キ ャ ンは実行 さ れ ません)。
本書は、 I/O 要件を大幅に削減 し て大容量デー タ の大幅なパ ラ レル化お よ び拡張を可
能にす る 、 列指向 RDBMS の InfiniDB のチ ュ ーニ ン グに役立ち ます。
分析用デー タ ベース InfiniDB での操作は、 マルチ ス レ ッ ド 化お よ び分散 (オプシ ョ ン)
さ れたシ ス テ ム の大容量デー タ の ス キ ャ ン、 結合、 集計が優れたパフ ォーマ ン ス特性
で行われ る よ う に最適化 さ れてい ます。 こ こ で使用 さ れ る 大容量デー タ は、 数億行か
ら 数千億行に渡 る 場合があ り 、 ま た、 数百 GB か ら 数百 TB のデー タ にな る 場合があ
り ます。 InfiniDB は、 こ れ ら の数値をは る かに超え る 場合で も 対応で き る よ う に設計
さ れてい ます。 ま た、 InfiniDB では、 ス ケールが小 さ い場合で も 優れたパフ ォ ーマ ン
ス が提供 さ れ ます。
本書には、 Calpont InfiniDB Enterprise にのみ有効な情報が含まれてい ます。
対象読者
本書は、 以下に示す様々な役割の読者を対象 と し てい ます。
デー タ ベース管理者
アプ リ ケーシ ョ ンお よ び Web の開発者
デー タ の設計者
シ ス テ ムお よ び Web の管理者
は じ めに i
表記規則
本書では、 次の表記規則お よ びユーザーへの警告を使用 し てい ます。
表 1: 表記規則
項目
太字
説明
表示 さ れた と お り に入力す る 文字。
例 : getLogInfo と 入力 し ます
こ の場合、 getLogInfo と 入力 し ます。
斜体
変数ま たはプ レース ホルダ。 文字列を適切に置 き 換え て入力
し ます。 複数の単語で構成 さ れ る 変数はア ン ダース コ ア (_)
で連結 し て表示 さ れてい ます。
例:
ID を入力 し ます。
ID 番号 34878 を入力 し ます。
IP_address を入力 し ます。
IP ア ド レ ス 110.68.52.01 を入力 し ます。
表 2: ユーザーへの警告
項目
説明
注意 : 役立つ情報であ る こ と を示 し ます。
警告 : デー タ の損失ま たは破損の原因 と な る ハー ド ウ ェ アや
ソ フ ト ウ ェ アのエ ラ ーを発生 さ せ る 可能性があ る こ と を示 し
ます。
ii は じ めに
マニ ュ アル リ ス ト
Calpont InfiniDB のマニ ュ アルは、 様々な読者を対象 と し た複数のガ イ ド で構成 さ れて
い ます。 次の表を参照 し て く だ さ い。
表 3: マニ ュ アル
マニ ュ アル
説明
『Calpont InfiniDB 管理者ガ イ
ド』
Calpont InfiniDB を管理す る ための詳細な手順につい
て説明 し ます。
『Calpont InfiniDB 最小推奨仕
様ガ イ ド 』
Calpont InfiniDB の実装に必要なハー ド ウ ェ アお よ び
ソ フ ト ウ ェ アの最小の推奨仕様を示 し ます。
『Calpont InfiniDB イ ン ス ト
レーシ ョ ン ガ イ ド 』
分散構成に Calpont InfiniDB を イ ン ス ト ールす る ため
に必要な手順の概要について説明 し ます。
『Calpont InfiniDB SQL 構文ガ
イ ド』
Calpont InfiniDB に固有の構文について説明 し ます。
『Calpont InfiniDB 概要』
分析用デー タ ベース Calpont InfiniDB の概要について
説明 し ます。
『Calpont InfiniDB マルチ UM
同期ガ イ ド 』
Calpont InfiniDB で 2 つ以上のユーザーモジ ュ ールの
同期を保持す る ために使用す る オプシ ョ ンの概要につ
いて説明 し ます。
マニ ュ アルの入手
英語版のマニ ュ アルは、 (http://www.infinidb.org/ お よ び http://www.calpont.com)
で入手す る こ と がで き ます。 追加の支援が必要な場合は infinidb_doc@ashisuto.co.jp に
ご連絡 く だ さ い。
マニ ュ アルへのフ ィ ー ド バ ッ ク
マニ ュ アルの改善に向けて、 フ ィ ー ド バ ッ ク 、 コ メ ン ト お よ び提案を いただけ ます よ
う お願いいた し ます。 マニ ュ アル名、 バージ ョ ンお よ びページ番号を添え て コ メ ン ト
を infinidb_doc@ashisuto.co.jp にご送付 く だ さ い。
追加 リ ソ ース
Calpont InfiniDB の イ ン ス ト ールお よ びチ ュ ーニ ン グ、 ま たは Calpont InfiniDB を使用
し たデー タ の問合せに関 し て支援が必要な場合は infinidb_doc@ashisuto.co.jp ま で ご連
絡 く だ さ い。
は じ めに iii
iv は じ めに
第1章
パフ ォ ーマ ン スチ ュ ーニ ン グの概要
InfiniDB のアーキテ ク チ ャ の目標
パフ ォ ーマ ン ス に関連す る 設計を決定づけ る 多 く の コ ア アーキ テ ク チ ャ の目標があ り
ます。 InfiniDB の目標は次の と お り です。
1.
メ モ リ ーア ク セ スお よ びス ト レージ ア ク セ ス の両方で問合せの I/O コ ス ト を大
幅に削減す る 。
大規模デー タ に対す る ほ と ん ど の問合せで必要な I/O を根本的に削減す る 。
デー タ のブ ロ ッ ク (ページ) への ラ ン ダ ム な ア ク セ ス を排除す る 。
大規模なデー タ セ ッ ト の部分キ ャ ッ シ ュ ま たは完全キ ャ ッ シ ュ を可能にす
る グ ロ ーバルなデー タ バ ッ フ ァ キ ャ ッ シ ュ を実装す る 。
2. 最小限の同期で、 デー タ ベース操作を並行 し て実行で き る よ う にす る 。
デー タ のブ ロ ッ ク の読取 り に関連す る 同期を排除す る 。
重要な ス レ ッ ド プールに対 し て送信お よ び受信を行 う キ ュ ーな ど、 多 く の
メ カ ニズ ム を使用 し て ス レ ッ ド の同期の問題を最小限にす る 。
3. 次の よ う なパ ラ レルのデー タ ベース操作の作業単位を定義す る 。
様々な ス ト レージシ ス テ ム で正常に機能す る 。
パフ ォ ーマ ン ス モジ ュ ールが常に 100% 近 く の CPU 使用率で動作で き る よ う
にす る 。
ス レ ッ ド を問合せ専用に し ない (つま り 、 ロ ー ド 時で も 小規模の問合せが
短時間で実行 さ れ る よ う にす る )。
4. デー タ の送信 コ ス ト を最小限にす る (つま り 、 ロ ーカル ス レ ッ ド 間ま たは分散
さ れた ス レ ッ ド 間でのデー タ の送信を最小限にす る )。
可能な場合、 デー タ を送信す る のではな く 、 デー タ の操作を送信す る 。
可能な場合、 最大の表に対す る 送信 コ ス ト が発生 し ない よ う に操作を設定
する。
パフ ォ ーマ ン スチ ュ ーニ ングの概要 1
5. チ ュ ーニ ン グ要件を最小限に し 、 詳細デー タ の非定型分析のパフ ォ ーマ ン ス が向
上す る 。
現時点では、 1 行の検索にかか る 経過時間の最小化は主要な目標に含まれない こ と に注意
し て く だ さ い。 10 億行か ら 1 行を検索す る パフ ォ ーマ ン ス は一瞬に し て実現で き ますが、
従来の索引 と 表の組合せほ ど効率的ではない場合があ り ます。
InfiniDB を使用 し た結合の高速化
InfiniDB では、 従来の MySQL の結合を使用せずに、 InfiniDB エ ン ジ ン内で結合が実現 さ れ
ます。 こ れ ら の結合の特性は次の と お り です。
1. ハ ッ シ ュ 結合操作に よ っ て数百万ま たは数十億の行に対 し て最適化 さ れ ます。
2.
ス ケー ラ ブルな ス レ ッ ド プールでマルチ ス レ ッ ド 化お よ び分散 さ れます。
3. 中間結果を マテ リ ア ラ イ ズせずに任意の数のデ ィ メ ン シ ョ ン表に対 し て大規模な
フ ァ ク ト 表を 1 回のパ ス で ス ト リ ーム し ます。
4. デー タ 送信 コ ス ト を大幅に削減す る 可能性があ る 集計操作を行っ て、 送信 さ れま
す。
こ のマニ ュ アル内のパフ ォ ーマ ン ス チ ュ ーニ ン グのガ イ ド ラ イ ンは、 分析用デー タ ベース
InfiniDB 内でのみ実行 さ れ る 結合お よ びその他の操作に適用 さ れます。
構文に関する注意点
InfiniDB では、 使用可能なすべての構文に対 し て完全なパフ ォ ーマ ン ス機能を備え てい る
わけではあ り ません。 サポー ト さ れてい る 構文については、 『Calpont InfiniDB SQL 構文ガ
イ ド 』 マニ ュ アルを参照 し て く だ さ い。 新 し い機能が追加 さ れ る と 、 構文に対す る その拡
張機能では、 他の操作の場合 と 同様に、 マルチ ス レ ッ ド 化 さ れた ス ケー ラ ブルなパフ ォ ー
マ ン ス が積極的に活用 さ れ ます。
現在、 追加の構文は代替構成 (つま り 、 InfiniDB を標準ス ト レージエ ン ジ ン と し て構成す
る こ と ) に よ っ て利用で き ます。 ただ し 、 こ の場合は、 マルチ ス レ ッ ド 結合ま たは分散結
合お よ び集計操作を行 う こ と がで き な く な り ます。
InfiniDB の主要 コ ンポーネ ン ト
InfiniDB では、 3 つの主要 コ ン ポーネ ン ト で構成 さ れ る モジ ュ ールアーキ テ ク チ ャ が提供
さ れます。 3 つすべての コ ン ポーネ ン ト が連携 し て InfiniDB イ ン ス タ ン ス を構成 し てい ま
す。 こ れ ら の コ ン ポーネ ン ト には次の も のがあ り ます。
ユーザーモジ ュ ール (UM) : ユーザーモジ ュ ールは、 SQL リ ク エ ス ト を分割 し て 1
つ以上のパフ ォ ーマ ン ス モジ ュ ールに分散 し ます。 パフ ォーマ ン ス モジ ュ ールに
2 パフ ォ ーマ ン スチ ュ ーニ ングの概要
よ っ て、 リ ク エ ス ト さ れたデー タ が メ モ リ ーキ ャ ッ シ ュ ま たはデ ィ ス ク のいず
れかか ら 実際に取得 さ れ ます。 1 つのユーザーモジ ュ ールで 1 つの問合せの状
態が保持 さ れます。
パフ ォ ーマ ン ス モジ ュ ール (PM) : パフ ォーマ ン ス モジ ュ ールは、 マルチ ス
レ ッ ド 方式で、 ユーザーモジ ュ ールか ら 受信 し た細かい作業単位を実行 し ま
す。 ま た、 InfiniDB Enterprise では、 多数のパフ ォーマ ン ス モジ ュ ール間で作業
を分散で き ます。
ス ト レージ : InfiniDB では、 ロ ーカル ス ト レージ ま たは共有ス ト レージ (SAN な
ど) のいずれか を使用 し てデー タ を格納で き ます。 ユーザーは、 1 つのみの
サーバーを InfiniDB サーバー と し て動作 さ せ、 すべて を構成 し てそのサーバー
上で実行す る か、 ま たは複数のサーバーに ス ケールア ウ ト で き ます。
ま た、 InfiniDB では、 エ ク ス テ ン ト マ ッ プ と 呼ばれ る 共有オブジ ェ ク ト 内の各列に関
す る メ タ デー タ が保持 さ れ ます。 エ ク ス テ ン ト マ ッ プは、 ユーザーモジ ュ ールで発行
す る 操作 と その対象のデー タ を判断す る と き に参照 さ れ ます。 さ ら に、 デ ィ ス ク か ら
のブ ロ ッ ク の読取 り に必要な場合はパフ ォ ーマ ン ス モジ ュ ールに よ っ て参照 さ れま
す。 各列は 1 つ以上の フ ァ イ ルで構成 さ れ、 各フ ァ イ ルに複数のエ ク ス テ ン ト (通常
はデー タ の連続 し た割当て) を含め る こ と がで き ます。 エ ク ス テ ン ト も 、 エ ク ス テ ン
ト マ ッ プ内で追跡 さ れ ます。
UM では問合せ計画が認識 さ れ、 PM ではデー タ ブ ロ ッ ク お よ び操作が認識 さ れます。
エ ク ス テ ン ト マ ッ プに よ っ て こ の抽象化が可能にな り ます。
パフ ォ ーマ ン スチ ュ ーニ ングの概要 3
2 つのパフ ォ ーマ ン ス モジ ュ ールが イ ン ス ト ール さ れた環境を簡単に示 し た図
分析用デー タ ベース InfiniDB のエデ ィ シ ョ ン
InfiniDB は、 大規模なデー タ の ロ ー ド お よ び問合せを行 う ために構築 さ れた列指向のデー
タ ベース で、 オープン ソ ース版お よ び製品版の両方で使用で き ます。 InfiniDB のすべての
エデ ィ シ ョ ンに、 パフ ォ ーマ ン ス で重要 と な る 次の機能が含まれてい ます (機能について
の詳細は、 他のマニ ュ アルを参照 し て く だ さ い)。
列指向のアーキ テ ク チ ャ : InfiniDB では、 行ご と にではな く 列ご と にデー タ が格納
さ れます。 こ れに よ っ て、 ス キ ャ ン操作で ス キ ャ ン に含ま れない列を無視 し た り 、
問合せで参照 さ れない列を無視す る 列操作を選択す る こ と がで き ます。
マルチ ス レ ッ ド 設計 : InfiniDB では、 問合せをサポー ト す る ために操作が非常に細
かい レベルで分散 さ れ、 同期が最小限ま たは行われない状態でそれ ら の操作を実
行で き る よ う にほ と ん ど の問合せが構築 さ れ ます。 操作はすべてのパフ ォ ーマ ン
ス モジ ュ ールに自動的にマ ッ プ さ れ、 分散 さ れ ます。 結果は削減 さ れ、 コ ール側
のユーザーモジ ュ ールに返 さ れ ます。
4 パフ ォ ーマ ン スチ ュ ーニ ングの概要
垂直お よ び水平の自動パーテ ィ シ ョ ン化 : 列ス ト レージに基づいた I/O の大幅
な削減に加え て、 InfiniDB では、 ほ と ん ど の列に対 し て小 さ いエ ク ス テ ン ト
(パーテ ィ シ ョ ン) が作成 さ れ、 状況に よ っ てはエ ク ス テ ン ト の除外を発生 さ
せ る こ と がで き る よ う に一部の メ タ デー タ が格納 さ れます。
柔軟な同時実行 : InfiniDB では、 デー タ への同時ア ク セ ス が可能です。 こ れに
よ っ て、 大規模な問合せで、 使用可能なすべてのパフ ォ ーマ ン ス モジ ュ ールの
リ ソ ース を短時間使用で き る だけでな く 、 大規模な問合せが完了す る ま で待機
せずに小規模な問合せを実行で き ます。
InfiniDB Enterprise では、 製品版 ラ イ セ ン ス が使用 さ れ、 次のパフ ォーマ ン ス関連の機
能を含むス ケールア ウ ト オプシ ョ ン が追加 さ れ ます (機能についての詳細は、 他のマ
ニ ュ アルを参照 し て く だ さ い)。
大規模パ ラ レ ル処理 (MPP) 対応 : InfiniDB は複数の汎用ハー ド ウ ェ アマシ ン
を使用 し て、 総合的なパフ ォ ーマ ン ス を ほぼ リ ニ アに向上 さ せ る こ と がで き ま
す。 複数のパフ ォーマ ン ス モジ ュ ールを使用す る と 、 使用可能なすべてのパ
フ ォーマ ン ス モジ ュ ール上のすべての ス レ ッ ド 間で細かい作業を分散で き ま
す。
シ ェ アー ド ナ ッ シ ン グ分散デー タ キ ャ ッ シ ュ : 複数 ノ ー ド に よ る InfiniDB 構成
では、 デー タ は様々な ノ ー ド と そのデー タ キ ャ ッ シ ュ に分散 さ れ ます。 ノ ー ド
間でデー タ を共有す る こ と はあ り ませんが、 問合せのためにデー タ を読み取 る
と き は、 InfiniDB MPP アーキ テ ク チ ャ 内のすべての ノ ー ド がア ク セ ス さ れま
す。 つま り 、 InfiniDB は、 すべての参加 ノ ー ド が並行 し て分散形式でア ク セ ス
す る 、 1 つの大 き な論理デー タ キ ャ ッ シ ュ を作成す る と 考え ら れます。 こ れに
よ っ て、 十分な数の ノ ー ド があれば、 InfiniDB は文字通 り 、 大規模なデー タ
ベース を キ ャ ッ シ ュ で き ます。
InfiniDB のエデ ィ シ ョ ン間のチ ュ ーニ ングの相違点
こ のチ ュ ーニ ン グガ イ ド では、 オープ ン ソ ース版お よ びエ ン タ ープ ラ イ ズ版の両方に
ついて説明 し てい ます。 エ ン タ ープ ラ イ ズ版に限定 さ れたい く つかの追加のチ ュ ーニ
ン グ概念について特に詳 し く 説明 し てい ます。 ま た、 い く つのデー タ ベース を最初に
単一サーバー と し て イ ン ス ト ール し た後、 パフ ォ ーマ ン ス要件ま たは ス ケール要件を
満たすために、 ま たは分散 さ れたシ ス テ ム の管理を簡単にす る 追加の監視機能お よ び
管理機能を活用す る ためにエ ン タ ープ ラ イ ズ版にア ッ プグ レー ド す る こ と をお薦め し
ます。
パフ ォ ーマ ン スチ ュ ーニ ングの概要 5
6 パフ ォ ーマ ン スチ ュ ーニ ングの概要
第2章
InfiniDB の分散処理モデル
InfiniDB のジ ョ ブ発行処理は、 Map/Reduce 処理に例え る こ と がで き ます。 UM は、 ス
レ ッ ド プール (分散 さ れ る 場合があ る ) に操作を発行 し ます。 こ の ス レ ッ ド プール
は、 デー タ に対 し て個別にデー タ ベース操作 (フ ィ ル タ 、 集計、 結合な ど) を実行
し 、 次の操作を行 う ためにデー タ セ ッ ト (削減 さ れてい る 場合があ る ) を UM に戻 し
ます。
ただ し 、 InfiniDB と Map/Reduce にはい く つかの相違点があ り ます。 ジ ョ ブ (プ リ ミ
テ ィ ブ操作 と 呼ばれ る ) は SQL 構文にマ ッ プ済で、 利用可能な外部 API はないため、
こ れはツールキ ッ ト や ソ フ ト ウ ェ ア コ ールではあ り ません。 ま た、 ジ ョ ブの ス ケ
ジ ュ ール処理に も 相違点があ り ます。
ユーザーモ ジ ュ ールから パ フ ォ ーマ ン ス モ ジ ュ ールへの リ ク エ
ス ト の処理の粒度
デー タ ベース操作の リ ク エ ス ト はユーザーモジ ュ ールか ら 1 つ以上のパフ ォ ーマ ン ス
モジ ュ ールに発行 さ れ、 800 万行を含むデー タ ブ ロ ッ ク の範囲 (エ ク ス テ ン ト と 呼ば
れ る ) に対 し て ス キ ャ ン が実行 さ れます。 デー タ が ま だキ ャ ッ シ ュ さ れていない場合
は、 リ ク エ ス ト に よ り 、 こ の操作に加え て ス ト レージか ら の読取 り が発生す る 場合が
あ り ます。 シ ス テ ムのマルチブ ロ ッ ク 読取 り 機能を最大限に活用す る ために、 1 つの
エ ク ス テ ン ト 内のすべてのブ ロ ッ ク が タ ーゲ ッ ト PM にマ ッ プ さ れ、 発行 さ れます。
ま た、 同 じ エ ク ス テ ン ト のデー タ を必要 と す る その他の問合せ も 同 じ PM に送信 さ れ
ます。 エ ン タ ープ ラ イ ズ版で PM の数が増加 し た場合は、 新たに追加 さ れた PM を新
し い リ ク エ ス ト に含め る こ と がで き る よ う に再マ ッ ピ ン グが迅速に実行 さ れ ます。 非
分散シ ス テ ムの場合で も 、 こ の粒度で操作を実行す る と 、 隣接す る ブ ロ ッ ク が ま と め
て読み取 ら れて短い時間で処理 さ れ る な ど、 ブ ロ ッ ク ア ク セ ス の空間的お よ び時間的
局所性が向上 し ます。
大 き い表内の部分的に移入 さ れてい る エ ク ス テ ン ト と 、 小 さ い表用の部分的かつ唯一
のエ ク ス テ ン ト の場合、 操作の リ ク エ ス ト は各エ ク ス テ ン ト 内の最高水位標 (HWM)
ま でに制限 さ れ る こ と に注意 し て く だ さ い。
エ ク ス テ ン ト のテ ス ト 済のデフ ォ ル ト 構成は 800 万行です。 デ ィ ス ク 上の こ の割当て
サ イ ズは、 8-64MB (列内の 1 エ ク ス テ ン ト のデ ィ ス ク 上のデー タ サ イ ズ) の範囲で
変わ り ます。 値はシ ス テ ムの イ ン ス ト ール時に設定 さ れます。 こ の値は、 特定の
InfiniDB イ ン ス タ ン ス全体に対す る も のであ り 、 ス タ ー ト ア ッ プ後は変更で き ない こ
と に注意 し て く だ さ い。 新 し い イ ン ス タ ン ス の動作は、 別のマニ ュ アルに記載 さ れて
InfiniDB の分散処理モデル 7
い る Calpont.xml パ ラ メ ー タ に よ っ て設定で き ますが、 追加の検証お よ び確認が必要にな
り ます。
パフ ォ ーマ ン ス モ ジ ュ ール内の処理の粒度 (バ ッ チ プ リ ミ テ ィ ブ)
パフ ォ ーマ ン ス モジ ュ ール内のデー タ ベース操作は、 よ り き め細かい方法で分割 さ れ、
個々の ス レ ッ ド はエ ク ス テ ン ト 内の個々のデー タ ブ ロ ッ ク で個別に動作 し ます。 最小の操
作はプ リ ミ テ ィ ブ と も 呼ばれ ます。 プ リ ミ テ ィ ブ処理を行 う 各 PM 上で実際に実行 さ れ る
ソ フ ト ウ ェ アのプ ロ セ ス は PrimProc です。 バ ッ チプ リ ミ テ ィ ブでは、 区切 ら れたブ ロ ッ
ク セ ッ ト 内に格納 さ れてい る すべての行に対 し て 1 つ以上のデー タ ベース プ リ ミ テ ィ ブが
実行 さ れます。
InfiniDB のブ ロ ッ ク は 8192 バ イ ト のデー タ で、 固定長ス ト レージにおいては 1024-8192 行
をサポー ト し 、 varchar 列においては長 さ に よ っ て行数が変わ り ます。 varchar(7) お よ びそ
れ よ り 小 さ い も のは固定長の フ ィ ール ド にマ ッ プ さ れ、 固定長の フ ィ ール ド と し て格納 さ
れ る こ と に注意 し て く だ さ い。
様々な状況において、 あ る 特定のブ ロ ッ ク がバ ッ チプ リ ミ テ ィ ブに含ま れ る か ど う か を考
え る 場合には、 少 し 概念的な説明が役立ち ます。 実際、 バ ッ チプ リ ミ テ ィ ブはデー タ サ イ
ズに応 じ て、 1-8 個のブ ロ ッ ク に格納 さ れてい る 1 列の小 さ い固定 さ れた範囲の行 (8000
行) に対 し て操作を実行 し ます。 ま た、 バ ッ チプ リ ミ テ ィ ブ内の複数の個々のプ リ ミ テ ィ
ブは、 複数の列で こ の小 さ い固定 さ れたサ イ ズ範囲の行に対 し て操作を実行す る こ と があ
り ます。 そのため、 最小のプ リ ミ テ ィ ブは単一の 8K ブ ロ ッ ク のデー タ を読み込む こ と で
終了す る 場合 も あ り ます し 、 その他の場合は多数の列にわた る 問合せに対応す る ために
100 を超え る 数の個々のブ ロ ッ ク か ら の読取 り を行 う 場合があ り ます。
バ ッ チ プ リ ミ テ ィ ブ ス テ ッ プ (BPS)
バ ッ チプ リ ミ テ ィ ブ ス テ ッ プ (BPS) は、 操作が UM か ら 1 つ以上の PM に発行 さ れ る 問
合せ実行計画ス テ ッ プで、 UM で実行 さ れ る 可能性があ る 補足ス テ ッ プ も 含ま れ ます。 利
用可能なすべての PM 内の個々の ス レ ッ ド は、 割 り 当て ら れた範囲の行に対 し て、 リ ク エ
ス ト さ れたバ ッ チプ リ ミ テ ィ ブ を実行 し ます。 実際、 サーバーが 1 つか多数かにかかわ ら
ず、 バ ッ チプ リ ミ テ ィ ブの処理に利用で き る グ ロ ーバル ス レ ッ ド プールがあ り ます。
問合せは、 1 つ以上のバ ッ チプ リ ミ テ ィ ブ ス テ ッ プに よ っ て処理 さ れます。 バ ッ チプ リ ミ
テ ィ ブ ス テ ッ プは、 問合せ要件に応 じ て、 次の一部ま たはすべての処理を実行で き ます。
単一列の ス キ ャ ン : 単一列の述語 (=、 <>、 in (list)、 between、 is null な ど) に基づ
いて、 特定の列の 1 つ以上のエ ク ス テ ン ト を ス キ ャ ン し ます。
詳細は、 15 ページの 「最初の ス キ ャ ン操作のチ ュ ーニ ン グ」 を参照 し て く だ さ い。
8 InfiniDB の分散処理モデル
単一列の追加フ ィ ル タ : 以前の ス キ ャ ン で検出 さ れた行に対す る 追加の列を投
影 し 、 必要に応 じ て単一列の追加述語を適用 し ます。 ブ ロ ッ ク のア ク セ ス は行
識別子に基づいてお り 、 ブ ロ ッ ク に直接ア ク セ ス さ れます。
詳細は、 17 ページの 「追加の列の読取 り のチ ュ ーニ ン グ」 を参照 し て く だ さ
い。
表レベルの フ ィ ル タ : 表レベルの任意の フ ィ ル タ (column1 < column2 や、 よ り
高度な関数お よ び式な ど) に必要な追加の列を投影 し ます。 こ の場合 も 、 ブ
ロ ッ ク のア ク セ ス は行識別子に基づいてお り 、 ブ ロ ッ ク に直接ア ク セ ス さ れま
す。
結合での結合列の投影 : 任意の結合操作に必要な追加の結合列を投影 し ます。
こ の場合 も 、 ブ ロ ッ ク のア ク セ ス は行識別子に基づいてお り 、 ブ ロ ッ ク に直接
ア ク セ ス さ れます。
詳細は、 21 ページの 「InfiniDB の複数結合のチ ュ ーニ ン グ」 を参照 し て く だ さ
い。
複数結合の実行 : 投影 さ れた結合列に対 し て 1 つ以上のハ ッ シ ュ 結合操作を適
用 し 、 その値を使用 し て、 以前に構築 さ れたハ ッ シ ュ マ ッ プ を調べます。 内部
結合ま たは外部結合の要件を満たすのに必要な タ プルを構築 し ます。 エ ン タ ー
プ ラ イ ズ版では、 以前に構築 さ れたハ ッ シ ュ マ ッ プのサ イ ズに応 じ て、 PM 処
理を実行 し てい る サーバーま たは UM 処理を実行 し てい る サーバーで実際の結
合動作を実行で き る こ と に注意 し て く だ さ い。 いずれの場合 も 、 バ ッ チプ リ ミ
テ ィ ブ ス テ ッ プの機能は同 じ です。
詳細は、 21 ページの 「InfiniDB の複数結合のチ ュ ーニ ン グ」 お よ び 27 ページ
の 「 メ モ リ ー管理」 を参照 し て く だ さ い。
ク ロ ス表レベルの フ ィ ル タ : ク ロ ス表レベルの任意の フ ィ ル タ
(table1.column1 < table2.column2 や、 よ り 高度な関数お よ び式な ど) に必要な
追加の列を プ リ ミ テ ィ ブ ス テ ッ プの行の範囲か ら 投影 し ます。 こ の場合 も 、 ブ
ロ ッ ク のア ク セ ス は行識別子に基づいてお り 、 ブ ロ ッ ク に直接ア ク セ ス さ れま
す。 前提条件の結合操作が UM で実行 さ れた場合は、 こ の操作 も UM で実行 さ
れ ます。 それ以外の場合は、 PM で実行 さ れ ます。
集計 / 重複行の削除操作 (1 回目) : 特定のバ ッ チプ リ ミ テ ィ ブに割 り 当て ら れ
た結合済の行のセ ッ ト に対 し て ロ ーカルのグループ化操作、 重複行の削除操作
ま たは集計操作を適用 し ます。 こ の処理の 1 回目は、 パフ ォ ーマ ン ス モジ ュ ー
ルに よ っ て処理 さ れ ます。
InfiniDB の分散処理モデル 9
集計 / 重複行の削除操作 (2 回目) : 特定のバ ッ チプ リ ミ テ ィ ブに割 り 当て ら れた結
合済の行のセ ッ ト に対 し て最後のグループ化操作、 重複行の削除操作ま たは集計
操作を適用 し ます。 こ の処理は、 ユーザーモジ ュ ールに よ っ て処理 さ れます。
集計の詳細は、 27 ページの 「 メ モ リ ー管理」 を参照 し て く だ さ い。
バ ッ チプ リ ミ テ ィ ブは、 I/O を最小限に抑え る ために、 フ ィ ル タ を で き る かぎ り 早 く 適用
し 、 追加の列の投影を で き る かぎ り 遅 く す る こ と に よ っ て、 列デー タ フ ァ イ ルに対 し て表
指向の SQL コ マ ン ド を効率的に実行 し ます。 さ ら に、 バ ッ チプ リ ミ テ ィ ブは、 グループ
化操作、 集計操作、 重複行の削除操作を実行 し て、 ユーザーモジ ュ ールに戻 さ れ る バ イ ト
数を削減 し ます。
10 InfiniDB の分散処理モデル
第3章
エ ク ステン ト マ ッ プ
エ ク ス テ ン ト は、 物理的なセグ メ ン ト フ ァ イ ル内に存在す る 、 指定 し た列の領域の論
理ブ ロ ッ ク で、 サ イ ズは 8-64MB の間です。 各エ ク ス テ ン ト では、 デフ ォ ル ト で 800
万行がサポー ト さ れてお り 、 小 さ いデー タ 型であれば、 デ ィ ス ク 上で消費 さ れ る 領域
は少な く な り ます。
エ ク ス テ ン ト マ ッ プは、 ス ト レージに保持 さ れ る すべてのデー タ のカ タ ロ グ と みなす
こ と がで き ます。 各エ ク ス テ ン ト に 1 つのエ ン ト リ が含ま れます。 各カ タ ロ グエ ン ト
リ には、 ブ ロ ッ ク の範囲ご と の論理識別子 (行識別子の一部)、 部分的にデー タ が移
入 さ れてい る 各エ ク ス テ ン ト の最高水位標、 ほ と ん ど のデー タ 型に対す る 各エ ク ス テ
ン ト の最小値お よ び最大値を保持す る 場所が含まれてい ます。 現在、 8 バ イ ト を超え
る 文字デー タ 型お よ び 7 バ イ ト を超え る varchar デー タ 型では最小値お よ び最大値は
移入 さ れ ません。 日付型、 10 進型、 整数型、 小 さ い文字列な ど の他のすべてのデー タ
型では最小値お よ び最大値が移入 さ れます。
スキ ャ ンによ る エ ク ス テ ン ト マ ッ プ群
エ ク ス テ ン ト マ ッ プは DML ま たはバル ク ロ ー ド 機能に よ っ て自動的に移入 さ れ る た
め、 特別な統計収集は必要あ り ません。 こ れ ら の最小値お よ び最大値はデ ィ ス ク に保
持 さ れ る ため、 シ ス テ ム の再起動後で も その情報を使用で き ます。
列の各エ ク ス テ ン ト に格納 さ れた最小値お よ び最大値は、 特定の状況で I/O を除外す
る ために使用 さ れ、 セ ッ シ ョ ン で最近実行 さ れた文に関す る 情報を表示す る select
calgetstats(); 関数を使用 し て表示で き ます。 次の例では、 BlocksTouched お よ
び PartitionBlocksEliminated に対 し て レ ポー ト さ れ る 値を示 し ます。
BlocksTouched : 問合せを サポー ト す る ためにア ク セ ス さ れた 8KB のデー タ ブ ロ ッ
ク の数。
PartitionBlocksEliminated : 最小値 と 最大値の比較にのみ基づいて除外 さ れ る
ブ ロ ッ ク の数。
次の問合せは、 60 億行が含ま れてい る ス ケール係数 1000 の ス タ ース キーマベンチ
マー ク (SSB) デー タ セ ッ ト に対 し て実行 さ れ ます。 lo_orderdate フ ィ ール ド に基
づいて一度に 1 か月分のデー タ が ロ ー ド さ れてお り 、 ソ ー ト は実行 さ れてい ません。
こ の問合せでは、 (大幅に値下げ さ れた項目を除外す る ために) 7700 万の レ コ ー ド に
関 し て価格 と コ ス ト を比較 し て、 特定の日付範囲の分析を行い ます。 その後、 約 6000
万の個別の計算値の平均が計算 さ れて、 純収入が特定 さ れ ます。
エ ク ス テ ン ト マ ッ プ 11
select lo_discount, avg(lo_extendedprice - lo_supplycost),
count(*)
from lineorder
where lo_orderdate between 19940101 and 19940131
and lo_supplycost < lo_extendedprice * .5
group by 1 order by 2;
+-------------+---------------------------------------+----------+
| lo_discount | avg(lo_extendedprice - lo_supplycost) | count(*) |
+-------------+---------------------------------------+----------+
|
3.00 |
3806802.786682 | 5510648 |
|
5.00 |
3807880.542760 | 5511323 |
|
6.00 |
3808025.905069 | 5511063 |
|
9.00 |
3808060.552264 | 5503826 |
|
7.00 |
3808450.935915 | 5506420 |
|
10.00 |
3808529.811736 | 5508111 |
|
1.00 |
3808842.678177 | 5509157 |
|
0.00 |
3809090.349685 | 5510113 |
|
2.00 |
3809309.979333 | 5507300 |
|
4.00 |
3809375.700146 | 5506796 |
|
8.00 |
3810136.417883 | 5509236 |
+-------------+---------------------------------------+----------+
11 rows in set (3.20 sec)
+-------------------------------------------------------------------------------------------------------------------------------+
| calgettats()
|
+-------------------------------------------------------------------------------------------------------------------------------+
| Query Stats: MaxMemPct-0; NumTempFiles-0; TempFileSpace-0MB; ApproxPhyI/O-0;
CacheI/O-456180; BlocksTouched-456180; PartitionBlocksEliminated-
2890042; MsgBytesIn-4MB; MsgBytesOut-0MB; Mode-Distributed| 1256230262 897059 |
+-------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
他の列に対するパーテ ィ シ ョ ン ブ ロ ッ ク の除外
最小値ま たは最大値に基づいたパーテ ィ シ ョ ン ブ ロ ッ ク の除外は他の列に対 し て も 発生す
る 場合があ り ます。 通常は注文日に関連す る 別の日付フ ィ ール ド (lo_commitdate) を
使用す る よ う に問合せを変更す る と 、 ブ ロ ッ ク ア ク セ ス と 経過時間の両方で同様の削減が
行われます。 昇順のキー値な ど の 1 つ以上のデー タ パ タ ーン を含むほ と ん ど のデー タ セ ッ
ト で、 同様の メ リ ッ ト が見込ま れます。
mysql>
->
->
->
select lo_discount, avg(lo_extendedprice - lo_supplycost), count(*)
from lineorder
where lo_commitdate between 19940101 and 19940131
and lo_supplycost < lo_extendedprice * .5
12 エ ク ス テ ン ト マ ッ プ
-> group by
1 order by
2 ;
+-------------+---------------------------------------+----------+
| lo_discount | avg(lo_extendedprice - lo_supplycost) | count(*) |
+-------------+---------------------------------------+----------+
|
1.00 |
3807548.123096 | 5509631 |
|
2.00 |
3807764.108009 | 5506100 |
|
3.00 |
3808203.553947 | 5508280 |
|
10.00 |
3808530.528851 | 5508275 |
|
0.00 |
3808644.366889 | 5508041 |
|
8.00 |
3808727.418191 | 5507120 |
|
6.00 |
3809173.101862 | 5507031 |
|
4.00 |
3809189.422454 | 5508216 |
|
9.00 |
3809475.131073 | 5507767 |
|
5.00 |
3809746.089397 | 5511763 |
|
7.00 |
3809870.163028 | 5510417 |
+-------------+---------------------------------------+----------+
11 rows in set (4.08 sec)
mysql>
mysql> select calgetstats();
+----------------------------------------------------------------------------------------------------------------------------------+
| calgettats()
|
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Stats: MaxMemPct-0; NumTempFiles-0; TempFileSpace-0MB; ApproxPhyI/O-0;
CacheI/O-1561569; BlocksTouched-1561569; PartitionBlocksEliminated-
2779450; MsgBytesIn-14MB; MsgBytesOut-0MB; Mode-Distributed| 1256231405 276729
|
+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
列ス ト レージ、 バ ッ チ プ リ ミ テ ィ ブおよびエ ク ス テ ン ト マ ッ プ
機能に よ る I/O の除外
InfiniDB の列ス ト レージでは、 問合せに含まれていない列に対す る I/O を自動的に削
減で き ます。 ま た、 バ ッ チプ リ ミ テ ィ ブ ス テ ッ プ内のデー タ を フ ィ ル タ 処理す る 操作
を積極的に使用す る こ と で、 フ ィ ル タ に従っ て参照 さ れ る 列の I/O を大幅に除外で き
ます。 さ ら に、 InfiniDB では、 バ ッ チプ リ ミ テ ィ ブの発行前に問合せが分析 さ れ る た
め、 各列に格納 さ れてい る 最小値お よ び最大値を利用す る こ と で、 最初の ス キ ャ ンの
I/O も 削減 さ れ る 可能性があ り ます。
それぞれの I/O の除外方法を図で示す こ と がで き ます。 5 つの列 と 、 列ご と に 13 個の
エ ク ス テ ン ト (12 個は完全に移入 さ れ、 1 つは半分だけ移入 さ れてい る ) に分散 さ れ
た 1 億の行が含ま れてい る 単純な表があ る と し ます。 列 a お よ び b の フ ィ ル タ に基づ
いて表か ら 列 a、 b お よ び c を選択す る 問合せでは、 問合せを処理す る ためにア ク セ
ス さ れ る エ ク ス テ ン ト は 65 個の う ち 5 つのみ と な る 可能性があ り ます。
エ ク ス テ ン ト マ ッ プ 13
列ス ト レージの最適化
列 d お よ び e のブ ロ ッ ク は、 問合せで参照 さ れなか っ たため無視 さ れ ます。 次の
図では、 除外 さ れたエ ク ス テ ン ト は黄色で表示 さ れてい ます。
エ ク ス テ ン ト マ ッ プの最適化
列 a の フ ィ ル タ に対す る エ ク ス テ ン ト マ ッ プの最小値お よ び最大値は、エ ク ス テ
ン ト 1-9 を除外 し ます。 次の図では、 除外 さ れたエ ク ス テ ン ト は緑色で表示 さ
れてい ます。
列 b の フ ィ ル タ はエ ク ス テ ン ト 9-11 を除外 し ます。こ れに よ っ て、エ ク ス テ ン ト
12 お よ び 13 のみが ス キ ャ ン さ れます。 次の図では、 除外 さ れたエ ク ス テ ン ト
は青色で表示 さ れてい ます。
バ ッ チプ リ ミ テ ィ ブの最適化
列 aお よ びb に対 し て フ ィ ル タ を実際に実行す る こ と に よ っ てエ ク ス テ ン ト 13内
の行が除外 さ れ、 デー タ セ ッ ト がエ ク ス テ ン ト 12 内の数行に絞 ら れた場合、 参
照 さ れ る のは列 c のエ ク ス テ ン ト 12 と ブ ロ ッ ク の小 さ いサブセ ッ ト のみが参照
さ れ ます。 次の図では、 列 c の除外 さ れたエ ク ス テ ン ト はオ レ ン ジ色で表示 さ
れてい ます。
1 億行、 5 列のエ ク ス テ ン ト の図。
14 エ ク ス テ ン ト マ ッ プ
第4章
物理 I/O のチ ュ ーニ ング
InfiniDB で物理 I/O をチ ュ ーニ ン グす る 最良の方法について説明す る 前に、 まず こ の
項で使用す る い く つかの用語を定義 し ます。
エ ク ス テ ン ト : 通常、 エ ク ス テ ン ト は ス ト レージ シ ス テ ム内で連続 し て割 り 当
て ら れた領域です。 表の増大 と と も に、 必要に応 じ て各列でエ ク ス テ ン ト が追
加 さ れ ます。 エ ク ス テ ン ト は、 ほ と ん ど の場合、 実際には 8-64MB の範囲の可
変サ イ ズで、 800 万行を格納 し ます。
DBRoot:InfiniDB イ ン ス タ ン ス の作成時に InfiniDB イ ン ス タ ン ス で使用可能にな
るマウン ト ポイン ト 。
マルチブ ロ ッ ク 読取 り : ス ト レージか ら の多数の個々のブ ロ ッ ク 読取 り を 1 つ
の読取 り 操作に ま と め ます。 ほ と ん ど の ス ト レージサブシ ス テ ム では、 主 と し
て リ ク エ ス ト さ れた読取 り 操作のサ イ ズに応 じ て、 異な る 持続速度 (帯域幅)
でデー タ ブ ロ ッ ク が提供 さ れ ます。 個々の ラ ン ダ ム なブ ロ ッ ク が リ ク エ ス ト さ
れ る と 、 各ブ ロ ッ ク を サポー ト す る ために機械的なデ ィ ス ク ヘ ッ ド 移動が発生
す る 場合があ る ため、 デ ィ ス ク パフ ォーマ ン ス が大幅に低下す る こ と があ り ま
す。
デー タ ベース内の特定の表に行が追加 さ れ る と 、 必要に応 じ てエ ク ス テ ン ト が追加 さ
れ、 その表のすべての列のサ イ ズが増大 し ます。 特定の表の各列の最初のエ ク ス テ ン
ト セ ッ ト が 1 つの DBRoot に書 き 込まれ ます。 同 じ 表の 2 番目のエ ク ス テ ン ト セ ッ ト
は ラ ウ ン ド ロ ビ ン方式で次の DBRoot に書 き 込ま れ ます。 その他の表 も 異な る DBRoot
で始ま り ます。 こ のデー タ の分散は、 列フ ァ イ ルの同時実行読取 り の様々な条件を満
たすために使用可能な ス ト レージ リ ソ ース を最大限に活用す る ために設計 さ れてい ま
す。
前述の動作は、 定義 さ れたエ ク ス テ ン ト サ イ ズに基づいてデー タ が ロ ー ド さ れ る と 自
動的に発生 し ます。 実際に、 表作成操作に関連す る 追加の ス ト レージパ ラ メ ー タ は存
在 し ません。
最初のスキ ャ ン操作のチ ュ ーニ ング
I/O をチ ュ ーニ ン グす る には、 バ ッ チプ リ ミ テ ィ ブ ス テ ッ プ (BPS) で実行 さ れ る 操
作の順序を理解す る 必要があ り ます。 0 個以上の フ ィ ル タ を使用 し て、 特定の BPS に
対 し て 1 つ以上の列が参照 さ れ ます。 すべての場合で、 まず 1 つの列が読み取 ら れ、
こ の最初の操作をサポー ト す る ためにエ ク ス テ ン ト 全体が読み取 ら れ ます。 前の フ ィ
ル タ の選択に応 じ て、 追加の列ブ ロ ッ ク が読み取 ら れ る 場合があ り ます。 ただ し 、 追
物理 I/O のチ ュ ーニ ング 15
加の列では、 個々のブ ロ ッ ク ア ク セ ス を可能にす る 行識別子を使用で き ます (指定 さ れて
い る 場合)。
「最初の ス キ ャ ン」 操作には、 エ ク ス テ ン ト 内のすべてのブ ロ ッ ク が必要です。 「追加の列
の読取 り 」 は、 すべてのブ ロ ッ ク の ス キ ャ ン (マルチブ ロ ッ ク 読取 り を最大活用) ま たは
個々のブ ロ ッ ク の読取 り (一部の状況でのブ ロ ッ ク の合計数の最小化) のいずれか を行 う
こ と で実現で き ます。
通常、 最初の ス キ ャ ン操作のチ ュ ーニ ン グは、 2 つの相反す る 目標お よ び主要作業単位
(エ ク ス テ ン ト ) に基づいて行われ ます。 目標は次の と お り です。
1. 作業単位 (エ ク ス テ ン ト ) に対 し て並行 し て処理を行 う ためにで き る かぎ り 多 く
の ス レ ッ ド を使用可能にす る 。 読取 り は本質的に非同期であ る ため、 ス レ ッ ド は
I/O の待機中に停止 さ れ ません。
2.
ス ト レージ構成を最大限に活用す る ためにマルチブ ロ ッ ク 読取 り を利用す る 。
InfiniDB は多 く の異な る サーバー構成ま たは ス ト レージ構成で実行 さ れ る こ と が予測 さ れ
る ため、 こ れ ら のパ ラ メ ー タ を調整す る と 所定の環境のパフ ォ ーマ ン ス に影響を及ぼす可
能性があ り ます。 デフ ォ ル ト 設定に よ っ て、 様々な構成で高パフ ォ ーマ ン ス が得 ら れ る 必
要があ り ます。
こ の動作を制御す る Calpont.xml 構成フ ァ イ ル内のパ ラ メ ー タ を次に示 し ます。
ColScanReadAheadBlocks
デフ ォ ル ト 設定は、 512 (デー タ のブ ロ ッ ク 数) です。
使用例 : 8 バ イ ト のデー タ 型に、 ス キ ャ ン操作を サポー ト す る ために読み取 ら れ る 8192
個のデー タ のブ ロ ッ ク が含まれてい ます。 一度に 128 個以上のブ ロ ッ ク を読み取 る と き に
ス ループ ッ ト が最大にな る ス ト レージサブシ ス テ ム では、 ColScanReadAheadBlocks
パ ラ メ ー タ に 128、 256 ま たは 512 以上の値を指定す る と 、 ス ト レージサブシ ス テ ム の最
良のパフ ォ ーマ ン ス を実現で き ます。 パ ラ レル読取 り の実行に 8 つの コ ア を使用可能な
サーバーでは、 1024、 512 ま たは 256 以下の値を指定す る と 、 (最大で) 8 つすべての コ ア
で並行 し て読取 り を実行で き ます。
多 く のサーバー構成ま たはデ ィ ス ク 構成では、 類似す る 結果を も た ら す有効な設定が複数
存在す る 可能性があ り ます ( こ れ ら の設定では、 次の両方の要件が満た さ れ る ため)。
1. 並行 し て読み取 る のに十分な ス レ ッ ド を使用で き る 。
2. 帯域幅を最大化す る ためにマルチブ ロ ッ ク 読取 り を十分に利用す る 。
16 物理 I/O のチ ュ ーニ ング
追加の列の読取 り のチ ュ ーニ ング
追加の列の読取 り に対す る 物理 I/O のパフ ォーマ ン ス は、 前の列に適用 さ れた フ ィ ル
タ の特定のカーデ ィ ナ リ テ ィ ま たはフ ィ ル タ チ ェ ーンに よ っ て異な り ます。 エ ク ス テ
ン ト か ら 1 つの行のみが必要な場合は、 ど の ス ト レージ シ ス テ ム で も 、 そのブ ロ ッ ク
のみを読み取 る と 時間が短縮 さ れます。 い く つかのブ ロ ッ ク 、 ほ と ん ど のブ ロ ッ ク ま
たはすべてのブ ロ ッ ク が必要な場合は、 一部の個々のブ ロ ッ ク が問合せのサポー ト で
参照 さ れない場合で も 、 マルチブ ロ ッ ク 読取 り を利用す る と 時間が短縮 さ れ る 可能性
があ り ます。
追加の列の読取 り 操作で使用可能な読取 り 方法は 2 つあ り ます。
1. 既知のア ド レ ス に基づいて個々のブ ロ ッ ク を読み取 る 。
2. ColScanReadAheadBlocks に設定 さ れてい る 数のブ ロ ッ ク を一度に読み取
る マルチブ ロ ッ ク 読取 り を使用す る 。
読取 り が必要な場合、 こ れ ら 2 つの操作の選択は PM 内で行われます。 実際には、 同
じ 列に対す る 以前の読取 り か ら 統計が収集 さ れ、 パ ラ メ ー タ と 比較 さ れ ます。
こ の動作を制御す る Calpont.xml フ ァ イ ル内のパ ラ メ ー タ を次に示 し ます。
PrefetchThreshold
デフ ォ ル ト 設定は、 5 (問合せで使用 さ れたブ ロ ッ ク の割合) です。
デフ ォ ル ト 設定の 5 は、 以前読み取 ら れたブ ロ ッ ク の 5% を超え る ブ ロ ッ ク が問合せ
を満たすために実際に必要だ っ た場合に、 マルチブ ロ ッ ク 読取 り が継続 し て使用 さ れ
る こ と を示 し ます。 問合せを満たすために必要なブ ロ ッ ク の割合が 5% を下回っ た場
合は、 後続の読取 り で個々のブ ロ ッ ク の検索が使用 さ れ始め ます。
こ のパ ラ メ ー タ は、 行の数ではな く 、 フ ィ ル タ で必要なブ ロ ッ ク の数に関連 し てい る
こ と に注意 し て く だ さ い。 行の 5% を返す述語には、 90% を超え る ブ ロ ッ ク が必要な場
合があ り ます。 ただ し 、 デー タ 値が高度に ク ラ ス タ 化 さ れてい る 場合、 ブ ロ ッ ク の数
は 5-10% ま で下が る こ と があ り ます。
実際の動作は、 多 く の項目の複雑な相互関係に関連 し てい ます。
1. 問合せで使用 さ れ る 特定の フ ィ ル タ ま たはフ ィ ル タ チ ェ ーン。
2.
フ ィ ル タ で使用 さ れ る 列の値の頻度。
3. ブ ロ ッ ク 内での こ れ ら の値の実際の分布。
4. その時点でのデー タ バ ッ フ ァ キ ャ ッ シ ュ 内のブ ロ ッ ク 。
物理 I/O のチ ュ ーニ ング 17
5. 個々のブ ロ ッ ク を読み取っ た場合 と 総ブ ロ ッ ク を読み取っ た場合の ス ト レージ シ
ス テ ムの相対 コ ス ト 。
6.
ス ト レージシ ス テ ムに対す る 同時実行問合せの影響。
通常、 こ のパ ラ メ ー タ はほ と ん ど の問合せに影響を及ぼ し ません。 こ れは、 多 く の
InfiniDB の機能お よ び動作に基づいてい ます。
1. 複数の最適化に基づいた I/O の大幅な削減に よ っ て、 すべての状況で ス ト レージ
シ ス テ ム のボ ト ルネ ッ ク の発生を防止で き ます。
2. 多 く の問合せで I/O 要件が軽減 さ れ る ため、 よ り 多 く の問合せを キ ャ ッ シ ュ に
よ っ て処理で き ます。 ま た、 エ ン タ ープ ラ イ ズ版では、 グ ロ ーバルな ス ケー ラ ブ
ルデー タ キ ャ ッ シ ュ を使用で き ます。
3. 通常、 ほ と ん ど の分析的な問合せは、 エ ク ス テ ン ト 内の多 く のブ ロ ッ ク にア ク セ
ス し 、 境界条件に該当 し ません。
18 物理 I/O のチ ュ ーニ ング
第5章
同時実行および問合せ
InfiniDB では、 同時実行の管理は、 特定の問合せに割 り 当て る ス レ ッ ド の数を調整 し
た り 、 ス レ ッ ド の優先順位を割 り 当て る のではな く 、 バ ッ チプ リ ミ テ ィ ブ操作の リ ク
エ ス ト が UM か ら PM に発行 さ れ る 割合を管理す る こ と に よ っ て行われ ます。
処理の流れは次のパ ラ メ ー タ に よ っ て制御 さ れ ます。
MaxOutstandingRequests
デフ ォ ル ト 値は 5 (エ ク ス テ ン ト ) です。
前述の と お り 、 UM か ら 発行 さ れ る バ ッ チプ リ ミ テ ィ ブ リ ク エ ス ト は、 1 エ ク ス テ ン
ト (各列に 1 つのエ ク ス テ ン ト ) 内の行の範囲に対 し て特定の操作を実行す る リ ク エ
ス ト です。 こ の処理では、 次の一般的な フ ィ ー ド バ ッ ク ループが行われ ます。
UM は、 MaxOutstandingRequests に設定 さ れてい る 数ま で、 バ ッ チプ リ ミ
テ ィ ブ を発行 し ます。
PM は、 デー タ ブ ロ ッ ク を処理 し 、 個々の応答を戻 し ます。
UM は、 すべての未処理バ ッ チプ リ ミ テ ィ ブか ら のブ ロ ッ ク 応答を個別に受信
し 、 次のエ ク ス テ ン ト に対 し て次のバ ッ チプ リ ミ テ ィ ブ を発行す る タ イ ミ ン グ
を決定 し ます。
た と えば、 パ ラ メ ー タ で 5 (エ ク ス テ ン ト ) を設定 し た場合、 5 つのエ ク ス テ
ン ト を処理す る バ ッ チプ リ ミ テ ィ ブ リ ク エ ス ト が発行 さ れます。 ブ ロ ッ ク 応答
が戻 さ れ る と 、 UM は、 未処理 リ ク エ ス ト の総数がパ ラ メ ー タ の設定に達す る
よ う に、 新 し いエ ク ス テ ン ト に対 し て 1 つの追加バ ッ チプ リ ミ テ ィ ブ を発行 し
ます。 戻 さ れたブ ロ ッ ク のサ イ ズの合計が 1 エ ク ス テ ン ト のサ イ ズに達す る
と 、 次のエ ク ス テ ン ト 用に別のバ ッ チプ リ ミ テ ィ ブが発行 さ れ ます。
こ のパ ラ メ ー タ の設定では、 前述のパ ラ メ ー タ 設定を使用 し て ど の時点で も 5 つ相当
のエ ク ス テ ン ト がア ク テ ィ ブに処理 さ れ よ う にす る こ と が目標 と し て定義 さ れます。
事実上、 こ の処理に よ っ て、 利用可能なすべての リ ソ ース を大規模な問合せで使用で
き (他で消費 さ れていない場合)、 小規模な問合せを最小限の遅延で実行で き ます。
各列の 1 つのエ ク ス テ ン ト に対 し て個々のバ ッ チプ リ ミ テ ィ ブ を実行す る のに必要な
同時実行および問合せ 19
時間は非常に短 く 、 デ ィ ス ク か ら 多数の列を読み取 る 場合にかか る 時間は最大で 1 秒ほ ど
です。
負荷が大 き い場合に小規模な問合せに対す る 遅延を最小限に抑え る には、 小 さ い整数値を
設定す る こ と をお薦め し ます。
大規模な問合せを優先 さ せ る には、 MaxOutstandingRequests の値を少 し 大 き く し ま
す。 完全ま たは完全に近い CPU 使用率で PM が動作で き る 状態にシ ス テ ム が安定す る ま
で、 少 し だけ時間がかか る 場合があ り ます (1 秒ほ ど)。 多 く の場合、 デフ ォ ル ト 値に
よ っ てすべての PM が常に動作 し てい る 状態に保たれ る ため、 キ ュ ー内の追加 リ ク エ ス ト
に よ っ て経過時間が変わ る こ と はあ り ません (開始時間は短縮 さ れ ません)。
通常、 InfiniDB Enterprise では、 単独で実行 さ れ る 大規模な問合せが迅速に開始 さ れて利
用可能なすべての リ ソ ース が使用 さ れ る よ う に、 パフ ォ ーマ ン ス モジ ュ ールの数を基に
MaxOutstandingRequests の設定を調整す る 必要があ り ます。 同時実行の ワー ク ロ ー
ド シナ リ オでは、 複数問合せのサポー ト に よ っ て キ ュ ーが一杯にな る ため、 こ のパ ラ メ ー
タ の設定にかかわ ら ず、 通常は完全なシ ス テ ムの使用率が実現 し ます。
シ ス テ ム のテ ス ト お よ びベンチマー ク の結果では、 単独で実行 さ れ る 大規模な問合せを迅
速に開始で き る 各ス ケールア ウ ト 構成に対す る 適切な開始値は次の と お り です。
20 同時実行および問合せ
第6章
InfiniDB の複数結合のチ ュ ーニ ング
InfiniDB の結合処理モデルでは、 ネ ス テ ッ ド ループ操作は行われず、 かわ り にハ ッ
シ ュ 結合操作が実行 さ れ ます。 比較的少ない数の行の結合 (索引に よ っ てサポー ト さ
れてい る 場合) では、 ハ ッ シ ュ 構造を構築す る 必要がないため、 ネ ス テ ッ ド ループ操
作の方が高速にな る 可能性が高 く な り ます。 一方、 ハ ッ シ ュ 結合は、 数千以上の行を
結合す る 場合に一般的にパフ ォーマ ン ス が高 く 、 数百万、 数十億 と い う 行を結合す る
場合はネ ス テ ッ ド ループ操作 よ り も かな り 高速に実行 さ れます。
InfiniDB エ ン ジ ン には、 ハ ッ シ ュ 結合操作を構築す る 多数の方法があ り ます。 こ れ ら
の方法では、 結合操作に関連す る 最大の表のハ ッ シ ュ 構造を作成す る 必要がない よ う
に、 操作が優先的に順序付け ら れ ます。 かわ り に、 最大の表 (フ ァ ク ト 表) を マテ リ
ア ラ イ ズす る 必要がない よ う に、 こ の フ ァ ク ト 表には必要なすべての フ ィ ル タ 、 結合
お よ び集計操作が行われ ます。 フ ァ ク ト 表のマテ リ ア ラ イ ズ を回避す る よ う な問合せ
の構築は、 InfiniDB の最適化に よ っ て自動的に行われます。
InfiniDB が実行す る ハ ッ シ ュ 結合は、 UM が管理す る バ ッ チプ リ ミ テ ィ ブ ス テ ッ プの範
囲内で実行 さ れ ます ( し たが っ て、 PM が実行す る バ ッ チプ リ ミ テ ィ ブ操作に よ っ て
実行 さ れ ます)。 バ ッ チプ リ ミ テ ィ ブ ス テ ッ プは問合せの実行計画の ス テ ッ プであ り 、
結合の図では ノ ー ド と し て表す こ と がで き ます。 実際の実行は、 い く つかのパ ラ メ ー
タ 設定お よ び結合 さ れ る 小 さ な各表のカーデ ィ ナ リ テ ィ に よ っ てわずかに異な る 場合
があ り ます。
簡単な 2 つの表の結合の詳細
特定の 2 つの表に対す る 結合操作の場合、 一方の表が大 き い表 と 判断 さ れ、 他方が小
さ い表 と 判断 さ れ ます。 こ の判断は、 表内のブ ロ ッ ク 数お よ び述語のカーデ ィ ナ リ
テ ィ の推定値に基づ き ます。 こ の結合は、 2 つのバ ッ チプ リ ミ テ ィ ブ ス テ ッ プ (BPS)
を使用 し て実行 さ れます。 小 さ い表を ス キ ャ ンす る BPS は、 UM にア ク セ ス し てデー
タ を戻す と き に、 利用可能な任意の フ ィ ル タ を適用 し ます。 こ れは、 BPS (小) と 表
す こ と がで き ます。
次の条件付 き 動作は、 大規模な結合の実行に必要なネ ッ ト ワー ク 通信ま たはプ ロ セ ス
間通信を最小化す る (デー タ の送信 コ ス ト を最小限に抑え る ) ために行われ ます。
デー タ が UM に戻 さ れ る と 、 デー タ セ ッ ト のサ イ ズが判断 さ れます。 こ の測定値は、
次のパ ラ メ ー タ と 比較 さ れ ます。
PmMaxMemorySmallSide
InfiniDB の複数結合のチ ュ ーニ ング 21
デフ ォ ル ト 値は 64M (サ イ ズは MB 単位) です。
小 さ い表の 100 万程度の行が、 大 き い表の数十億 (あ る いは数兆) の行に対 し て結合 さ れ
る 場合には、 こ のデフ ォ ル ト で十分です。 実際のカーデ ィ ナ リ テ ィ は、 結合デー タ 型 と 、
問合せに含まれ る 小 さ い表の追加列に よ っ て異な り ます。 デー タ セ ッ ト のサ イ ズが
PmMaxMemorySmallSide よ り も 小 さ い場合は、 デー タ が PM に送信 さ れて分散ハ ッ シ ュ
マ ッ プが作成 さ れ ます。 そ う ではない場合、 UM で作成 さ れます。
UM ま たは PM で小 さ い表のハ ッ シ ュ マ ッ プが イ ン ス タ ン ス化 さ れ る と 、 最大の表に対 し
て BPS (大) が発行 さ れ ます。 小 さ い表のハ ッ シ ュ マ ッ プが PM に送信 さ れた場合、 結合
操作お よ び集計操作は完全分散で行われ ます。 小 さ い表のハ ッ シ ュ マ ッ プが UM にあ る 場
合、 結合お よ び集計は UM で行われ ます。 ど の場合 も 、 列お よ び表の フ ィ ル タ は、 PM 上
で、 完全にマルチ ス レ ッ ド 化お よ び分散 さ れた方法で同様に適用 さ れ ます。
実質的に、 2 つの表の結合は、 2 つのバ ッ チプ リ ミ テ ィ ブ ス テ ッ プに よ っ て実行 さ れます。
BPS (小) -> BPS (大)
デー タ ウ ェ アハ ウ ス の用語を使用す る と 、 こ の簡単な問合せは次の よ う に言い換え ら れ ま
す。
BPS (デ ィ メ ン シ ョ ン) -> BPS (フ ァ ク ト )
複数結合の詳細
単一の BPS で複数の小 さ い表 と 1 つの大 き い表を結合す る 場合に も 、 こ の結合をサポー
ト す る ために前述の処理モデルが使用 さ れます。
1 つの大 き な表が 2 つの小 さ い表 と 結合 さ れ る 場合、 操作は次の よ う にな り ます。
BPS (小 _1)
\
BPS (小 _2) ----> BPS (大)
こ れは、 大 き い表を処理す る 前に、 小 さ い表の 2 つの ス テ ッ プで実行 さ れ ます。 こ の処理
モデルは、 小 さ い表のハ ッ シ ュ マ ッ プが UM ま たは PM の ど ち ら で イ ン ス タ ン ス化 さ れた
かにかかわ ら ず、 同 じ であ る こ と に注意 し て く だ さ い。 実際に、 前述の図の ス テ ッ プは、
各オブジ ェ ク ト のサ イ ズにかかわ ら ず実行で き ます。 実行時の各オブジ ェ ク ト の正確な
カーデ ィ ナ リ テ ィ やサ イ ズに応 じ て、 両方の結合を PM ま たは UM で実行 し た り 、 任意の
組合せに分割 し て実行す る こ と がで き ます。
実際、 こ の結合処理モデルは、 任意の数の結合操作を処理で き ます。 こ の際、 結合操作に
含ま れ る 小 さ い各表に対 し て 1 つの BPS が使用 さ れ、 最大の表に対 し て 1 つの BPS が使
用 さ れます。
22 InfiniDB の複数結合のチ ュ ーニ ング
ス タ ース キーマのデー タ モデルの場合は、 こ の方法で、 自己結合を使用 し ない多数の
問合せに対応す る こ と がで き ます。
BPS (デ ィ メ ン シ ョ ン _1)
\
\
BPS (デ ィ メ ン シ ョ ン _2)
BPS (デ ィ メ ン シ ョ ン _3)
> BPS (フ ァ ク ト )
中略
BPS (デ ィ メ ン シ ョ ン _20)
/
/
こ れに よ っ て、 ス レ ッ ド 間の同期を最小限に抑え た状態で、 完全にマルチ ス レ ッ ド 化
お よ び分散 (オプシ ョ ン) さ れた処理を実行で き ます。 ま た、 フ ァ ク ト 表か ら 行ま た
は集計を戻す処理は、 可能なすべての フ ィ ル タ が適用 さ れ る ま で保留 さ れます。
その他の結合の組合せは、 連鎖結合演算子お よ び複数結合演算子の様々な組合せを使
用 し て行われ ます。 た と えば、 ス ノ ーフ レー ク ス キーマでは、 BPS (フ ァ ク ト ) 表用
のハ ッ シ ュ マ ッ プ を構築す る ための前提条件であ る 追加の結合操作が発生 し ます。 内
部結合操作お よ び外部結合操作の両方が こ れ ら の連鎖結合演算子お よ び複数結合演算
子でサポー ト さ れてい ます。
結合の最適化
InfiniDB オプテ ィ マ イ ザは、 統計を使用 し て グ ロ ーバル結合ツ リ ー内で最大の表を判
断 し 、 その表を ス ト リ ーム表 と し て使用で き る よ う に操作を順序付け ます (デー タ の
転送 コ ス ト を最小限に抑え ます)。 グ ロ ーバルで最大の表に よ っ て ま だ設定 さ れてい
ない追加のサブ ツ リ ーで も 、 大 き い表ま たは小 さ い表の ど ち ら であ る か を ロ ーカルで
判断で き ます。 実際のカーデ ィ ナ リ テ ィ が類似 し てい る 場合、 表の選択はパフ ォ ーマ
ン ス に影響 し ない こ と があ り ます。 大 き い 1 つの フ ァ ク ト 表 と 小 さ い複数のデ ィ メ ン
シ ョ ン表を含むデー タ セ ッ ト の場合、 準最適な も のが選択 さ れ る 可能性はかな り 小 さ
く な り ます。 オプテ ィ マ イ ザに よ っ て行われた判断が準最適であ る 場合に問合せを
チ ュ ーニ ン グで き る よ う にす る には、 結合操作内で最大の表を設定す る ための ヒ ン ト
を利用で き ます。
INFINIDB_ORDERED ヒ ン ト には、 From 句の最初の表はグ ロ ーバルで最大の表 と し て
処理 さ れ、 可能な場合はその表の結合結果のマテ リ ア ラ イ ズが除外 さ れ る よ う に結合
が順序付け ら れ る こ と が示 さ れます。
こ の ヒ ン ト は、 グ ロ ーバルで最大の表を結合対象の最後の表 と し て設定 し ます。 問合
せ内で こ のグ ロ ーバルで最大の表に結合 さ れた表に よ り 、 その最後の操作に含め る 表
(ま たは結合サブ ツ リ ー) が決定 さ れ ます (From 句内の表の順序ではあ り ません)。
InfiniDB では、 複数の結合操作が 1 つの BPS で実行 さ れ ます。 そのため、 1 つの大 き
い表 と n 個の小 さ い表の結合では、 ほ と ん ど の場合、 小 さ い表の結合の順序に よ っ て
問合せの I/O 特性が変わ る こ と はあ り ません。
InfiniDB の複数結合のチ ュ ーニ ング 23
た と えば、 こ の ヒ ン ト を次の よ う に使用す る と 、 オプテ ィ マ イ ザは実際のカーデ ィ ナ リ
テ ィ に関係な く 、 region 表を結合ツ リ ー内で最大の表 と し て処理 し ます。
select
from
where
and
/*!INFINIDB_ORDERED */ r_regionkey
region r, customer c, nation n
r.r_regionkey = n.n_regionkey
n.n_nationkey = c.c_nationkey;
ネ ス テ ッ ド ループ操作は行われないため、 こ の場合 も 、 ヒ ン ト に よ っ て駆動表が指定 さ れ
た り 、 1 つずつ結合す る 表の順序が決定 さ れ る こ と はあ り ません。 こ れ ら の概念は、 少な
く と も 従来の使用方法では InfiniDB 内に存在 し ません。
主要なチ ュ ーニ ングパラ メ ー タ : PmMaxMemorySmallSide
PmMaxMemorySmallSide パ ラ メ ー タ に よ っ て、 PM に送信 さ れ る 小 さ い表の単一ハ ッ
シ ュ マ ッ プのサ イ ズに対す る 上限が設定 さ れ、 結合を完全分散で実行す る か ど う かが決定
さ れます (エ ン タ ープ ラ イ ズ版の場合)。
単一サーバーのイ ン ス ト ールの一般的なチ ュ ーニ ングガ イ ド ラ イ ン
PmMaxMemorySmallSide は、 小 さ い表の結合について予測で き る 最大サ イ ズ をサポー ト
で き る 大 き さ に設定 し ます。 ただ し 、 利用可能な メ モ リ ーを上限 と し ます。 単一サーバー
内で も 、 デー タ の送信 コ ス ト を考慮す る 必要があ り 、 先に (PM で) フ ィ ル タ を実行す る
と 、 サーバー内部のデー タ 送信 コ ス ト が削減 さ れ ます。
複数 PM のイ ン ス ト ールの一般的なチ ュ ーニ ングガ イ ド ラ イ ン
複数 PM 構成の PmMaxMemorySmallSide のチ ュ ーニ ン グは、 サーバーで利用可能な メ
モ リ ーの量、 デー タ バ ッ フ ァ キ ャ ッ シ ュ 用に必要な メ モ リ ーの量、 同時に発生す る こ と が
予測 さ れ る 同時結合操作の数、 お よ び こ れ ら の結合操作のサ イ ズに関係 し ます。
次の よ う にチ ュ ーニ ン グす る こ と をお薦め し ます。
(同時実行 さ れ る PM の小 さ い表のハ ッ シ ュ マ ッ プの数) * (各 PM のハ ッ シ ュ マ ッ
プの平均サ イ ズ)
前述の値が次 よ り 小 さ く な る 必要があ り ます
(サーバーの メ モ リ ーの合計) - (デー タ バ ッ フ ァ キ ャ ッ シ ュ のサ イ ズ)
こ のパ ラ メ ー タ を設定す る こ と に よ っ て メ モ リ ーが明示的に消費 さ れ る わけではない こ と
に注意 し て く だ さ い。 こ のパ ラ メ ー タ では、 PM で イ ン ス タ ン ス化で き る ハ ッ シ ュ マ ッ プ
の最大サ イ ズのみが制限 さ れ ます。
24 InfiniDB の複数結合のチ ュ ーニ ング
16GB の メ モ リ ーを備え たサーバーで、 同時実行はそれほ ど多 く な く 、 2 番目に大 き い
表の結合カーデ ィ ナ リ テ ィ が最大で 1000 万であ る 場合は、
PmMaxMemorySmallSide を 512M に設定 し て、デー タ バ ッ フ ァ キ ャ ッ シ ュ を 14GB に
設定す る と 適切です。
同時実行がかな り 多い場合で も 、 各 PM のハ ッ シ ュ マ ッ プの平均サ イ ズに よ っ ては、
512M の値で有効な場合があ り ます。 ただ し 、 サーバーの メ モ リ ー利用率が 100% に近
づいた場合、 ま たは こ の値を越え て ス ワ ッ プが開始 さ れた場合は、
PmMaxMemorySmallSide の設定を小 さ く す る と 、 サーバーの メ モ リ ーが削減 さ れ る
可能性があ り ます。
InfiniDB の複数結合のチ ュ ーニ ング 25
26 InfiniDB の複数結合のチ ュ ーニ ング
第7章
メ モ リ ー管理
主要なチ ュ ーニ ングパラ メ ー タ : NumBlocksPct および
TotalUmMemory
各パフ ォ ーマ ン ス モジ ュ ール処理内のデー タ バ ッ フ ァ キ ャ ッ シ ュ 専用の メ モ リ ーの量
は、 次の Calpont.xml パ ラ メ ー タ に よ っ て設定 し ます。
PM の メ モ リ ーパ ラ メ ー タ :
NumBlocksPct
デフ ォ ル ト は提供形態に よ っ て異な り ます (単一サーバーのデフ ォ ル ト は 50 で、 複
数サーバーの イ ン ス ト ールのデフ ォ ル ト は 86 にな り ます)。 値が 86 の場合、 デー タ
バ ッ フ ァ キ ャ ッ シ ュ は、 サーバーで利用可能な メ モ リ ーの 86% ま で消費で き ます。
ユーザーモジ ュ ール と パフ ォ ーマ ン ス モジ ュ ールが同 じ サーバーで実行 さ れ る 単一
サーバー構成の場合は、 NumBlocksPct の設定を低 く す る 必要があ り ます。 こ れは、
ユーザーモジ ュ ールが、 一時デー タ セ ッ ト を管理す る ために一時領域を著 し く 必要 と
す る 場合があ る ためです。
TotalUmMemory パ ラ メ ー タ は、 ユーザーモジ ュ ールでの結合、 集計お よ び集合操作
の中間結果の管理に利用可能な メ モ リ ーの最大量を制限 し ます。 こ れは、 メ モ リ ーを
専用に確保す る ではな く 、 単一結合のハ ッ シ ュ マ ッ プのサポー ト で消費可能な メ モ
リ ーの最大量を制限 し ます。 通常は、 必要に応 じ て こ の設定を引 き 上げ る こ と で、 何
億 も の行が含まれ る こ と のあ る 小 さ い表の臨時ハ ッ シ ュ マ ッ プ を最小限の影響で使用
で き ます。
PM 処理 と UM 処理が異な る サーバーに分離 さ れ る エ ン タ ープ ラ イ ズ版 イ ン ス ト ール
では、 小 さ い表の平均の結合カーデ ィ ナ リ テ ィ が 100K よ り 小 さ い場合、 キ ャ ッ シ ュ
を PM の合計 メ モ リ ーの 95% に設定 し て も 差 し 支え あ り ません。 こ の場合、 PM の メ
モ リ ー利用率は、 様々な同時実行のシナ リ オに対 し て 95-97% の間で変動 し ます。
InfiniDB では、 大 き い表の数十億ま たは数兆の行を小 さ い表の任意の数のハ ッ シ ュ
マ ッ プに結合す る こ と がサポー ト さ れてお り 、 大 き い表のサ イ ズは、 ど のパ ラ メ ー タ
設定で も ま っ た く 制限 さ れない こ と に注意 し て く だ さ い。 TotalUmMemory パ ラ メ ー
タ は小 さ い表のマ ッ プにのみ適用 さ れ ます。
メ モ リ ー管理 27
28 メ モ リ ー管理
第8章
スケー ラ ビ リ テ ィ
スケー ラ ビ リ テ ィ : デー タ のサイ ズ と パフ ォ ーマ ン ス
特定のシ ス テ ム が構成 さ れ、 問題 と な る 問合せが最適化 さ れて効率的に実行 さ れた
ら 、 パフ ォーマ ン ス モジ ュ ールの規模を調整す る こ と に よ っ てパフ ォ ーマ ン ス を向上
す る こ と がで き ます。 ま た、 シ ス テ ム の規模を調整す る こ と で、 大容量のデー タ を一
貫 し たパフ ォ ーマ ン ス で分析で き る 場合があ り ます。
スケー ラ ビ リ テ ィ : ユーザーモ ジ ュ ール
ユーザーモジ ュ ール上で CPU 使用率が増加 し てい る 場合、 その負荷を分散す る ため
にユーザーモジ ュ ールを追加で き ます。 InfiniDB の目標の 1 つはで き る かぎ り 多 く の
作業を分散す る こ と であ る ため、 多 く の問合せが PM 上で 99% の CPU サ イ ク ルを実現
で き ます。
スケー ラ ビ リ テ ィ 29
30 スケー ラ ビ リ テ ィ
第9章
ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング
問合せのサマ リ ー統計 : calgetstats
以前の操作のサマ リ ー結果を表示す る 問合せの後に、 select calgetstats() コ マ
ン ド を実行で き ます。 次の問合せの例では、 3 つの フ ィ ル タ (その う ち 2 つは結合で
表 さ れてい る ) を使用 し て、 フ ァ ク ト 表に 59 億 9000 万行が含まれてい る ス タ ース
キーマベンチマー ク のデー タ セ ッ ト に対 し て 4 つの表の結合が実行 さ れてい ます。 最
後の集計は約 2000 万行に対 し て行われ、 こ の例では 8PM 構成が使用 さ れてい ます。
結果の詳細は、 出力例の と お り です。
select
from
where
and
and
and
and
and
group by
order by
d_year, lo_tax, p_size, s_region, count(*)
dateinfo, part, supplier, lineorder
s_suppkey = lo_suppkey
d_datekey = lo_orderdate
p_partkey = lo_partkey
lo_orderdate between 19980101 and 19981231
s_nation = 'BRAZIL'
p_size <> 23
1,2,3,4
1,2,3,4;
+--------+--------+--------+----------+----------+
| d_year | lo_tax | p_size | s_region | count(*) |
+--------+--------+--------+----------+----------+
|
1998 |
0.00 |
1 | AMERICA |
47607 |
|
1998 |
0.00 |
2 | AMERICA |
47194 |
... results abbreviated ...
|
1998 |
8.00 |
48 | AMERICA |
47846 |
|
1998 |
8.00 |
49 | AMERICA |
47394 |
|
1998 |
8.00 |
50 | AMERICA |
47030 |
+--------+--------+--------+----------+----------+
441 rows in set (3.66 sec)
mysql> select calgetstats();
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング 31
| calgettats()
|
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Stats: MaxMemPct-4; NumTempFiles-0; TempFileSpace-0MB; ApproxPhyI/O-0;
CacheI/O-1363254; BlocksTouched-1363254; PartitionBlocksEliminated-2637824;
MsgBytesIn-811MB; MsgBytesOut-0MB; Mode-Distributed| 1256555629 961957 |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)
calgetstats() 関数の出力は次の と お り です。
MaxMemPct-4 : こ の フ ィ ール ド には、 ユーザーモジ ュ ール (UM) の結合、 グルー
プ化、 集計、 重複行の削除な ど の操作を行 う ために使用 さ れてい る UM の メ モ
リ ー利用率が示 さ れ ます。
NumTempFiles-0 : こ の フ ィ ール ド には、 ユーザーモジ ュ ール (UM) の結合、 グ
ループ化、 集計、 重複行の削除な ど の操作を行 う ために使用 さ れてい る UM の一
時フ ァ イ ル使用数が示 さ れ ます。
TempFileSpace-0MB : こ の フ ィ ール ド には、 ユーザーモジ ュ ール (UM) の結合、
グループ化、 集計、 重複行の削除な ど の操作を行 う ために使用 さ れてい る UM の
一時フ ァ イ ル使用サ イ ズが示 さ れ ます。
ApproxPhyI/O-0 : こ の フ ィ ール ド には、 問合せに対す る ス ト レージか ら の読取 り
が示 さ れます。 状況に よ っ ては、 実際 と は少 し 異な る 場合があ り ます (通常は
0.1% 未満)。
CacheI/O-1363254 : こ の フ ィ ール ド には、 リ ク エ ス ト さ れた個別の物理 I/O 読取 り
の数が削減 さ れてい る 、 問合せで必要なブ ロ ッ ク ア ク セ ス が示 さ れ ます。
BlocksTouched-1363254 : こ の フ ィ ール ド には、 問合せで必要なブ ロ ッ ク ア ク セ ス
が示 さ れ ます。
PartitionBlocksEliminated-2637824 : こ の フ ィ ール ド には、 エ ク ス テ ン ト マ ッ プの最
小値ま たは最大値に基づいて発生 し たパーテ ィ シ ョ ンの除外に よ っ て排除 さ れた
ブ ロ ッ ク が示 さ れます。 フ ィ ル タ が適用 さ れ る ま で、 列ス ト レージ ま たは遅延 し
てい る 列の読取 り での I/O の削減は レ ポー ト さ れない こ と に注意 し て く だ さ い。
MsgBytesIn-811MB : デー タ 移動を処理す る プ ロ セ ス の測定単位。
MsgBytesOut-0MB : デー タ 移動を処理す る プ ロ セ ス の測定単位。
Mode-Distributed:問合せ結合処理が InfiniDB 内で処理 さ れたか、従来の MySQL の結
合機能で処理 さ れたか を示す イ ン ジ ケー タ 。 大規模なデー タ に対 し て最高のパ
フ ォ ーマ ン ス を実現す る には、 こ の処理を分散す る こ と をお薦め し ます。
32 ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング
問合せの詳細統計 : calgettrace
InfiniDB の SQL ト レース機能を有効にす る こ と で さ ら に詳細な レベルでの追加情報を
表示で き ます。 SQL ト レース の使用手順は次の と お り です。
1.
コ マ ン ド select calsettrace(1); を発行 し て、 新 し い ト レース を有効に
し ます。
2. 問合せを実行 し ます。
3.
コ マ ン ド select calgettrace(); を発行 し て、 ト レース の結果を表示 し ま
す。
た と えば、 新 し い ト レース を有効に し た後、 次の よ う な問合せを実行 し て分析で き ま
す。
select
from
where
and
and
and
and
and
group by
order by
d_year, lo_tax, p_size, s_region, count(*)
dateinfo, part, supplier, lineorder
s_suppkey = lo_suppkey
d_datekey = lo_orderdate
p_partkey = lo_partkey
lo_orderdate between 19980101 and 19981231
s_nation = 'BRAZIL'
p_size <> 23
1,2,3,4
1,2,3,4;
mysql> select calgettrace();
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| calgettrace()
|
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
|
Desc Mode Table
TableOID ReferencedOIDs
PIO
LIO
PBE
Elapsed Rows
BPS PM
part
3513
(3521,3514)
1370
1372
0
0.281
1371884
BPS PM
dateinfo 3558
(3559,3563)
12
10
0
0.126
2556
DSS PM
supplier 3528
(3539)
0
1
0.000
1
BPS PM
supplier 3528
(3533,3529,3540)
2449
3551
0
0.263
40078
HJS PM
supplier 3528
-----supplier
BPS PM
lineorder 3493
(3499,3497,3498,3508) 132060 131298 266240 5.553 1489347
HJS PM
lineorder 3493
-----dateinfo
HJS PM
lineorder 3493
-----part
HJS PM
lineorder 3493
-----supplier
TAS UM
5.374
441
TAS UM
5.374
441
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)
ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング 33
calgettrace() の出力には次のヘ ッ ダーが含ま れてい ます。
Desc : 実行 さ れた操作。
Mode : UM 内ま たは PM 内のいずれで実行 さ れたか。
Table : 列を ス キ ャ ン ま たは投影で き る 表。
TableOID : ス キ ャ ン さ れた表のオブジ ェ ク ト ID。
ReferencedOIDs : 問合せで必要な列のオブジ ェ ク ト ID。
PIO : 問合せで実行 さ れた物理 I/O (ス ト レージか ら の読取 り )。
LIO : 問合せで実行 さ れた論理 I/O。 ブ ロ ッ ク ア ク セ ス と も 呼ばれ ます。
PBE : 除外 さ れたパーテ ィ シ ョ ン ブ ロ ッ ク (PBE) では、 エ ク ス テ ン ト マ ッ プの最
小値ま たは最大値に よ っ て除外 さ れたブ ロ ッ ク が識別 さ れ ます。
Elapsed : 表示 さ れてい る ス テ ッ プの経過時間。
Rows : 返 さ れた中間行
ト レース出力には、 操作の順序の他、 ブ ロ ッ ク ア ク セ ス、 経過時間お よ び行カーデ ィ ナ リ
テ ィ の操作 コ ス ト が レ ポー ト さ れ ます。 最初の フ ィ ル タ は supplier 表に対 し て適用 さ れ ま
す。
DSS
PM
supplier
3528
(3539)
0
1
-
0.000
1
= 'Brazil' の フ ィ ル タ は、 複数の行で 1 つの文字列値を共有で き る デ ィ ク シ ョ ナ リ 構造内に
格納 さ れてい る 可変長フ ィ ール ド を参照 し ます。 こ れは、 デ ィ ク シ ョ ナ リ シ グ ネチ ャ ス
テ ッ プ (DSS) と い う 個別の ス テ ッ プで行われます。
BPS
PM
supplier
3528
(3533,3529,3540)
2449
3551
0
0.263
40078
こ の BPS は、 後続の結合で supplier か ら 他の列を読み取 る こ と を示 し ます。
HJS
PM
lineorder
3493
-
-
-
-
-----
-
-supplier
こ のハ ッ シ ュ 結合ス テ ッ プ (HJS) は、 supplier の投影 と DSS フ ィ ル タ を関連付け ます。
こ れは、 実際には前の BPS の一部であ り 、 時間には常に 0 (ゼ ロ ) が レ ポー ト さ れ る こ と
に注意 し て く だ さ い。 Mode フ ィ ール ド は PM 結合が こ こ で実行 さ れた こ と を示 し てい ま
す。
BPS
PM
dateinfo
3558
(3559,3563)
12
10
0
0.126
こ の BPS は、 後続の結合で dateinfo 表の列を読み取 る こ と を示 し ます。
34 ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング
2556
BPS
PM
part
3513
(3521,3514)
1370
1372
0
0.281
1371884
こ の BPS は、 後続の結合で part 表の列を読み取 る こ と を示 し ます。
BPS
PM
1489347
lineorder
3493 (3499,3497,3498,3508) 132060 131298 266240 5.553
こ の BPS は、 lineorder か ら ス キ ャ ンお よ び投影を行い、 supplier、 dateinfo お よ び part
に対 し て結合操作を実行す る こ と を示 し ます。 すべての フ ィ ル タ お よ び結合が終了 し
た後の出力カーデ ィ ナ リ テ ィ は 21,340,320 行です。
HJS
PM
lineorder
3493
-
-
-
-
-----
-
-dateinfo
HJS は、 前の BPS 内で発生す る ハ ッ シ ュ 結合操作の イ ン ジ ケー タ です。 Mode フ ィ ー
ル ド の値 PM ま たは UM は、 UM ま たは PM にハ ッ シ ュ マ ッ プが作成 さ れたか ど う か
を示 し ます。 ハ ッ シ ュ 結合操作は実際には前の BPS 内で発生す る ため、 こ こ に レ ポー
ト さ れ る 経過時間は常に 0 (ゼ ロ ) にな り ます。
TAS UM
-
-
-
-
-
- 5.374
441
タ プル集計ス テ ッ プ (TAS) では、 UM が入力 BPS か ら 最初の中間集計結果を受信 し
てか ら 必要な集計を完了す る ま での経過時間が レ ポー ト さ れ ます。 ほ と ん ど の集計シ
ナ リ オで、 こ の時間は前の BPS 操作 と 密接に対応 し ます。 こ の操作では、 レ ポー ト さ
れ る Mode は常に UM と な り ますが、 基本機能は常に 2 フ ェ ーズ操作 (まず PM で
ロ ーカル集計が実行 さ れ、 UM で最終集計が実行 さ れ る ) で行われ ます。
多 く の操作が並行 し て行われ る ため、 個々の経過時間の合計が問合せの経過時間 よ り
も 長 く な る こ と に注意 し て く だ さ い。 前述の例では、 BPS ス テ ッ プに 5.553 秒、 タ プ
ル集計ス テ ッ プ (TAS) に 5.374 秒かか っ てい ますが、 実際にはパ イ プ ラ イ ン操作 と
し て行われてお り 、 BPS は部分的に集計 さ れたデー タ を TAS に入力 し ます。 し たがっ
て、 BPS (lineorder) と その後の TAS の両方を実行す る 場合の経過時間は レ ポー ト さ
れ る 5.553 秒に よ り 近 く な り ます。
キ ャ ッ シ ュのフ ラ ッ シ ュ : calflushcache
InfiniDB では、 すべての PM 間のデー タ バ ッ フ ァ キ ャ ッ シ ュ か ら デー タ を フ ラ ッ シ ュ
す る 物理 I/O の簡単な テ ス ト を実行で き る 開発ユーテ ィ リ テ ィ ま たはテ ス ト ユーテ ィ
リ テ ィ が提供 さ れてい ます。 こ れは、 次の コ マ ン ド を発行す る こ と で実行 さ れます。
select calflushcache();
こ れは、 開発ユーテ ィ リ テ ィ ま たはテ ス ト ユーテ ィ リ テ ィ と し て使用す る こ と のみを
目的 と し てい ます。 キ ャ ッ シ ュ の フ ラ ッ シ ュ お よ び PIO の増加に よ る メ リ ッ ト は報告
さ れてい ません。 それど こ ろ か、 通常は問合せの実行時間が長 く な り ます。
ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング 35
パラ メ ー タ の読取 り または変更 : configxml.sh
getconfig ま たは setconfig に よ っ て Calpont.xml パ ラ メ ー タ フ ァ イ ル内の値の読取 り ま たは
設定を行 う こ と がで き る ユーテ ィ リ テ ィ が提供 さ れてい ます。
使用方法 : /usr/local/Calpont/bin/configxml.sh {setconfig|getconfig} section
variable set-value
こ のマニ ュ アル内で説明 さ れてい る パ ラ メ ー タ を更新す る 構文の例 :
/usr/local/Calpont/bin/configxml.sh setconfig HashJoin PmMaxMemorySmallSide 640M
/usr/local/Calpont/bin/configxml.sh setconfig JobList MaxOutstandingRequests 7
/usr/local/Calpont/bin/configxml.sh setconfig DBBC NumBlocksPct 90
エ ク ス テ ン ト マ ッ プの表示 : editem
editem と い う ユーテ ィ リ テ ィ を使用す る と 、 指定 し た列にデー タ が移入 さ れてい る か ど
う か を判断で き ます。 こ のユーテ ィ リ テ ィ ではオブジ ェ ク ト ID が必要です。 オブジ ェ ク
ト ID は、 ト レース出力ま たはシ ス テ ム カ タ ロ グのいずれかか ら 取得で き ます。
警告 : editem ユーテ ィ リ テ ィ は、 検査用の値の表示には安全に使用で き ます。 デー タ が
破損す る 恐れがあ る ため、 editem を他の目的に使用す る 場合は、 Calpont サポー ト の指示
に従っ て使用す る か、 隔離 さ れたテ ス ト 環境でのみ使用 し て く だ さ い。
シ ス テ ム カ タ ロ グか ら の選択の例 :
select columnname, objectid from calpontsys.syscolumn where
tablename = 'lineorder' and columnname = 'lo_commitdate';
editem のヘルプでは、 提供 さ れてい る 他のすべてのユーテ ィ リ テ ィ と 同様に、 -h フ ラ グ
を使用す る こ と で (例 : /usr/local/Calpont/bin/editem -h)、 使用可能な コ マ ン
ド の リ ス ト が提供 さ れ ます。
editem -o <objectid> コ マ ン ド に よ っ て、 指定 し た列の最小値お よ び最大値が表示 さ
れます。 最小値が存在 し ない場合はそのデー タ 型に対 し て可能な最大値で表 さ れ、 最大値
が存在 し ない場合はそのデー タ 型に対 し て可能な最小値で表 さ れ る こ と に注意 し て く だ さ
い。
36 ツールおよびユーテ ィ リ テ ィ のチ ュ ーニ ング
第 10 章
列デー タ ス ト レージの相違点
列ス ト レージの メ リ ッ ト と ト レー ド オ フ を次に示 し ます。 ト レー ド オ フ を回避 し た
り 、 列ス ト レージ機能を最大限に活用す る 方法について も 説明 し ます。
挿入の ト レー ド オ フ : 列ス ト レージでは、 個々の行を挿入す る 際のパフ ォ ーマ
ン ス プ ロ フ ァ イ ルが異な り ます。 任意の行ベース のシ ス テ ムに 1 行挿入す る 場
合、 ア ク セ スす る 可能性があ る のは 1 つの表ブ ロ ッ ク お よ び複数の索引ブ ロ ッ
ク です。 列ス ト レージの DBMS に挿入す る 場合は、 列ご と に 1 つ以上のブ ロ ッ
ク にア ク セ ス し ますが、 索引ブ ロ ッ ク に対す る 追加 コ ス ト があ り ません。 こ の
コ ス ト は、 バル ク ロ ー ド (cpimport)、 LOAD DATA INFILE ま たはバル ク 挿
入操作では変わ る こ と に注意 し て く だ さ い。 何千行 も 挿入す る 場合、 関連す る
ブ ロ ッ ク ア ク セ ス は数千行に集中 し 、 行 DBMS の表お よ び索引の組合せ と 比較
す る と 、 列ス ト レージは数千を超え る と よ り 効率的にな り ます。
InfiniDB の方法:cpimport を使用 し ます。InfiniDB の cpimport バル ク ロ ー
ド ユーテ ィ リ テ ィ を使用す る と 、 列ス ト レージ (索引を使用 し ない) での
挿入に必要なブ ロ ッ ク は、 行ベース の DBMS の場合 よ り 少な く な り ます。
ま た、 索引を使用 し ない と 、 通常、 よ り 高速の ロ ー ド パフ ォ ーマ ン ス を実
現で き 、 大規模なデー タ の ロ ー ド 時間の一貫性が向上 し ます。 InfiniDB で
は、 表が空で も 、 表に 100 億行が含ま れていて も 、 一連の行の ロ ー ド は同
じ 操作です。
削除の ト レー ド オ フ : 列ス ト レージでは、 個々の行の削除のパフ ォ ーマ ン ス プ
ロ フ ァ イ ルが異な り ます。 任意の行ベース のシ ス テ ム か ら 1 行削除す る 場合、
ア ク セ スす る 可能性があ る のは 1 つの表ブ ロ ッ ク お よ び複数の索引ブ ロ ッ ク で
す。 列ス ト レージの DBMS か ら 削除す る 場合は、 列ご と に 1 つ以上のブ ロ ッ ク
にア ク セ ス し ますが、 索引ブ ロ ッ ク に対す る 追加 コ ス ト があ り ません。 特定の
範囲の行か ら 数千行を削除す る 場合は、 関連す る ブ ロ ッ ク ア ク セ ス が集中 し 、
行 DBMS の表お よ び索引の組合せ と 比較す る と 、 列ス ト レージは よ り 効率的に
な り ます。
削除操作のパフ ォーマ ン ス は、 ど の DBMS で も 、 削除す る 行がブ ロ ッ ク 間で
分散 さ れてい る 状態に よ っ て異な る 場合があ り ます。 た と えば、 8K ブ ロ ッ ク
ご と に 100 行を格納す る 行ベース の DBMS か ら 1000 行を削除す る 場合は、 10
個 (最適な分散) か ら 1000 個 (最悪の分散) の範囲のブ ロ ッ ク にア ク セ スす
る 可能性があ り ます。 列ス ト レージでは、 10 列の表 (各列がブ ロ ッ ク ご と に
1024-8192 行を格納す る ) の場合、 最良のシナ リ オは 10 個のブ ロ ッ ク (最適
な分散) ですが、 最悪の場合は 10,000 個のブ ロ ッ ク (最悪のシナ リ オ) です。
列デー タ ス ト レージの相違点 37
InfiniDB の方法 : バ ッ チで削除 し ます。 た と えば、100 万行を指す 100 個のキーを
含む IN 句に基づいた行の削除は、 100 個の個別の削除文 よ り 大幅に短時間で実
行 さ れます。
更新の メ リ ッ ト : 列ス ト レージの更新では、 ほ と ん ど のシナ リ オで大 き な メ リ ッ
ト が得 ら れ ます。 1000 行の行 DBMS の更新の最良のシナ リ オは、 100 個のブ ロ ッ
ク (列ご と に 100 行 と 想定) です。 列 DBMS の最良のシナ リ オは 1 個のブ ロ ッ ク
です。 索引 も 更新す る 必要があ る 場合は、 パフ ォ ーマ ン ス上の メ リ ッ ト が増え ま
す。
InfiniDB の方法 : すでに最適化 さ れてい る ため、 通常は更新が非常に高速に実行
さ れ ます。
38 列デー タ ス ト レージの相違点
第 11 章
デー タ のロー ド 速度および リ アル タ イ ムに近いロー ド
デー タ の ロ ー ド 速度は、 バ ッ チ処理の状況、 基礎 と な る ス ト レージ機能、 表定義、
デー タ 型お よ び値に よ っ て異な り ます。 ただ し 、 一般的な目安 と し て、 cpimport バ
ル ク ロ ー ド ユーテ ィ リ テ ィ の ロ ー ド 速度は、 1 秒当た り 数十万か ら 数百万行にな る 場
合があ り ます。 LOAD DATA INFILE の ロ ー ド 速度は、 1 秒当た り 数千行の場合があ り
ます。 個々の挿入の ロ ー ド 速度は さ ら に遅 く 、 1 秒当た り 数十行です。 ど の場合 も 、
デー タ は読取 り 一貫性動作が確保 さ れ る モデルで使用可能にな り ます。
cpimport バル ク ロ ー ド 機能を使用す る と 、 一度に 1000 行、 数百万あ る いはそれ以上
のデー タ を ロ ー ド で き ます。 一度に 10 万行以上を ロ ー ド す る と き に速度が ピー ク に
な る イ ン ポー ト では、 ス タ ー ト ア ッ プ時間に約 1 秒程度かか り ます。 基本的な操作は
変わ ら ないため、 こ の ロ ー ド 速度は以降の ロ ー ド では一貫 し てい ます。
ど の方法でデー タ を ロ ー ド す る 場合 も 、 行の挿入に よ っ てエ ク ス テ ン ト が表に追加 さ
れ る 可能性があ り ます。 こ の際、 エ ク ス テ ン ト が ス ト レージ内で全体に連続 し て配置
さ れ る よ う にす る ため、 通常は 5-20 秒の遅延が発生 し ます。 こ れに よ っ て、 マルチ
ブ ロ ッ ク 読取 り の メ リ ッ ト を最大化 し 、 以降の選択操作で最大限のパフ ォ ーマ ン ス が
確保 さ れ ます。
処理の優先順位付け
デフ ォ ル ト では、 イ ン ポー ト 処理 と 問合せ処理の優先順位は同 じ です。 こ の優先順位
は、 InfiniDB 構成フ ァ イ ル Calpont.XML にエ ン ト リ を追加す る こ と に よ っ て変更で き
ます (Linux のみ)。 こ れは、 同時実行の問合せ と イ ン ポー ト が定期的に実行 さ れ、 結
果 と し て イ ン ポー ト 速度が低下す る 場合に役立つ こ と があ り ます。 こ のエ ン ト リ は次
の と お り です。
<ExeMgr1>
<Priority>###</Priority>
</ExeMgr1>
<PrimitiveServers>
<Priority>###</Priority>
</PrimitiveServers>
<WriteEngine>
<Priority>###</Priority>
</WriteEngine>
デー タ のロー ド 速度および リ アル タ イムに近いロー ド 39
### の値は次の と お り です。
1-40 : 1 は最 も 低い優先順位で、 40 は最 も 高い優先順位です。 前述の 3 つのプ ロ セ
ス のデフ ォ ル ト の優先順位は 21 です。
ExeMgr1 お よ び PrimitiveServers の優先順位を変更す る と 問合せの優先順位が変更 さ れ、
WriteEngine の優先順位を変更す る と イ ン ポー ト の優先順位が変更 さ れます。
40 デー タ のロー ド 速度および リ アル タ イムに近いロー ド
第 12 章
InfiniDB のパフ ォ ーマ ン スの目安
熟練 し たチ ュ ーニ ン グ担当者が行ベース の DBMS シ ス テ ム での経験に基づいて適切 と
感 じ る 多数の目安があ り ます。 InfiniDB では こ の従来の目安のい く つかは大幅に変
わ っ てお り 、 実際、 よ り 適切にデー タ ウ ェ アハ ウ ス の複雑 さ に対処で き る 多数の新 し
い方法を示 し てい る 場合があ り ます。
5% 未満のデー タ を問い合せ る と き には索引が役立ち ます。 こ の目安は、 表を ス
キ ャ ン し ない (全表ス キ ャ ン を行わない) 列ス ト レージでは変わ り ます。 た と
えば、 類似す る 20 列を含む表の場合、 1 列を ス キ ャ ンす る コ ス ト が表を ス
キ ャ ンす る コ ス ト の 5% にな る ため、 目安は 0.25% 未満のデー タ と な り ます。
索引の有用性の低下、 ラ ン ダ ム な I/O 動作お よ び多大な維持 コ ス ト を理由 と し
て、 現時点では InfiniDB で索引は実装 さ れてい ません。
InfiniDB の新 し いパ ラ ダ イ ム : I/O が よ り 効率的であ る マルチ ス レ ッ ド 操作
や分散操作に よ る 処理が利用 さ れ ます。
大 き い表を モデ リ ン グす る と き は、 ア ク セ ス頻度が低い列を含めないで く だ さ
い。 行ベース の DBMS シ ス テ ム の場合、 表の一部 と し て作成 さ れ る 追加の列に
よ っ て、 多数の行を含む (ま た、 Covering Index ま たはデー タ のその他の複製
やマテ リ ア ラ イ ズで処理で き ない) すべての問合せの速度が低下す る 可能性が
あ り ます。
InfiniDB の新 し いパ ラ ダ イ ム : 問合せで参照 さ れない列は無視 さ れ る ため、
追加の ス ト レージお よ び負荷に対す る コ ス ト のみで、 不定期の分析に追加
のデー タ を使用で き ます。
列のデー タ 型はそれほ ど重要ではあ り ません。 多 く の行ベース の DBMS シ ス テ
ム (特に、 すべての列を可変サ イ ズのデー タ 型に格納す る シ ス テ ム) では、
デー タ 型に基づ く パフ ォーマ ン ス の違いがない場合があ り ます。 デー タ に単一
の文字値のみが含まれ る 場合は、 行ベース の DBMS の char(2) を char(1) に変更
す る と 、 索引な し の列を ス キ ャ ンす る コ ス ト が変わ る 可能性があ り ますが、 そ
の程度は 1% 以下です。 列ス ト レージ シ ス テ ム の場合、 列の ス キ ャ ン で必要な
ブ ロ ッ ク は半分であ る ため、 効率が向上 し て列ご と の検索が高速化 さ れます。
InfiniDB の新 し いパ ラ ダ イ ム : 索引をチ ュ ーニ ン グす る のではな く 、 列の
デー タ 型をチ ュ ーニ ン グ し て検索を高速化で き ます。
InfiniDB のパフ ォ ーマ ン スの目安 41
冗長デー タ に利点はあ り ません。 冗長デー タ に よ っ て、 表にア ク セ スす る すべて
の問合せの コ ス ト が増え る だけでな く 、 更新ま たは一貫性の ロ ジ ッ ク に関連す る
問題が必ず発生 し ます。 ただ し 、 デー タ の ロ ー ド に一度だけ書込み可能な方式を
使用 し て実装 さ れ る デー タ ウ ェ アハ ウ ス のシナ リ オでは、 更新ま たは一貫性の問
題は発生 し ない場合があ り ます。 行ベース の ス ト レージでは、 表にア ク セ スす る
すべての問合せに対 し て追加の I/O コ ス ト が依然 と し て必要 と な り ます。
InfiniDB の新 し いパ ラ ダ イ ム : 追加の列に よ っ てデー タ への新 し いア ク セ ス パ ス
が提供 さ れ る 場合があ り ます (追加の列が フ ィ ール ド の主要な部分か、 複数の
フ ィ ール ド の連結であ る かは関係あ り ません)。
有用な キ ャ ッ シ ュ にす る には、 キ ャ ッ シ ュ を フ ァ ク ト 表 (ま たはア ク テ ィ ブな
パーテ ィ シ ョ ン) よ り 大 き く す る 必要があ り ます。 行ベース の独自の DBMS のほ
と ん ど では、 2 回目の ス キ ャ ン がキ ャ ッ シ ュ に よ っ て処理 さ れ る よ う にす る には、
全表ス キ ャ ン ま たは表内のア ク テ ィ ブなパーテ ィ シ ョ ン の全体ス キ ャ ン が メ モ
リ ーに完全に収ま る 必要があ り ます。
InfiniDB の新 し いパ ラ ダ イ ム : 列ス ト レージでは、 問合せで参照 さ れない列が削
除 さ れ、 列へのア ク セ ス が個別に行われ る ため、 キ ャ ッ シ ュ のサ イ ズが表のサ
イ ズのほんの一部にすぎ ない場合で も キ ャ ッ シ ュ の メ リ ッ ト が得 ら れ ます。
デ ィ ス ク か ら の読取 り は、 キ ャ ッ シ ュ か ら の読取 り に比べて 20-40 倍低速です。 実
際の比率は多数の要因に よ っ て異な り ますが、 通常、 デ ィ ス ク か ら 読み取 る と き
はパフ ォ ーマ ン ス が大幅に低下 し ます。 20-40 倍の比率は、 問合せ コ ス ト の 95%97.5% がデ ィ ス ク か ら の読取 り に直接関連す る こ と を示 し ます。
InfiniDB の新 し いパ ラ ダ イ ム:キ ャ ッ シ ュ に よ り 2-10 倍改善 し ます。InfiniDB の I/
O の効率性 (列ス ト レージ、 パーテ ィ シ ョ ン ブ ロ ッ ク の除外、 フ ィ ル タ 後ま で
の I/O の遅延) に よ り 、 ほ と ん ど の問合せの絶対 I/O コ ス ト が大幅に減 り ま
す。 結果 と し て、 キ ャ ッ シ ュ に よ り 相対 コ ス ト が 2-10 倍速 く な り ます。
パーテ ィ シ ョ ン化はデー タ ウ ェ アハ ウ ス のパフ ォ ーマ ン ス に と っ て重要です。 こ
れは、 実際に今 も 当ては ま り ます。 従来の独自の DBMS シ ス テ ム では、 DBA は 1
つま たは 2 つの レベルのパーテ ィ シ ョ ン化方法を宣言 し て、 こ の 1 ま たは 2 列に
対 し て適切な フ ィ ル タ を使用 し て問合せのブ ロ ッ ク ア ク セ ス を減 ら す こ と がで き
ます。
InfiniDB の新 し いパ ラ ダ イ ム : 列ス ト レージに基づいて、 自動パーテ ィ シ ョ ン化
を使用で き ます。 ロ ー ド 方法に基づいて、 デー タ の昇順化やその他の ク ラ ス タ
化が行われてい る すべての列に対 し て自動パーテ ィ シ ョ ン化を使用で き ます。
こ れは 1 ま たは 2 列に限定 さ れず、 適切な特性を持つすべての列に使用で き ま
す。
InfiniDB パーテ ィ シ ョ ンは必ず し も 実行す る 必要はあ り ません。 デー タ が ラ ン ダ
ム に ロ ー ド さ れ る 場合は、 パーテ ィ シ ョ ン を な く す こ と に よ る メ リ ッ ト はない
可能性があ り ます。
42 InfiniDB のパフ ォ ーマ ン スの目安
結合には適切な索引が必要です。 ど のネ ス テ ッ ド ループ結合操作で も 、 ループ
内の検索が索引に よ っ てサポー ト さ れ る と 、 パフ ォーマ ン ス が向上 し ます。 多
く の場合、 索引を使用 し ない と 結合のパフ ォーマ ン ス は大幅に低下 し ます。 ま
た、 ネ ス テ ッ ド ループ操作を反転 し た場合は、 別の索引が必要にな り ます。
InfiniDB の新 し いパ ラ ダ イ ム : ハ ッ シ ュ 結合機能を利用 し て索引の必要性を
な く し 、 ネ ス テ ッ ド ループ処理に関連す る 大量の行単位処理の コ ス ト を な
く し ます。
条件付 き のパフ ォーマ ン ス期待値。 適切にチ ュ ーニ ン グ し 、 チ ュ ーニ ン グに
よ っ て定義 さ れてい る 境界内に問合せが存在す る 場合は、 行ベース の DBMS シ
ス テ ム を こ れ ら の問合せ用にチ ュ ーニ ン グで き ます。 ただ し 、 索引を使用 し な
い、 ま たは明示的に宣言 さ れた 1 つま たは 2 つのパーテ ィ シ ョ ン列に よ っ て解
決 さ れないその他の問合せのパフ ォ ーマ ン ス は非常に低い場合があ り 、 パ
フ ォーマ ン ス の低下が 100 倍にな る こ と も あ り ます。 索引が完全にキ ャ ッ シ ュ
さ れ る 場合 と 、 ラ ン ダ ム な ア ク セ ス を処理す る ために何度 も 再 ロ ー ド さ れ る 場
合 と では、 索引のパフ ォーマ ン ス特性が大 き く 異な り ます。 結合の順序に よ っ
てネ ス テ ッ ド ループ操作の コ ス ト が大幅に変わ る 可能性があ り ます。
InfiniDB の新 し いパ ラ ダ イ ム : よ り 一貫 し たパフ ォ ーマ ン ス が実現 し ます。
10 億の レ コ ー ド に対 し て列が 1、 2、 4 ま たは 8 バ イ ト の表の場合は ス キ ャ
ン率にい く ら かの違いがあ り ますが、 桁違いにな る こ と はあ り ません。 結
合の順序は、 デー タ の送信 コ ス ト を最小限にす る よ う に自動的に処理 さ れ
ます。
すべての列が必要なわけではない場合、 「Select *」 に利点はあ り ません。
InfiniDB の従来どお り のパ ラ ダ イ ム : すべての列が必要なわけではない場
合、 従来どお り 利点はあ り ません。
InfiniDB のパフ ォ ーマ ン スの目安 43
44 InfiniDB のパフ ォ ーマ ン スの目安
第 13 章
追加 リ ソ ース、 ダウン ロー ド およびサポー ト
オープン ソ ース版の InfiniDB は、 コ ミ ュ ニ テ ィ 版の Web サ イ ト (www.infinidb.org) か
ら ダ ウ ン ロ ー ド で き ます。 製品版の InfiniDB については、 infinidb_doc@ashisuto.co.jp に
ご連絡 く だ さ い。
追加 リ ソ ース、 ダウン ロー ド およびサポー ト 45
46 追加 リ ソ ース、 ダウン ロー ド およびサポー ト
付録 A
GNU Free Documentation License
GNU Free Documentation License
Version 1.3, 3 November 2008
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://
fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and
useful document "free" in the sense of freedom: to assure everyone the effective
freedom to copy and redistribute it, with or without modifying it, either
commercially or noncommercially. Secondarily, this License preserves for the author
and publisher a way to get credit for their work, while not being considered
responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the
document must themselves be free in the same sense. It complements the GNU
General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software,
because free software needs free documentation: a free program should come with
manuals providing the same freedoms that the software does. But this License is not
limited to software manuals; it can be used for any textual work, regardless of
subject matter or whether it is published as a printed book. We recommend this
License principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that contains a
notice placed by the copyright holder saying it can be distributed under the terms of
this License. Such a notice grants a world-wide, royalty-free license, unlimited in
duration, to use that work under the conditions stated herein. The "Document",
below, refers to any such manual or work. Any member of the public is a licensee,
and is addressed as "you". You accept the license if you copy, modify or distribute the
work in a way requiring permission under copyright law.
GNU Free Documentation License 47
A "Modified Version" of the Document means any work containing the Document or a
portion of it, either copied verbatim, or with modifications and/or translated into
another language.
A "Secondary Section" is a named appendix or a front-matter section of the Document
that deals exclusively with the relationship of the publishers or authors of the Document
to the Document's overall subject (or to related matters) and contains nothing that could
fall directly within that overall subject. (Thus, if the Document is in part a textbook of
mathematics, a Secondary Section may not explain any mathematics.) The relationship
could be a matter of historical connection with the subject or with related matters, or of
legal, commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are designated, as
being those of Invariant Sections, in the notice that says that the Document is released
under this License. If a section does not fit the above definition of Secondary then it is
not allowed to be designated as Invariant. The Document may contain zero Invariant
Sections. If the Document does not identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts
or Back-Cover Texts, in the notice that says that the Document is released under this
License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at
most 25 words.
A "Transparent" copy of the Document means a machine-readable copy, represented in a
format whose specification is available to the general public, that is suitable for revising
the document straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available drawing editor,
and that is suitable for input to text formatters or for automatic translation to a variety
of formats suitable for input to text formatters. A copy made in an otherwise Transparent
file format whose markup, or absence of markup, has been arranged to thwart or
discourage subsequent modification by readers is not Transparent. An image format is not
Transparent if used for any substantial amount of text. A copy that is not "Transparent" is
called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII without markup,
Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD,
and standard-conforming simple HTML, PostScript or PDF designed for human
modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque
formats include proprietary formats that can be read and edited only by proprietary word
processors, SGML or XML for which the DTD and/or processing tools are not generally
available, and the machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such following pages
as are needed to hold, legibly, the material this License requires to appear in the title
page. For works in formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title, preceding the beginning
of the body of the text.
48 GNU Free Documentation License
The "publisher" means any person or entity that distributes copies of the Document to
the public.
A section "Entitled XYZ" means a named subunit of the Document whose title either is
precisely XYZ or contains XYZ in parentheses following text that translates XYZ in
another language. (Here XYZ stands for a specific section name mentioned below,
such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To
"Preserve the Title" of such a section when you modify the Document means that it
remains a section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that
this License applies to the Document. These Warranty Disclaimers are considered to
be included by reference in this License, but only as regards disclaiming warranties:
any other implication that these Warranty Disclaimers may have is void and has no
effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the license
notice saying this License applies to the Document are reproduced in all copies, and
that you add no other conditions whatsoever to those of this License. You may not
use technical measures to obstruct or control the reading or further copying of the
copies you make or distribute. However, you may accept compensation in exchange
for copies. If you distribute a large enough number of copies you must also follow the
conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may
publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers)
of the Document, numbering more than 100, and the Document's license notice
requires Cover Texts, you must enclose the copies in covers that carry, clearly and
legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover
Texts on the back cover. Both covers must also clearly and legibly identify you as the
publisher of these copies. The front cover must present the full title with all words of
the title equally prominent and visible. You may add other material on the covers in
addition. Copying with changes limited to the covers, as long as they preserve the
title of the Document and satisfy these conditions, can be treated as verbatim
copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put
the first ones listed (as many as fit reasonably) on the actual cover, and continue the
rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100,
you must either include a machine-readable Transparent copy along with each
GNU Free Documentation License 49
Opaque copy, or state in or with each Opaque copy a computer-network location from
which the general network-using public has access to download using public-standard
network protocols a complete Transparent copy of the Document, free of added
material. If you use the latter option, you must take reasonably prudent steps, when you
begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will
remain thus accessible at the stated location until at least one year after the last time
you distribute an Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the Document well
before redistributing any large number of copies, to give them a chance to provide you
with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of
sections 2 and 3 above, provided that you release the Modified Version under precisely
this License, with the Modified Version filling the role of the Document, thus licensing
distribution and modification of the Modified Version to whoever possesses a copy of it. In
addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were any,
be listed in the History section of the Document). You may use the same title as a
previous version if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities responsible
for authorship of the modifications in the Modified Version, together with at least
five of the principal authors of the Document (all of its principal authors, if it has
fewer than five), unless they release you from this requirement.
C. State on the Title page the name of the publisher of the Modified Version, as
the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications adjacent to the
other copyright notices.
F. Include, immediately after the copyright notices, a license notice giving the
public permission to use the Modified Version under the terms of this License, in
the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and required
Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add to it an item
stating at least the title, year, new authors, and publisher of the Modified Version
as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document
50 GNU Free Documentation License
as given on its Title Page, then add an item describing the Modified Version as
stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for public
access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may
be placed in the "History" section. You may omit a network location for a work
that was published at least four years before the Document itself, or if the
original publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the
Title of the section, and preserve in the section all the substance and tone of
each of the contributor acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their text
and in their titles. Section numbers or the equivalent are not considered part
of the section titles.
M. Delete any section Entitled "Endorsements". Such a section may not be
included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify
as Secondary Sections and contain no material copied from the Document, you may at
your option designate some or all of these sections as invariant. To do this, add their
titles to the list of Invariant Sections in the Modified Version's license notice. These
titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but
endorsements of your Modified Version by various parties—for example, statements
of peer review or that the text has been approved by an organization as the
authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up
to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be
added by (or through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or by arrangement
made by the same entity you are acting on behalf of, you may not add another; but
you may replace the old one, on explicit permission from the previous publisher that
added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission
to use their names for publicity for or to assert or imply endorsement of any Modified
Version.
5. COMBINING DOCUMENTS
GNU Free Documentation License 51
You may combine the Document with other documents released under this License, under
the terms defined in section 4 above for modified versions, provided that you include in
the combination all of the Invariant Sections of all of the original documents, unmodified,
and list them all as Invariant Sections of your combined work in its license notice, and
that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical
Invariant Sections may be replaced with a single copy. If there are multiple Invariant
Sections with the same name but different contents, make the title of each such section
unique by adding at the end of it, in parentheses, the name of the original author or
publisher of that section if known, or else a unique number. Make the same adjustment
to the section titles in the list of Invariant Sections in the license notice of the combined
work.
In the combination, you must combine any sections Entitled "History" in the various
original documents, forming one section Entitled "History"; likewise combine any sections
Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete
all sections Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released
under this License, and replace the individual copies of this License in the various
documents with a single copy that is included in the collection, provided that you follow
the rules of this License for verbatim copying of each of the documents in all other
respects.
You may extract a single document from such a collection, and distribute it individually
under this License, provided you insert a copy of this License into the extracted
document, and follow this License in all other respects regarding verbatim copying of
that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent
documents or works, in or on a volume of a storage or distribution medium, is called an
"aggregate" if the copyright resulting from the compilation is not used to limit the legal
rights of the compilation's users beyond what the individual works permit. When the
Document is included in an aggregate, this License does not apply to the other works in
the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document,
then if the Document is less than one half of the entire aggregate, the Document's Cover
Texts may be placed on covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form. Otherwise they
must appear on printed covers that bracket the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the
Document under the terms of section 4. Replacing Invariant Sections with translations
52 GNU Free Documentation License
requires special permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the original versions of
these Invariant Sections. You may include a translation of this License, and all the
license notices in the Document, and any Warranty Disclaimers, provided that you
also include the original English version of this License and the original versions of
those notices and disclaimers. In case of a disagreement between the translation and
the original version of this License or a notice or disclaimer, the original version will
prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications", or
"History", the requirement (section 4) to Preserve its Title (section 1) will typically
require changing the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense, or distribute it is void, and will automatically terminate your rights under
this License.
However, if you cease all violation of this License, then your license from a particular
copyright holder is reinstated (a) provisionally, unless and until the copyright holder
explicitly and finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means prior to 60 days
after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if
the copyright holder notifies you of the violation by some reasonable means, this is
the first time you have received notice of violation of this License (for any work) from
that copyright holder, and you cure the violation prior to 30 days after your receipt of
the notice.
Termination of your rights under this section does not terminate the licenses of
parties who have received copies or rights from you under this License. If your rights
have been terminated and not permanently reinstated, receipt of a copy of some or
all of the same material does not give you any rights to use it.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU Free
Documentation License from time to time. Such new versions will be similar in spirit
to the present version, but may differ in detail to address new problems or concerns.
See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document
specifies that a particular numbered version of this License "or any later version"
applies to it, you have the option of following the terms and conditions either of that
specified version or of any later version that has been published (not as a draft) by
the Free Software Foundation. If the Document does not specify a version number of
this License, you may choose any version ever published (not as a draft) by the Free
GNU Free Documentation License 53
Software Foundation. If the Document specifies that a proxy can decide which future
versions of this License can be used, that proxy's public statement of acceptance of a
version permanently authorizes you to choose that version for the Document.
11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web
server that publishes copyrightable works and also provides prominent facilities for
anybody to edit those works. A public wiki that anybody can edit is an example of such a
server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any
set of copyrightable works thus published on the MMC site.
"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by
Creative Commons Corporation, a not-for-profit corporation with a principal place of
business in San Francisco, California, as well as future copyleft versions of that license
published by that same organization.
"Incorporate" means to publish or republish a Document, in whole or in part, as part of
another Document.
An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that
were first published under this License somewhere other than this MMC, and subsequently
incorporated in whole or in part into the MMC, (1) had no cover texts or invariant
sections, and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA
on the same site at any time before August 1, 2009, provided the MMC is eligible for
relicensing.
54 GNU Free Documentation License