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章 分析用デー タ ベース InfiniDB の概要 1 分析用デー タ ベースの概要 .............................................................................. 1 InfiniDB の主な機能 ............................................................................................... 4 サポー ト するハー ド ウ ェ ア と ソ フ ト ウ ェ ア ........................................... 7 第2章 InfiniDB のアーキテ ク チ ャ 9 InfiniDB の概要 ......................................................................................................... 9 InfiniDB の コ ンポーネ ン ト ..............................................................................12 ユーザーモ ジ ュ ール ...................................................................................12 パ フ ォ ーマ ン ス モ ジ ュ ール .....................................................................14 InfiniDB のス ト レージ概念 ..............................................................................17 InfiniDB デー タ の一般的な ス ト レ ージ概念 ....................................17 圧縮 と リ アル タ イ ム解凍 .........................................................................18 バージ ョ ンバ ッ フ ァ および フ ァ イル .................................................19 ト ラ ンザ ク シ ョ ン ロ グ ..............................................................................19 エ ク ス テ ン ト マ ッ プ ..........................................................................................20 エ ク ス テ ン ト マ ッ プの機能 .....................................................................20 I/O 処理およびワー ク ロー ド の分散 ..................................................22 第3章 デー タ ベースの管理 25 SQL イ ン タ フ ェ ース ..........................................................................................27 InfiniDB イ ン ス タ ン スの起動お よび停止 .................................................27 iii セキ ュ リ テ ィ の概念 ..........................................................................................27 オペ レーテ ィ ン グシ ス テムのセキ ュ リ テ ィ ..................................27 デー タ ベースのロ グ イ ン ア ク セス権 .................................................28 オブ ジ ェ ク ト のセキ ュ リ テ ィ ...............................................................28 InfiniDB 構成 フ ァ イル ........................................................................................28 新 し いデー タ ベースの作成 ...........................................................................29 管理ユーテ ィ リ テ ィ ..........................................................................................30 シ ス テムロ グ .........................................................................................................31 バ ッ ク ア ッ プおよび リ カバ リ .......................................................................31 バ ッ ク ア ッ プ手順の概要 .........................................................................31 リ カバ リ 手順の概要 ...................................................................................34 GUI ツールのサポー ト ......................................................................................35 第4章 オブ ジ ェ ク ト 管理 37 表 ..................................................................................................................................37 表の変更お よび削除 ...................................................................................38 ス ト ア ド プ ロ シージ ャ お よび SQL 関数 .................................................38 サポー ト さ れていないデー タ ベースオブ ジ ェ ク ト ..........................40 InfiniDB シ ス テム カ タ ロ グ ..............................................................................40 第5章 デー タ のロー ド および操作 43 InfiniDB のバル ク ローダー ..............................................................................43 シ ン プルバル ク ロー ド の例 ....................................................................44 複数の表のバル ク ロー ド .........................................................................46 従来のバル ク ロー ド の例 .........................................................................46 デー タ ロー ド 用の MySQL ユーテ ィ リ テ ィ ...........................................48 DML のサポー ト ...................................................................................................49 ト ラ ンザ ク シ ョ ン管理 .....................................................................................50 同時実行の制御 ....................................................................................................51 第6章 ア プ リ ケーシ ョ ンおよびビ ジネス イ ン テ リ ジ ェ ン スの 開発 53 ア プ リ ケーシ ョ ン ツールおよび BI ツールを使用 し た InfiniDB への 接続 ...........................................................................................................53 ア プ リ ケーシ ョ ン開発ツールお よびビ ジネス イ ン テ リ ジ ェ ン ス ツール ......................................................................................................54 iv 第7章 パフ ォ ーマ ン スのチ ュ ーニ ング 55 監視および診断ユーテ ィ リ テ ィ ..................................................................55 ア ラ ームお よび通知 ..........................................................................................60 SQL の監視お よび診断ユーテ ィ リ テ ィ ...................................................62 第8章 InfiniDB への移行 67 一般的な移行の概念 ..........................................................................................67 MySQL のデー タ の移行方法 ..........................................................................69 Oracle のデー タ の移行方法 ............................................................................69 Microsoft SQL Server のデー タ の移行方法 ............................................70 付録 A GNU Free Documentation License 71 v vi は じ めに 『InfiniDB 概要』 へ よ う こ そ。 本書では、 分析用デー タ ベース InfiniDB の概要 と 、 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 パフ ォ ーマ ン ス チ ュ ーニ ン グガ イ ド 』 分析用デー タ ベース 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 は、 大規模な収集情報の管理お よ び取得に特化 し て設計 さ れた ソ フ ト ウ ェ ア ソ リ ュ ーシ ョ ン で、 通常、 デー タ ウ ェ アハ ウ ス、 デー タ マー ト 、 分析用デー タ ベース ま たは分析用デー タ ス ト ア と 呼ばれてい る も のです。 従来の リ レーシ ョ ナルデー タ ベース は分析操作ま たはビ ジネ ス イ ン テ リ ジ ェ ン ス操作用ではな く ト ラ ンザ ク シ ョ ン処理操作用に設計 さ れてい ますが、 InfiniDB は、 こ の従来の リ レーシ ョ ナルデー タ ベース に見 ら れ る 制約を な く す よ う に設計 さ れてい ます。 InfiniDB のマルチ ス レ ッ ド の列指向アーキ テ ク チ ャ に よ っ て、 安価な汎用ハー ド ウ ェ ア を利用 し 、 マシ ン に CPU お よ び RAM を追加 し た拡張構成でテ ラ バ イ ト レベルのデー タ を効 率的に管理す る こ と がで き ます。 ま た、 従来の リ レーシ ョ ナルデー タ ベース管理シ ス テ ム (RDBMS) では完了す る のに時間がかか っ ていた問合せの応答時間を大幅に短縮 す る こ と も で き ます。 さ ら に、 エ ン タ ープ ラ イ ズ版の InfiniDB では、 大規模パ ラ レル 処理 (MPP) 方法で展開す る ために、 ス ケールア ウ ト 設計を実現す る 有償の製品版オ プシ ョ ン も 用意 し てい ます。 こ の構成では、 すべての参加マシ ン間で処理がパ ラ レル 化 さ れ る ため、 実際 よ り も 多い ノ ー ド がシ ス テ ム に追加 さ れたかの よ う にパフ ォ ーマ ン ス を リ ニ アに向上 さ せ る こ と がで き ます。 ビ ジネ ス イ ン テ リ ジ ェ ン スお よ びデー タ 分析は、 日々の重要な意思決定お よ び競争力 の維持を目的 と し て使用す る ビ ジネ ス の主要な メ カ ニズ ム と な っ てい る ため、 Calpont (InfiniDB のプ ロ バ イ ダ) は多 く の方に こ の強力な分析用デー タ ベース機能を ご利用い ただけ る も の と 確信 し てい ます。 そのため、 Calpont は分析用デー タ ベース InfiniDB の 無償オープ ン ソ ース版 (InfiniDB コ ミ ュ ニテ ィ 版) を提供 し ます。 誰で も GPL ラ イ セ ン ス の も と 無償でダ ウ ン ロ ー ド し て使用で き ます。 Calpont は高度な機能を提供 し 、 技術サポー ト を週 7 日、 24 時間体制で行 う 分析用デー タ ベース の製品版 (エ ン タ ープ ラ イ ズ版) も 提供 し てい ます (日本でのサポー ト は 9:00-17:00 です (2013 年 4 月現 在))。 分析用デー タ ベースの概要 ビ ジネ ス イ ン テ リ ジ ェ ン ス (BI) お よ びデー タ 分析は、 ビ ジネ ス の重要な意思決定を 行 う ための情報の円滑な利用に関係 し ます。 通常、 BI お よ びデー タ 分析の ラ イ フ サ イ ク ルは次に示す と お り です。 分析用デー タ ベース InfiniDB の概要 1 こ の図では、 業務デー タ お よ び ト ラ ンザ ク シ ョ ンデー タ が抽出 - 変換 - ロ ー ド (ETL) フ ェーズに入 り 、 最終的に分析用デー タ ベース ま たはデー タ ウ ェ アハ ウ ス に移入 さ れ る 仕 組みを示 し てい ます。 その後、 分析用デー タ ベース は様々な ビ ジネ ス イ ン テ リ ジ ェ ン ス処 理で使用 さ れ、 非定型の問合せ、 事前にビル ド さ れたダ ッ シ ュ ボー ド と レ ポー ト 、 ま たは 主要なデー タ 変更が発生 し た と き に自動送信 さ れ る 通知を介 し てデー タ にア ク セ スす る 意 思決定者をサポー ト し ます。 現在提供 さ れてい る ほぼすべての リ レーシ ョ ナルデー タ ベース は、 オ ン ラ イ ン ト ラ ンザ ク シ ョ ン処理 (OLTP) の ワー ク ロ ー ド に対処す る こ と を主な目的 と し て設計 さ れてい ます。 通常、 ト ラ ンザ ク シ ョ ン (Amazon な ど、 Web ベース で本を販売す る 業者か ら 本を オ ン ラ イ ン で注文す る 行為な ど) は、 リ レーシ ョ ナルデー タ ベース の 1 つ以上の行に対応 し 、 大 部分の RDBMS の設計は行単位のパ ラ ダ イ ムに基づいてい ます。 ト ラ ンザ ク シ ョ ンベース のシ ス テ ムの場合、 こ のアーキ テ ク チ ャ は受信デー タ の入力を処理す る のに適 し てい ま す。 ただ し 、 読取 り が非常に集中 し ていて、 リ ク エ ス ト さ れ る 情報に対 し て選択問合せを実行 す る アプ リ ケーシ ョ ン の場合、 OLTP デー タ ベース の設計は一般的に適 し てい ません。 ト ラ ンザ ク シ ョ ンは行ベース ですが、 ほ と ん ど の場合、 デー タ ベース の問合せは列ベース で す。 ト ラ ンザ ク シ ョ ンデー タ の挿入 と 削除は行ベース のシ ス テ ム で適切に処理で き ます が、 表の少数の列のみを対象 と す る 選択問合せは列指向アーキ テ ク チ ャ の方がは る かに適 切に処理で き ます。 平均的に、 行ベース のシ ス テ ムは、 列ベース のデー タ ベース で同 じ 情 2 分析用デー タ ベース InfiniDB の概要 報を取得す る 場合に比べて 5 倍か ら 10 倍の物理 I/O を実行 し ます。 問合せで最 も 時 間がかか る 処理は通常は物理 I/O であ る こ と 、 ま た分析問合せでは一般的な ト ラ ンザ ク シ ョ ン でのデー タ ベース操作 よ り は る かに多い行数のデー タ を処理す る こ と を考え る と 、 行指向アーキ テ ク チ ャ と 列指向アーキ テ ク チ ャ のパフ ォ ーマ ン ス の差は、 デー タ ベース が拡大す る につれて広が る こ と が よ く あ り ます。 選択問合せの効率を低下 さ せないため、 行ベース の RDBMS は索引付け、 水平パー テ ィ シ ョ ン化、 マテ リ ア ラ イ ズ ド ビ ュ ー、 サマ リ ー表、 パ ラ レル処理を活用 し てい ま す。 こ れ ら の技法はすべて、 集中的な問合せには有益ですが、 それぞれに欠点 も あ り ます。 た と えば、 索引付けは確かに問合せを よ り 迅速に完了 さ せ る ために役立つ場合 があ り ますが、 それには よ り 多 く の格納領域を必要 と し 、 挿入、 更新、 削除、 バル ク ロ ー ド の操作の妨げにな り (元にな る 表だけでな く 索引 も 保持す る 必要があ る ため)、 断片化が進む と パフ ォ ーマ ン ス が低下す る 可能性があ り ます。 さ ら に、 ビ ジネ ス イ ン テ リ ジ ェ ン ス と 経営分析の場合は、 非定型の問合せが実行 さ れ る ため、 ど の列に索引 を付け る 必要があ る か予測す る こ と はほぼ不可能です。 そのため表に索引を付けすぎ る か (そ し て負荷 と 保持の問題を引 き 起 こ すか)、 ま たは適切に索引を付け ら れず、 多 く の問合せでは期待す る 時間 よ り も 終了がかな り 遅 く な り ます。 特に分析用に設計 さ れた列指向デー タ ベース は、 行ではな く 列に基づいてデー タ を保 存、 管理、 照会す る こ と で、 従来型の RDBMS の制約を な く し ます。 行全体ではな く 、 問合せで指定 さ れた必要な列だけにア ク セ スす る ため、 I/O ア ク テ ィ ビ テ ィ も 全体的 な問合せ応答時間 も 大幅に削減 さ れ ます。 その結果、 中程度の情報量 (数十ま たは数 百 GB) で も 大量のデー タ (数 TB) に対 し て も 、 標準的な RDBMS に必要な時間の何 分の 1 かの時間で照会 し 問合せ結果を戻せます。 従来の行ベース の RDBMS ではな く 分析用に設計 さ れたデー タ ベース を選択す る こ と で得 ら れ る 明 ら かな メ リ ッ ト がい く つかあ り ます。 列指向デー タ ベース についての レ ポー ト で、 Philip Howard 氏 (Bloor Research の リ サーチデ ィ レ ク タ ) は次の よ う に述 べてい ます。 「列のほ う が低 コ ス ト であ り 、 かつ少ない占有領域で、 優れたパフ ォーマ ン ス を実現す る 。 問合せのパフ ォ ーマ ン ス に深 く 関心を持っ てい る 企業が、 列ベー ス の ソ リ ュ ーシ ョ ン を なぜ検討 し ないのか理解 し 難い。」1 1. Philip Howard、 『What's Cool About Columns』、 Bloor Research、 2008 年 3 月。 分析用デー タ ベース InfiniDB の概要 3 InfiniDB の主な機能 分析用デー タ ベース InfiniDB は、 読取 り のみの Web アプ リ ケーシ ョ ン、 デー タ マー ト 、 デー タ ウ ェ アハ ウ ス、 その他の ビ ジネ ス イ ン テ リ ジ ェ ン ス、 分析、 ま たは問合せに重点を 置いた使用事例な ど、 集中的な読取 り が発生す る 環境でパフ ォ ーマ ン ス を向上 さ せ る こ と を目的 と し た、 様々な機能を提供 し ます。 InfiniDB は無償のオープ ン ソ ース ソ フ ト ウ ェ ア ( コ ミ ュ ニ テ ィ 版) のデー タ ベース を提供 し てい ます。 こ れは、 単一サーバー上で動作 し 、 マルチ CPU やマルチ コ ア を搭載す る 今 日のマシ ンの メ リ ッ ト を活用 し て、 問合せ と 書込みを並行 し てマルチ ス レ ッ ド 方式で処理 で き る よ う に設計 さ れてい ます。 オープン ソ ース InfiniDB サーバーの主な機能は次の と お り です。 列指向アーキ テ ク チ ャ : InfiniDB では、 従来の行ベース の形式ではな く 、 列ベース のアーキ テ ク チ ャ を採用 し てい ます。 そのため、 InfiniDB は、 200-300GB か ら 数 TB も の情報を、 行指向デー タ ベース よ り 高速に任意の場所か ら 読み取 る 必要があ る 問合せに適 し てい ます。 マルチ ス レ ッ ド 設計 : InfiniDB はマルチ ス レ ッ ド 設計であ る ため、 今日の新 し いマ ルチ CPU やマルチ コ アベース のハー ド ウ ェ ア を活用で き ます。 CPU や コ アの数が 増え る ほ ど InfiniDB のパフ ォーマ ン ス は向上 し 、 アプ リ ケーシ ョ ン を修正す る 必要 はあ り ません。 垂直お よ び水平の自動パーテ ィ シ ョ ン化 : 列指向の InfiniDB は、 垂直パーテ ィ シ ョ ン化を透過的に使用 し てデー タ を格納 し 、 問合せに必要な列だけ を読み取 り ます。 ただ し 、 ス ト レージの特別な配置や設計を必要 と せずに、 論理的な水平レ ン ジ パーテ ィ シ ョ ン化 も 使用で き ます。 垂直パーテ ィ シ ョ ン化 と 論理的な水平レ ン ジ パーテ ィ シ ョ ン化の両方を使用す る こ と で、 InfiniDB はど ち ら の方向 (列 と 行) で も I/O を削減で き ます。 垂直お よ び水平のパーテ ィ シ ョ ン化は、 いずれ も InfiniDB デー タ ベース に よ っ て自動的に処理 さ れ る ため、 ユーザーの介入は不要です。 高レベルの同時実行機能 : 同時実行に関 し ては、 InfiniDB はサーバーマシ ンの処理 能力に よ っ てのみ制限 さ れ、 理論上の制限はあ り ません。 高速デー タ ロ ーダー : InfiniDB は従来型の挿入、 更新、 削除処理をサポー ト し てい ますが、 大量のデー タ を ロ ー ド す る には高速 ロ ー ド ユーテ ィ リ テ ィ を利用で き ま す。 InfiniDB の ロ ーダーを使用す る と 、 TB 単位のデー タ を従来型の方法 よ り は る かに高速に InfiniDB デー タ ベース に ロ ー ド で き ます。 DML のサポー ト : デー タ の高速バル ク ロ ー ド のサポー ト に加え て、 InfiniDB は DML (挿入、 更新、 削除) 操作 も すべてサポー ト し ます。 ト ラ ンザ ク シ ョ ンのサポー ト :InfiniDB デー タ ベース は ACID 準拠の ト ラ ンザ ク シ ョ ン をサポー ト し ます。 ト ラ ンザ ク シ ョ ンは簡単に コ ミ ッ ト ま たは ロ ールバ ッ ク す る こ と がで き 、 競合の解決手段 と し てデ ッ ド ロ ッ ク 検出 も サポー ト し ます。 ク ラ ッ シ ュ か ら の リ カバ リ : InfiniDB には ク ラ ッ シ ュ か ら の リ カバ リ 機能があ り ま す。 シ ス テ ム ク ラ ッ シ ュ が発生す る と 、 InfiniDB は自動的にデー タ の整合性を保持 し 、 シ ス テ ム再起動時に ロ ールフ ォ ワー ド と ロ ールバ ッ ク の操作に よ っ てデー タ ベース を一貫 し た状態に戻す よ う サポー ト し ます。 4 分析用デー タ ベース InfiniDB の概要 MVCC 設計 : InfiniDB は多版型同時実行制御 (MVCC) つま り 「ス ナ ッ プシ ョ ッ ト 読取 り 」 機能をサポー ト し てい る ため、 問合せ操作が表でブ ロ ッ ク さ れ る こ と はあ り ません。 表は常に、 その問合せを発行 し た と き に存在 し ていたデー タ を参照 し ます。 索引付けが不要 : InfiniDB は垂直パーテ ィ シ ョ ン化 と 論理的な水平パーテ ィ シ ョ ン化の両方を透過的に使用す る ため、 索引付けは不要です。 本質的に、 列 指向デー タ ベース のデー タ が索引にな り ます。 ま た、 InfiniDB はエ ク ス テ ン ト マ ッ プ と い う 小 さ い重要な構造を自動的に保持 し て、 I/O を削減す る ために利 用 し ます。 エ ク ス テ ン ト マ ッ プに よ っ て手動に よ る デー タ のパーテ ィ シ ョ ン化 も 不要にな り ます。 保守の軽減 : 表の索引付けが不要にな る ほか、 InfiniDB には、 マテ リ ア ラ イ ズ ド ビ ュ ー、 サマ リ ー表な ど の、 パフ ォーマ ン ス を向上 さ せ る ためのオブジ ェ ク ト も 不要です。 こ れは、 一般的なデー タ ベース で必要 と さ れ る 管理 と 保守の作 業を不要に し 、 シ ス テ ム全体の複雑 さ を軽減す る ために も 役立ち ます。 デ ィ ク シ ョ ナ リ の文字列の圧縮 : InfiniDB は ト ー ク ンデ ィ ク シ ョ ナ リ 方式に よ っ て 9 バ イ ト 以上の固定長文字列 と 8 バ イ ト 以上の可変長文字列を管理 し ま す。 列フ ァ イ ルには、 長い文字列を含む個別のデ ィ ク シ ョ ナ リ フ ァ イ ルへの ト ー ク ン (ポ イ ン タ ) が格納 さ れ ます。 表内で重複 し た文字列値はデ ィ ク シ ョ ナ リ の 1 つの場所に、 共有文字列エ ン ト リ を指す重複 し た ト ー ク ン と と も に格 納 さ れます。 表定義変更のサポー ト : ALTER TABLE コ マ ン ド を使用 し て表に対 し て列を追 加お よ び削除す る こ と も で き 、 オ ン ラ イ ン状態で列を追加す る 機能 も 特別にサ ポー ト さ れてい ます。 パフ ォ ーマ ン ス診断 : パフ ォ ーマ ン ス チ ュ ーニ ン グ を支援す る ため、 InfiniDB には監視 と 診断のユーテ ィ リ テ ィ が付属 し てい ます。 こ れは、 ユーザーがデー タ ベース を監視 し 、 実行が遅い SQL の ト ラ ブルシ ュ ーテ ィ ン グ を行 う ために 役立ち ます。 MySQL フ ロ ン ト エ ン ド : InfiniDB はフ ロ ン ト エ ン ド に MySQL を利用 し ます。 そ のため、 MySQL に精通 し たユーザーであれば、 InfiniDB で、 す ぐ に生産性を向 上 さ せ る こ と がで き ます。 MySQL を よ く 知 ら ないユーザー も 、 MySQL は ANSI が定め る 標準 SQL 操作のほぼすべて をサポー ト し てい る ため、 容易に習得で き ます。 さ ら に、 MySQL と 他のベン ダーに よ っ て無償の GUI ツールが多数提 供 さ れてお り 、 InfiniDB デー タ ベース の開発 と 管理に使用で き ます。 InfiniDB サーバーのオープ ン ソ ース版の他に、 Calpont は製品版のデー タ ベース も 提供 し てい ます。 InfiniDB Enterprise では、 次に示す拡張機能を提供す る 、 有償の ス ケール ア ウ ト オプシ ョ ン が追加 さ れ ます。 圧縮 と リ アル タ イ ム解凍 : InfiniDB は優れた圧縮機能を提供す る と と も に、 デ ィ ス ク か ら の読取 り のパフ ォーマ ン ス を最適化す る 圧縮方法を採用 し てい ま す。 こ れに よ っ て、 I/O バ ウ ン ド のシ ス テ ム で、 デ ィ ス ク か ら の読取 り のパ フ ォーマ ン ス を向上 さ せ る こ と がで き ます。 圧縮はデフ ォ ル ト で有効にな っ て い ますが、 イ ン ス タ ン ス レベル、 表レベル、 列レベルで有効 と 無効を切 り 換え 分析用デー タ ベース InfiniDB の概要 5 る こ と がで き ます。 列指向の ス ト レージでは、 類似 し たデー タ が各列フ ァ イ ルに 格納 さ れ る ため、 優れた圧縮性が実現 さ れ ます。 パーテ ィ シ ョ ン の無効化 と ド ロ ッ プ : InfiniDB は、 DBA がパーテ ィ シ ョ ンにあ ら か じ め名前を付けた り 定義 し た り す る 必要がない よ う に、 自動パーテ ィ シ ョ ン化を 採用 し てい ます。 パーテ ィ シ ョ ン を ド ロ ッ プす る と き は、 show partitions コ マ ン ド に よ っ て、 デー タ の各パーテ ィ シ ョ ン に存在す る 値の範囲を表示 し ます。 業務に関連す る 行がな く な っ たパーテ ィ シ ョ ンは、 無効に し てデー タ を論理的に 削除す る か、 ま たは ド ロ ッ プ し て関連す る フ ァ イ ル と と も に削除 し ます。 ユーザー定義関数 (UDF) : InfiniDB では、 InfiniDB エ ン ジ ン内に統合 さ れた関数 と し て実行で き る 、 完全な並行分散型の UDF を作成で き ます。 こ れに よ っ て、 InfiniDB の統合マ ッ プ リ ダ ク シ ョ ン機能を最大限に活用 し た カ ス タ ム関数を作成 し 、 分散レ イ ヤー内の利用可能なすべての コ アにカ ス タ マ イ ズ し た機能を分散で き ます。 大規模パ ラ レ ル処理 (MPP) 対応 : InfiniDB は複数の汎用ハー ド ウ ェ アマシ ン を使 用 し て、 総合的なパフ ォーマ ン ス を リ ニ アに向上 さ せ る こ と がで き ます。 InfiniDB 構成に安価なハー ド ウ ェ ア を追加 し てデー タ ベース の処理能力を向上 さ せ る こ と が可能で、 新 し い ノ ー ド を追加す る だけで応答時間を半分に短縮で き る 場合 も あ り ます。 こ れに よ っ て、 増大す る デー タ 量への対応、 増加す る ユーザーア ク テ ィ ビ テ ィ への対応、 ま たは総合的なパフ ォ ーマ ン ス目標達成のための調整が容易に な り ます。 さ ら に、 InfiniDB シ ス テ ム を停止ま たはオ フ ラ イ ンにす る 必要がない、 動的な方法で新 し い ノ ー ド を追加で き ます。 シ ェ アー ド ナ ッ シ ン グ分散デー タ キ ャ ッ シ ュ :複数 ノ ー ド に よ る InfiniDB 構成では、 デー タ は様々な ノ ー ド と そのデー タ キ ャ ッ シ ュ に分散 さ れます。 ノ ー ド 間でデー タ を共有す る こ と はあ り ませんが、 問合せのためにデー タ を読み取 る と き は、 InfiniDB MPP アーキ テ ク チ ャ 内のすべての ノ ー ド がア ク セ ス さ れます。 つま り 、 InfiniDB は、 すべての参加 ノ ー ド が並行 し て分散形式でア ク セ スす る 、 1 つの大 き な論理デー タ キ ャ ッ シ ュ を作成す る と 考え ら れ ます。 こ れに よ っ て、 十分な数の ノ ー ド と 豊富な メ モ リ ーがあれば、 InfiniDB は文字通 り 、 大規模なデー タ ベース を キ ャ ッ シ ュ で き ます。 自動フ ェ イ ルオーバー : InfiniDB のアーキ テ ク チ ャ には、 ユーザー問合せの管理 と 実際のデー タ ベース I/O 操作を処理す る ソ フ ト ウ ェ アモジ ュ ール用に、 組み込み の自動フ ェ イ ルオーバー機能が含まれてい ます。 同時実行の自動ス ケールア ウ ト : 構成に ノ ー ド を追加す る と 、 自動的に 1 台以上の マシ ンに同時実行を ス ケールア ウ ト で き ます。 ソ フ ト ウ ェ アパ ッ チの自動管理 : 複数の InfiniDB サーバーにパ ッ チ ま たはア ッ プグ レー ド を適用す る 必要があ る 場合、 自動処理がア ッ プグ レー ド が適用 さ れた最初 の ノ ー ド か ら ソ フ ト ウ ェ ア を取得 し 、 他のすべての参加 ノ ー ド を自動的にア ッ プ グ レー ド し ます。 こ こ で説明 し たすべての機能が、 分析用デー タ ベースやデー タ ウ ェ アハ ウ ス を設計 し 実装 す る ための専門知識を持たない初心者で も 、 高速に動作す る デー タ マー ト 、 デー タ ウ ェ ア ハ ウ ス、 その他の分析用デー タ ベース を作成 し 管理で き る よ う に支援 し ます。 6 分析用デー タ ベース InfiniDB の概要 サポー ト するハー ド ウ ェ ア と ソ フ ト ウ ェ ア InfiniDB デー タ ベース は次のハー ド ウ ェ ア と ソ フ ト ウ ェ アに よ る 構成を サポー ト し ま す。 Intel お よ び AMD の汎用ハー ド ウ ェ ア、 64 ビ ッ ト 次の Linux Red Hat Enterprise CentOS Debian Ubuntu AWS (Amazon) EC2 分析用デー タ ベース InfiniDB の概要 7 8 分析用デー タ ベース InfiniDB の概要 第2章 InfiniDB のアーキテ ク チ ャ こ の項では、 InfiniDB のアーキ テ ク チ ャ お よ びデー タ ベース を構成す る 様々な コ ン ポーネ ン ト について説明 し ます。 InfiniDB の概要 InfiniDB のアーキ テ ク チ ャ は様々な コ ン ポーネ ン ト で構成 さ れてお り 、 すべての コ ン ポーネ ン ト が連携 し て InfiniDB デー タ ベース を構成 し てい ます。 こ れ ら の コ ン ポーネ ン ト には次の も のがあ り ます。 ユーザーモジ ュ ール : ユーザーモジ ュ ールは、 小 さ い MySQL イ ン ス タ ン ス (個 別にデ ィ レ ク タ モジ ュ ール と 呼ばれ る こ と も あ る )、 お よ び同時実行ス ケー リ ン グ を処理す る 多 く の InfiniDB プ ロ セ ス で構成 さ れてい ます。 ま た、 ユーザー モジ ュ ールは、 SQL リ ク エ ス ト を分割 し て 1 つ以上のパフ ォ ーマ ン ス モジ ュ ー ルに分散 し ます。 パフ ォーマ ン ス モジ ュ ールに よ っ て、 リ ク エ ス ト さ れたデー タ が メ モ リ ーキ ャ ッ シ ュ ま たはデ ィ ス ク のいずれかか ら 実際に取得 さ れます。 最後に、 ユーザーモジ ュ ールは、 関連す る パフ ォ ーマ ン ス モジ ュ ールか ら のす べての問合せ結果を ま と め、 包括的な問合せ結果セ ッ ト を形成 し てユーザーに 返 し ます。 InfiniDB Enterprise の構成には複数のユーザーモジ ュ ールが存在す る 可能性があ る こ と に注意 し て く だ さ い。 こ の構成では、 高可用性に対応 し た構 成お よ び問合せの ワー ク ロ ー ド バ ラ ン シ ン グ用の方法を実現す る こ と がで き ま す。 パフ ォ ーマ ン ス モジ ュ ール : パフ ォ ーマ ン ス モジ ュ ールは、 デー タ の格納、 取 得お よ び管理、 問合せ操作に対す る ブ ロ ッ ク リ ク エ ス ト の処理、 お よ び問合せ リ ク エ ス ト を フ ァ イ ナ ラ イ ズす る ためにユーザーモジ ュ ールへのデー タ の引渡 し を行い ます。 パフ ォ ーマ ン ス モジ ュ ールは、 デ ィ ス ク か ら デー タ を選択 し て、 パフ ォーマ ン ス モジ ュ ールが存在す る サーバーの一部であ る シ ェ アー ド ナ ッ シ ン グ方式のデー タ キ ャ ッ シ ュ にキ ャ ッ シ ュ し ます。 InfiniDB Enterprise は、 ユーザーが必要な数のパフ ォ ーマ ン ス モジ ュ ールを構成で き る よ う にす る こ と で MPP の メ リ ッ ト を実現 し てい ます。 追加 さ れた各パフ ォ ーマ ン ス モ ジ ュ ールに よ っ て、 デー タ ベース全体にキ ャ ッ シ ュ が追加 さ れ、 処理能力が高 ま り ます。 ス ト レージ : InfiniDB では、 ロ ーカル ス ト レージ ま たは共有ス ト レージ (SAN な ど) のいずれか を使用 し てデー タ を格納で き ます。 ユーザーは、 1 つのみの サーバーを InfiniDB サーバー と し て動作 さ せ、 すべて を構成 し てそのサーバー 上で実行す る か、 ま たは複数のサーバーに ス ケールア ウ ト し て、 シ ェ アー ド ナ ッ シ ン グのアーキ テ ク チ ャ を構成で き ます。 InfiniDB のアーキテ ク チ ャ 9 InfiniDB デー タ ベース には、 設計可能な多 く の構成があ り ます。 オープ ン ソ ース の InfiniDB コ ミ ュ ニ テ ィ 版のデー タ ベース は次の よ う に示す こ と がで き ます。 前述の構成では、 すべてのモジ ュ ールが同 じ サーバーで動作 し 、 マシ ン上のすべての CPU 処理能力を活用 し て ス ケールア ッ プ し た処理能力を利用で き ます。 MPP ス ケールア ウ ト オプシ ョ ン を使用す る 製品版の InfiniDB Enterprise には、 設計可能な 多 く の構成があ り ます。 その 1 つが共有デ ィ ス ク アーキ テ ク チ ャ です。 10 InfiniDB のアーキテ ク チ ャ 前述の構成では、 同時実行ス ケールア ウ ト はユーザーモジ ュ ール ノ ー ド を追加す る こ と で実現 さ れてい ますが、 I/O ス ケールア ウ ト はパフ ォ ーマ ン ス モジ ュ ール ノ ー ド を 追加す る こ と で実現 さ れてい ます。 ユーザーモジ ュ ール と パフ ォ ーマ ン ス モジ ュ ールは互いに近接 し た場所にあ る 場合 も あれば、 異な る デー タ セ ン タ ーお よ び地理的な場所に分け ら れてい る 場合 も あ る こ と に注意 し て く だ さ い。 InfiniDB のアーキテ ク チ ャ 11 InfiniDB の コ ンポーネ ン ト こ の項では、 InfiniDB デー タ ベース の主要な各 コ ン ポーネ ン ト お よ びデー タ ベース の動作 全体に影響す る 関連構造について詳 し く 説明 し ます。 ユーザーモ ジ ュ ール 簡単に説明す る と 、 InfiniDB ユーザーモジ ュ ールは、 エ ン ド ユーザーの問合せ操作の管理 お よ び制御を行い ます。 各問合せの状態を維持 し 、 問合せの代わ り に 1 つ以上のパフ ォ ー マ ン ス モジ ュ ールに リ ク エ ス ト を発行 し て作業を行い、 すべての関連パフ ォ ーマ ン ス モ ジ ュ ールの結果セ ッ ト を集計 し て最終的にエ ン ド ユーザーに返す結果セ ッ ト にす る 問合せ を実行 し ます。 デ ィ レ ク タ モ ジ ュ ールおよび MySQL イ ン タ フ ェ ース InfiniDB ユーザーモジ ュ ールの個別の コ ン ポーネ ン ト はデ ィ レ ク タ モジ ュ ール と 呼ばれ る 場合があ り ます。 基本的に、 こ れは InfiniDB が次の基本機能の実行に利用す る MySQL イ ン ス タ ン ス です。 接続の検証 SQL 文の解析 一般的な SQL 計画の生成 最終結果セ ッ ト の配付 こ の コ ン ポーネ ン ト 内で、 InfiniDB はサーバーを管理す る ためのい く つかのプ ロ セ ス を提 供 し ます。 プ ロ セ ス マネージ ャ (ProcMgr) はすべての InfiniDB プ ロ セ ス の起動、 監視お よ び再起動を行い ます。 ま た、 各マシ ン上でプ ロ セ ス モニ タ ー (ProcMon) と 呼ばれ る 別 のプ ロ セ ス を使用 し て InfiniDB プ ロ セ ス を追跡 し ます。 InfiniDB では、 MySQL 形式の問合せ計画を利用す る 多 く の接続 ラ イ ブ ラ リ を使用 し て問合 せ計画を InfiniDB 形式に変換 し ます。 InfiniDB 形式 も 基本的には解析ツ リ ーですが、 ユー ザーモジ ュ ールで解析ツ リ ーを InfiniDB ジ ョ ブ リ ス ト に変換す る と き に役立つ よ う にオプ テ ィ マ イ ザか ら 実行 ヒ ン ト が追加 さ れ ます。 ま た、 InfiniDB 用の MySQL への MySQL ス ト レージエ ン ジ ン API (ハン ド ラ ) イ ン タ フ ェース を提供す る MySQL コ ネ ク タ ラ イ ブ ラ リ (libcalmysql.so) も あ り ます。 12 InfiniDB のアーキテ ク チ ャ 主要なユーザーモ ジ ュ ール操作 ユーザーモジ ュ ールは、 InfiniDB デー タ ベース に対 し て次の主要な機能を実行 し ます。 InfiniDB ジ ョ ブ リ ス ト への MySQL 計画の変換 InfiniDB シ ス テ ム カ タ ロ グか ら の InfiniDB OID (オブジ ェ ク ト ID) の検索の実行 不要なエ ク ス テ ン ト の除外に よ っ て実現 さ れ る I/O の削減のためのエ ク ス テ ン ト マ ッ プ (詳細は こ のマニ ュ アルの後半を参照) の検査 パフ ォ ーマ ン ス モジ ュ ールへの指示 (「プ リ ミ テ ィ ブ操作」 と も 呼ばれ る ) の 発行 必要に応 じ たハ ッ シ ュ 結合の実行 (結合での小 さ い方の表のサ イ ズに基づ く )。 処理が必要なハ ッ シ ュ マ ッ プ をパフ ォーマ ン ス モジ ュ ールに送信す る こ と に よ る 、 分散 さ れたハ ッ シ ュ 結合の管理の支援 ハ ッ シ ュ 結合の後に発生す る 表を ま たいだ関数お よ び式の実行 パフ ォ ーマ ン ス モジ ュ ールか ら のデー タ の受信お よ び必要に応 じ たパフ ォ ーマ ン ス モジ ュ ールへの返信 すべての集計処理お よ び重複行の削除処理に対す る 補足ス テ ッ プの実行 MySQL イ ン タ フ ェースへのデー タ の返信 ユーザーモジ ュ ールの主要な ジ ョ ブは同時実行ス ケー リ ン グの処理です。 デー タ ベー ス フ ァ イ ルに対 し て直接処理が行われ る こ と はないため、 デー タ ベース フ ァ イ ルの可 視性 も 必要 と さ れ ません。 マシ ンの RAM を一時的に使用 し て部分的な問合せ結果を 集計 し 、 最終的にユーザーに返 さ れ る 包括的な応答に し ます。 こ の時点で、 問合せは 1 つのユーザーモジ ュ ールにのみ存在 し ますが、 利用可能なすべてのパフ ォ ーマ ン ス モジ ュ ールに問合せを ブ ロ ー ド キ ャ ス ト し て実際の I/O 動作を ス ケールア ウ ト で き ま す。 ユーザーモ ジ ュ ールのプ ロ セス ユーザーモジ ュ ールには、 実行マネージ ャ (ExeMgr)、 DML マネージ ャ (DMLProc)、 DDL マネージ ャ (DDLProc) お よ び イ ン ポー ト 分散マネージ ャ (cpimport) と い う 、 い く つかのプ ロ セ ス が含まれてい ます。 ExeMgr は、 TCP/IP ポー ト でデ ィ レ ク タ モ ジ ュ ール (MySQL イ ン ス タ ン ス) の問合せ解析ツ リ ーを リ ス ニ ン グ し ます。 ExeMgr は、 問合せ解析ツ リ ーを InfiniDB ジ ョ ブ リ ス ト (問合せへの応答に必要な一連の指示) に変換 し ます。 ExeMgr は、 問合せ解析ツ リ ーを移動 し なが ら 、 ジ ョ ブ ス テ ッ プ を繰 返 し 生成 し て ジ ョ ブ リ ス ト の最適化お よ び再最適化を行い ます。 ジ ョ ブ ス テ ッ プの主 要な カ テ ゴ リ は、 列フ ィ ル タ の適用、 表結合の処理お よ び返 さ れた列の投影です。 DMLProc お よ び DDLProc は、 適切なパフ ォ ーマ ン ス モジ ュ ールに DML お よ び DDL を分散 し ます。 cpimport は、 ユーザーモジ ュ ールで実行 さ れてい る 場合に、 パフ ォー マ ン ス モジ ュ ールに ソ ース フ ァ イ ルを分散 し ます。 計画内の各 ノ ー ド は、 ジ ョ ブ リ ス ト 自体に よ っ て並行 し て実行 さ れます。 ノ ー ド は、 ユーザーモジ ュ ール全体、 パフ ォ ーマ ン ス モジ ュ ール全体ま たは こ れ ら の組合せに対 InfiniDB のアーキテ ク チ ャ 13 し て動作で き ます。 各 ノ ー ド では、 エ ク ス テ ン ト マ ッ プ を使用 し て、 作業指示の送信先 と な る パフ ォ ーマ ン ス モジ ュ ールを決定 し ます ( こ の使用方法の詳細は、 後述のエ ク ス テ ン ト マ ッ プに関す る 説明を参照 し て く だ さ い)。 こ れ ら のすべての ノ ー ド はユーザーレベル の ス レ ッ ド です。 各ス レ ッ ド で、 デー タ お よ び利用可能な シ ス テ ム リ ソ ース の配分に基づ いて追加の ス レ ッ ド を生成で き ます。 ユーザーモ ジ ュ ールのスケールアウ ト エ ン タ ープ ラ イ ズ版の InfiniDB では、 透過的なユーザーモジ ュ ールの ス ケールア ウ ト を実 現で き ます。 管理者は、 シ ス テ ム を ス ケー リ ン グ し て よ り 多 く のユーザー接続を サポー ト で き る よ う に、 複数のユーザーモジ ュ ールが含まれ る よ う に InfiniDB シ ス テ ム を構成で き ます。 パフ ォ ーマ ン スモ ジ ュ ール こ の項では、 Calpont のパフ ォ ーマ ン ス モジ ュ ールの様々な側面について説明 し ます。 一般的な操作 パフ ォ ーマ ン ス モジ ュ ールは、 問合せ処理お よ び書込み処理において I/O 操作を実行 し ま す。 ま た、 実行す る 作業に関 し てユーザーモジ ュ ールか ら 指示を受信 し ます。 パフ ォーマ ン ス モジ ュ ールは、 問合せ自体は確認せず、 ユーザーモジ ュ ールに よ っ て与え ら れた一連 の指示のみを確認 し ます。 こ の点において、 パフ ォーマ ン ス モジ ュ ールでは、 標準的な意 味での問合せの実行ではな く 、 ブ ロ ッ ク 指向の I/O 操作の実行に重点が置かれてい ます。 InfiniDB Enterprise の大規模パ ラ レル処理ま たは ス ケールア ウ ト 機能は、 InfiniDB 構成にパ フ ォ ーマ ン ス モジ ュ ールを追加す る こ と で実現 さ れ ます。 特定の設定に ノ ー ド を追加す る と 、 異な る パフ ォ ーマ ン ス モジ ュ ール間で問合せがパ ラ レル化 さ れ る ため、 パフ ォ ーマ ン ス の リ ニ ア な向上が実現 さ れ ます。 パフ ォ ーマ ン ス モジ ュ ールには、 デー タ ベース の動作 の ス ケールア ウ ト に必要 と な る 3 つの重要な動作 (ス キ ャ ンの分散、 ハ ッ シ ュ 結合の分散 お よ び集計の分散) があ り ます。 こ れ ら 3 つの動作を組み合せ る こ と に よ っ て、 問合せが 集中す る 環境での MPP の動作をチ ュ ーニ ン グで き ます。 パフ ォ ーマ ン ス モジ ュ ールで実行 さ れ る プ ロ セ ス には、 PrimProc (問合せ実行を処理す る プ ロ セ ス)、 WriteEngineServer (パ ラ レル書込みを調整す る プ ロ セ ス) お よ び cpimport (実 際のデー タ ベース フ ァ イ ルの更新を実行す る プ ロ セ ス) の 3 つがあ り ます。 ロー ド 処理および書込み処理 パフ ォ ーマ ン ス モジ ュ ールの ノ ー ド は、 基礎 と な る 永続ス ト レージへの ロ ー ド お よ び書込 みを実行す る タ ス ク を割 り 当て ら れてい ます。 WriteEngineServer は、 各パフ ォ ーマ ン ス モ ジ ュ ールで、 DML、 DDL お よ び イ ン ポー ト を調整 し ます。 cpimport は、 ど のモジ ュ ール で実行 さ れてい る か を認識 し 、 パフ ォーマ ン ス モジ ュ ールで実行 さ れてい る 場合には、 デー タ ベースデ ィ ス ク フ ァ イ ルの実際の更新を処理 し ます。 こ の よ う に、 InfiniDB は完全 に並行な ロ ー ド 機能をサポー ト し ます。 DDL の変更は、 すべての InfiniDB メ タ デー タ を追 跡す る InfiniDB シ ス テ ム カ タ ロ グ内で維持 さ れ ます。 InfiniDB Enterprise では、 高可用性構 14 InfiniDB のアーキテ ク チ ャ 成をサポー ト す る ために書込み ノ ー ド に対 し て フ ェ イ ルオーバー機能が提供 さ れてい ます。 シ ェ アー ド ナ ッ シ ング方式のデー タ キ ャ ッ シ ュ エ ン タ ープ ラ イ ズ版の InfiniDB では、 複数のパフ ォ ーマ ン ス モジ ュ ールでシ ェ アー ド ナ ッ シ ン グ方式のデー タ キ ャ ッ シ ュ が使用 さ れてい ます。 初めてデー タ へのア ク セ ス が行われた と き に、 パフ ォ ーマ ン ス モジ ュ ールはユーザーモジ ュ ールに よ っ て指示 さ れたデー タ の量に基づいて動作 し 、 後続のア ク セ ス用に LRU ベース のキ ャ ッ シ ュ に デー タ を キ ャ ッ シ ュ し ます。 InfiniDB 専用マシ ン では、 コ ン ピ ュ ー タ の RAM の最大 85% をパフ ォ ーマ ン ス モジ ュ ールのデー タ キ ャ ッ シ ュ 専用にで き ます。 パフ ォ ーマ ン ス モジ ュ ールのキ ャ ッ シ ュ はシ ェ アー ド ナ ッ シ ン グ方式で設計 さ れてい る ため、 パフ ォ ーマ ン ス上の主要な メ リ ッ ト が少な く と も 2 つあ り ます。 1 つは、 関 連パフ ォ ーマ ン ス モジ ュ ール ノ ー ド 間でデー タ ブ ロ ッ ク の ping が発生 し ない こ と で す。 こ れは複数 イ ン タ ン ス ま たは共有デ ィ ス ク のデー タ ベース シ ス テ ム では発生す る こ と があ り ます。 も う 1 つは、 多 く のパフ ォーマ ン ス モジ ュ ール ノ ー ド がシ ス テ ムに 追加 さ れてい る ため、 デー タ ベース の全体的な キ ャ ッ シ ュ サ イ ズが大幅に大 き く な る こ と です。 こ れに よ っ て、 (場合に よ っ ては) デー タ ベース全体を RAM にキ ャ ッ シ ュ し て非常に高速な ア ク セ ス を行 う こ と がで き ます。 InfiniDB が ス タ ン ド ア ロ ンサーバーで使用 さ れ る 場合、 デー タ キ ャ ッ シ ュ は他の標準 LRU ベース のデー タ キ ャ ッ シ ュ と 同様に動作す る こ と に注意 し て く だ さ い。 単一サー バーの実装では、 存在す る パフ ォ ーマ ン ス モジ ュ ールは 1 つのみのため、 デー タ ベー ス か ら リ ク エ ス ト さ れたすべてのデー タ がキ ャ ッ シ ュ を介 し て渡 さ れ ます。 パフ ォ ーマ ン ス向上のための機能 InfiniDB Enterprise 構成へのパフ ォーマ ン ス モジ ュ ールの追加は、 追加サーバー用の ユーザーモジ ュ ールで一連の基本構成手順を実行す る と 実現 さ れ ます。 こ の処理は InfiniDB シ ス テ ム全体で透過的であ り 、 通常新 し いパフ ォ ーマ ン ス モジ ュ ール ノ ー ド は 60 秒以内に追加 さ れ ます。 パフ ォ ーマ ン スモジ ュ ールのフ ェ イルオーバー 複数 ノ ー ド の InfiniDB Enterprise のパフ ォ ーマ ン ス モジ ュ ール構成では、 すべての ノ ー ド がオ ン ラ イ ン であ り 、 特定のパフ ォ ーマ ン ス モジ ュ ールでエ ラ ーが発生 し た場 合に透過的な フ ェ イ ルオーバーが行われ る こ と がハー ト ビー ト メ カ ニズ ムに よ っ て保 証 さ れ ます。 パフ ォ ーマ ン ス モジ ュ ールが異常終了 し た場合、 パフ ォ ーマ ン ス モ ジ ュ ールを使用 し て処理中の問合せではエ ラ ーが返 さ れ ます。 パフ ォ ーマ ン ス モ ジ ュ ールを使用 し ていない問合せでは、 動作 し てい る 残 り のパフ ォ ーマ ン ス モジ ュ ー ルを使用 し て処理が続行 さ れ ます。 パフ ォ ーマ ン ス モジ ュ ールでエ ラ ーが発生 し たた めエ ラ ーを受信 し たユーザーは、 問合せを再発行 し て、 残 り のパフ ォ ーマ ン ス モ ジ ュ ールを使用 し て作業を実行で き ます。 InfiniDB のアーキテ ク チ ャ 15 フ ェ イ ルオーバーが発生 し た場合、 冗長デー タ が構成 さ れてい る か、 基礎 と な る ス ト レー ジ アーキ テ ク チ ャ がシ ェ アー ド エブ リ シ ン グ方式 (EC2 EBS、 SAN な ど) であれば、 動作 し てい る パフ ォ ーマ ン ス モジ ュ ール間でパフ ォ ーマ ン ス モジ ュ ールのデー タ ブ ロ ッ ク の マ ッ ピ ン グが再編成 さ れ、 ユーザーモジ ュ ールのエ ク ス テ ン ト マ ッ プが再評価 さ れ る こ と に よ り 、 残 り の適切なパフ ォ ーマ ン ス モジ ュ ールに問合せが送信 さ れ ます。 こ の処理は ユーザーに対 し て透過的であ り 、 手動操作は必要あ り ません。 エ ラ ーが発生 し たパフ ォ ーマ ン ス モジ ュ ールがオ ン ラ イ ン に戻 る と 、 InfiniDB はそのパ フ ォ ーマ ン ス モジ ュ ールを自動的に構成に戻 し 、 作業に使用 し 始め ます。 ユーザーモ ジ ュ ールおよびパフ ォ ーマ ン ス モ ジ ュ ールを使用 し た問合せ処理の概要 InfiniDB に よ る エ ン ド ユーザーの問合せの処理方法の ト ッ プダ ウ ンの見解は次の と お り で す。 1. MySQL イ ン タ フ ェース を介 し て リ ク エ ス ト を受信 し ます。 MySQL に よ っ て、 リ ク エ ス ト の処理に必要なすべての表に対す る 表操作が実行 さ れ、 最初の問合せ実行 計画が取得 さ れ ます。 2. InfiniDB で、 MySQL ス ト レージエ ン ジ ン イ ン タ フ ェース を使用 し て MySQL の表オ ブジ ェ ク ト が InfiniDB オブジ ェ ク ト に変換 さ れ ます。 その後、 こ れ ら のオブジ ェ ク ト はユーザーモジ ュ ールに送信 さ れます。 3. ユーザーモジ ュ ールで、 MySQL 実行計画が変換 さ れ、 こ れ ら のオブジ ェ ク ト が InfiniDB 実行計画に最適化 さ れ ます。 ユーザーモジ ュ ールで、 問合せの実行に必要 な手順お よ びそれ ら を実行す る タ イ ミ ン グが決定 さ れ ます。 4. ユーザーモジ ュ ールで、 問合せに必要なデー タ の場所に関 し てエ ク ス テ ン ト マ ッ プが参照 さ れ、 エ ク ス テ ン ト マ ッ プ内に含ま れてい る 情報に基づいてエ ク ス テ ン ト の除外が実行 さ れます。 5. ユーザーモジ ュ ールで、 1 つ以上のパフ ォ ーマ ン ス モジ ュ ールに コ マ ン ド が送信 さ れてブ ロ ッ ク の I/O 操作が実行 さ れ ます。 6. パフ ォ ーマ ン ス モジ ュ ールで、 条件の フ ィ ル タ 処理、 結合処理、 デー タ の初期集 計が実行 さ れ、 最終結果セ ッ ト の処理のためにユーザーモジ ュ ールにデー タ が送 信 さ れ ます。 7. ユーザーモジ ュ ールで、 最終結果セ ッ ト の集計が実行 さ れ、 問合せの最終結果 セ ッ ト が作成 さ れ ます。 8. ユーザーモジ ュ ールか ら 、 ユーザーに結果セ ッ ト が返 さ れ ます。 16 InfiniDB のアーキテ ク チ ャ InfiniDB のス ト レージ概念 こ の項では、 InfiniDB デー タ ベース の基本的な ス ト レージ概念について説明 し ます。 InfiniDB デー タ の一般的なス ト レージ概念 InfiniDB は列指向デー タ ベース であ る ため、 表が作成 さ れ る と 、 シ ス テ ム に よ っ て表 の列ご と に 1 つ以上の フ ァ イ ルが作成 さ れ ます。 し たが っ て、 た と えば、 3 つの列を 含む表が作成 さ れ る と 、 個別にア ド レ ス指定可能な論理オブジ ェ ク ト が少な く と も 3 つ、 SAN ま たはサーバーのデ ィ ス ク ド ラ イ ブに作成 さ れます。 次に、 InfiniDB デー タ ベース の ス ト レージ ビルデ ィ ン グブ ロ ッ ク を下位か ら 上位の順 に示 し ます。 ブ ロ ッ ク : ブ ロ ッ ク (一部の RDBMS ではページ と も 呼ばれ る ) は、 サ イ ズが 8KB の物理オブジ ェ ク ト です。 デー タ ベース内のすべてのデー タ ベース ブ ロ ッ ク は論理ブ ロ ッ ク 識別子 (LBID) で一意に識別 さ れ ます。 InfiniDB のブ ロ ッ ク サ イ ズは設定変更で き ませんが、 InfiniDB の先読み メ カ ニ ズ ム で読み取 ら れ る ブ ロ ッ ク の数はカ ス タ マ イ ズで き ます。 エ ク ス テ ン ト : エ ク ス テ ン ト は、 1 つの物理的なセグ メ ン ト フ ァ イ ル内に存在 す る 800 万行の論理的測定単位です。 エ ク ス テ ン ト は、 1 バ イ ト のデー タ 型で は 8MB、 2 バ イ ト のデー タ 型では 16MB、 4 バ イ ト のデー タ 型では 32MB、 8 バ イ ト のデー タ 型では 64MB、 可変サ イ ズのデー タ 型では 64MB が消費 さ れます。 エ ク ス テ ン ト が一杯にな る と 、 新 し いエ ク ス テ ン ト が自動的に作成 さ れます。 セグ メ ン ト フ ァ イ ル : セ グ メ ン ト フ ァ イ ルは、 列のデー タ を保持す る デ ィ ス ク 上の物理フ ァ イ ルです。 セ グ メ ン ト フ ァ イ ルがエ ク ス テ ン ト の最大数に到達す る と 、 新 し いセグ メ ン ト フ ァ イ ルが自動的に作成 さ れます。 パーテ ィ シ ョ ン : パーテ ィ シ ョ ンは、 表ま たは索引に存在す る デー タ を水平に 分割す る ためにパーテ ィ シ ョ ン化を使用す る 従来の行ベース のデー タ ベース の 概念 と は異な る 概念です。 InfiniDB では、 パーテ ィ シ ョ ンは論理オブジ ェ ク ト であ り 、 1 つ以上のセ グ メ ン ト フ ァ イ ルで構成 さ れ ます。 1 つのパーテ ィ シ ョ ン に含め る こ と がで き る セ グ メ ン ト フ ァ イ ルの数は FilesPerColumnPartition パ ラ メ ー タ に よ っ て制御 さ れます。 列に含め る こ と がで き る パーテ ィ シ ョ ン の数に制限はあ り ません。 InfiniDB のアーキテ ク チ ャ 17 InfiniDB の ス ト レージ概念は、 次の よ う な図で表す こ と がで き ます。 create table t1 (col1 int, col2 varchar(20), col3 date) engine=infinidb; デ ィ ス ク のサブシ ス テ ムへのセ グ メ ン ト フ ァ イ ルの配置に関 し て、 InfiniDB ス ト レージに 使用す る デ ィ ス ク リ ソ ース を InfiniDB 構成フ ァ イ ル内にデ ィ レ ク ト リ で指定で き ます。 InfiniDB では、 デー タ の物理的な読取 り 率が最大化 さ れ る よ う に、 指定 し たすべてのデ ィ ス ク リ ソ ース にすべてのセ グ メ ン ト フ ァ イ ルが自動的に分散 さ れます。 圧縮 と リ アル タ イ ム解凍 InfiniDB は、 優れた圧縮機能を提供す る と と も に、 デ ィ ス ク か ら の読取 り のパフ ォ ーマ ン ス を最適化す る 圧縮方法を採用 し てい ます。 こ れに よ っ て、 I/O バ ウ ン ド のシ ス テ ム で、 デ ィ ス ク か ら の読取 り のパフ ォーマ ン ス を向上 さ せ る こ と がで き ます。 圧縮はデフ ォ ル ト で有効にな っ てい ますが、 表レベル ま たは列レベルで有効 と 無効を切 り 替え る こ と がで き ます。 ま た、 変数 infinidb_compression_type を設定 し てセ ッ シ ョ ン レベルで制御す る こ と も で き ます。 デフ ォ ル ト 設定では、 リ リ ース 2.0 よ り 後の リ リ ース で作成 さ れたすべての表に対 し て圧縮が有効にな り ます。 以前の既存の表は変更 さ れない こ と に注意 し て く だ さ い。 圧縮 さ れていない以前の表を圧縮す る には、 新 し い表を 圧縮 し て作成 し た後、 デー タ を選択 し 、 高速 イ ン ポー ト メ ソ ッ ド (cpimport) を使用 し て 18 InfiniDB のアーキテ ク チ ャ 圧縮 し た新 し い表に ロ ー ド し ます。 その後、 表の名前を変更 し 、 圧縮 さ れていない表 を削除で き ます。 列指向の ス ト レージでは、 類似 し たデー タ が各列フ ァ イ ルに格納 さ れ る ため、 優れた 圧縮性が実現 さ れ ます。 ほ と ん ど のデー タ セ ッ ト で 65-95% の領域を節約す る 優れた 圧縮率が示 さ れ ますが、 実際に節約 さ れ る 領域は、 デー タ の ラ ン ダ ム さ お よ び存在す る 個別値の数に よ っ て異な り ます。 InfiniDB の圧縮方法は、 解凍速度を高速化 し てデ ィ ス ク か ら の読取 り パフ ォ ーマ ン ス が最大化 さ れ る よ う にチ ュ ーニ ン グ さ れてい ます。 こ れは、 通常 WORM (Write Once Read Many) であ る シ ス テ ム での標準的なデー タ ウ ェ アハ ウ ス の使用に理想的です。 デ ィ ス ク か ら の読取 り の高速化は、 ベス ト プ ラ ク テ ィ ス に従い、 既存のデー タ 操作を 最小化す る シ ス テ ムに適 し てい ます。 初期 ロ ー ド 後に頻繁に更新 さ れ る 列について は、 その列が未圧縮 と 定義 さ れてい る 場合のほ う が、 InfiniDB では更新のパフ ォーマ ン ス が向上す る こ と があ り ます。 列の追加ま たは削除に、 列デー タ ベース の表を再構 築す る 必要はあ り ません。 し たがっ て、 複数のオプシ ョ ン について並行 し て評価 さ れ ます。 バージ ョ ンバ ッ フ ァ および フ ァ イル InfiniDB では、 デー タ ベース の問合せで一貫 し た ビ ュ ーを提供で き る よ う に、 ト ラ ン ザ ク シ ョ ン の ロ ールバ ッ ク ア ク テ ィ ビ テ ィ を管理 し 、 デー タ ベース の MVCC (多版型 同時実行制御) ま たは 「ス ナ ッ プシ ョ ッ ト 読取 り 」 機能を提供す る バージ ョ ンバ ッ フ ァ と い う 構造が使用 さ れ ます。 InfiniDB のすべての文は、 シ ス テ ムに よ っ て シ ス テ ム変更番号 (SCN) と し て参照 さ れ る デー タ ベース の特定のバージ ョ ン (ま たは ス ナ ッ プシ ョ ッ ト ) で実行 さ れます。 こ れはバージ ョ ンバ ッ フ ァ と 呼ばれますが、 メ モ リ ー構造 と デ ィ ス ク 構造の両方で構成 さ れてい ます。 バージ ョ ンバ ッ フ ァ では、 メ モ リ ー内のハ ッ シ ュ 表を使用 し て処理中の ト ラ ンザ ク シ ョ ンの情報への メ モ リ ーア ク セ ス が提供 さ れます。 ス タ ー ト ア ッ プ時の初期サ イ ズ は 4MB です。 メ モ リ ー領域は、 ト ラ ンザ ク シ ョ ンに よ っ て変更 さ れたブ ロ ッ ク を処 理す る ために こ のサ イ ズか ら 増え てい き ます。 ハ ッ シ ュ 表の各エ ン ト リ は、 変更 さ れ た 8K のブ ロ ッ ク に対す る 40 バ イ ト の参照情報です。 バージ ョ ンバ ッ フ ァ フ ァ イ ルは、 各 DBRoot でサ イ ズが 1GB の フ ァ イ ルにデフ ォ ル ト 設定 さ れ ます。 こ れは、 VersionBufferFileSize パ ラ メ ー タ を使用 し て構成で き ます。 バージ ョ ンバ ッ フ ァ フ ァ イ ルは、 シ ス テ ム の各 DBRoot に分散 さ れ ます。 ト ラ ンザク シ ョ ン ログ ト ラ ンザ ク シ ョ ン を管理 し 、 ク ラ ッ シ ュ リ カバ リ の状況が発生 し た場合にデー タ ベー ス に対 し て ロ ールフ ォ ワー ド 操作を実行す る ために、 InfiniDB では ト ラ ンザ ク シ ョ ン ロ グが使用 さ れ ます。 ト ラ ンザ ク シ ョ ン ロ グには、 DDL 文 と DML 文のエ ン ト リ お よ びバル ク ロ ー ド 操作のマーカーが含ま れてい ます。 Linux での InfiniDB の現行の実装 では、 ト ラ ンザ ク シ ョ ン ロ グは data_mods.log と い う 名前で /var フ ァ イ ルシ ス テ ム に イ ン ス ト ール さ れてい ます。 InfiniDB のアーキテ ク チ ャ 19 バ ッ ク ア ッ プお よ び リ カバ リ の目的で、 ト ラ ンザ ク シ ョ ン ロ グのアーカ イ ブが時間ベース の間隔で実行 さ れ ます。 こ れは、 InfiniDB 構成フ ァ イ ル (TransactionArchivePeriod) で構成で き ます。 各 ト ラ ンザ ク シ ョ ン ロ グ ダ ンプの末 尾には、 マシ ン上で一意の フ ァ イ ルにな る よ う に タ イ ム ス タ ン プが追加 さ れます。 ト ラ ン ザ ク シ ョ ン ロ グがダ ン プ さ れた後、 アーカ イ ブ ロ グは切 り 捨て ら れ、 新 し いエ ン ト リ に対 応で き る よ う にな り ます。 ト ラ ンザ ク シ ョ ン ロ グの情報を表示す る ために、 ユーザーは実行 さ れた DDL 文お よ び DML 文について レ ポー ト す る ReplayTransactionLog ユーテ ィ リ テ ィ を使用す る こ と がで き ます。 バル ク ロ ー ド 操作は ト ラ ンザ ク シ ョ ン ロ グには含ま れない こ と に注意 し て く だ さ い。 エ ク ステン ト マ ッ プ 問合せの処理速度を高め る ために、 InfiniDB ではエ ク ス テ ン ト マ ッ プ と 呼ばれ る ス マー ト 構造が使用 さ れ ます。 こ れに よ っ て、 行ベース のデー タ ベース でそのアーキ テ ク チ ャ に よ る 制約を な く すために実装が必要な索引付け、 手動での表のパーテ ィ シ ョ ン化、 マテ リ ア ラ イ ズ ド ビ ュ ー、 サマ リ ー表、 お よ びその他の構造 と オブジ ェ ク ト が必要な く な り ます。 前述の と お り 、 エ ク ス テ ン ト は物理的なセグ メ ン ト フ ァ イ ル内に存在す る 領域の論理ブ ロ ッ ク で、 サ イ ズは 8-64MB の間です。 各エ ク ス テ ン ト はデ ィ ス ク 上の よ り 少ない スペー ス を使用 し て、 よ り 小 さ いデー タ 型で、 同 じ 数の行を サポー ト し てい ます。 エ ク ス テ ン ト マ ッ プには、 すべてのエ ク ス テ ン ト お よ びそれ ら に対応す る ブ ロ ッ ク (LBID) がカ タ ロ グ化 さ れます。 ま た、 エ ク ス テ ン ト マ ッ プには、 エ ク ス テ ン ト 内の列のデー タ の最小値お よ び最大値が保持 さ れ ます。 InfiniDB では、 問合せ リ ク エ ス ト を処理す る ためにエ ク ス テ ン ト マ ッ プお よ びバージ ョ ン バ ッ フ ァ の両方が使用 さ れ る こ と に注意 し て く だ さ い。 こ れ ら 2 つの構造の組合せはブ ロ ッ ク 解決マネージ ャ (BRM) と 呼ばれます。 InfiniDB Enterprise 構成では、 エ ク ス テ ン ト マ ッ プのマ ス タ ー コ ピーはプ ラ イ マ リ のパ フ ォ ーマ ン ス モジ ュ ールに存在 し ます。 シ ス テ ム の ス タ ー ト ア ッ プ時、 フ ァ イ ルは メ モ リ ーに読み取 ら れた後で、 デ ィ ザ ス タ リ カバ リ お よ びフ ェ イ ルオーバーに備え て関連す る その他すべてのユーザーモジ ュ ールお よ びパフ ォ ーマ ン ス モジ ュ ールに物理的に コ ピー さ れます。 すばや く ア ク セ ス で き る よ う に、 すべての ノ ー ド でエ ク ス テ ン ト マ ッ プが メ モ リ ーに保持 さ れ ます。 エ ク ス テ ン ト が変更 さ れ る と 、 すべての参加 ノ ー ド に も 更新がブ ロ ー ド キ ャ ス ト さ れ ます。 エ ク ス テ ン ト マ ッ プの機能 エ ク ス テ ン ト マ ッ プ を使用す る と 、 InfiniDB で問合せへの対応に必要なブ ロ ッ ク のみを取 得で き ますが、 それ と は別に論理的レ ン ジパーテ ィ シ ョ ン化 と い う メ リ ッ ト も あ り ます。 こ れは、 エ ク ス テ ン ト マ ッ プ内に含ま れてい る 各エ ク ス テ ン ト の最小値お よ び最大値に よ っ て実現 さ れ ます。 InfiniDB では、 まず (必要な列のみが ス キ ャ ン さ れ る ) 列指向の 20 InfiniDB のアーキテ ク チ ャ アーキ テ ク チ ャ に よ っ てエ ク ス テ ン ト の除外が実行 さ れ ますが、 エ ク ス テ ン ト マ ッ プ で実装 さ れ る 論理的水平パーテ ィ シ ョ ン化のため、 こ の処理は高速化 さ れ ます。 こ の自動エ ク ス テ ン ト 除外の動作は、 デー タ が頻繁に ロ ー ド さ れ、 時間に基づいて参 照 さ れ る こ と が多い一連のデー タ 、 順序付け ら れたデー タ 、 パ タ ーン化 さ れたデー タ ま たは時間ベース のデー タ に適 し てい ます。 デー タ の先頭に対す る 問合せでほぼ リ ア ル タ イ ム で ロ ー ド す る こ と に よ っ て、 すべての日時列お よ び昇順のキー値に適 し たエ ク ス テ ン ト 除外を簡単に示す こ と がで き ます。 ク ラ ス タ 化 さ れた値を含む列はエ ク ス テ ン ト 除外に適 し てい ます。 列ス キ ャ ン に フ ィ ル タ が設定 さ れてい る と き にエ ク ス テ ン ト を除外す る 場合、 その フ ィ ル タ の値は列の各エ ク ス テ ン ト に格納 さ れてい る 最小値お よ び最大値 と 比較 さ れ ます。 前述の図では、 「COL1 BETWEEN 220 AND 250」 と い う WHERE 列フ ィ ル タ が指定 さ れてい る 場合、 InfiniDB ではエ ク ス テ ン ト 1、 2 お よ び 4 が ス キ ャ ン か ら 除外 さ れ る た め、 I/O の 4 分の 3 が節約 さ れ、 多 く の比較操作が省略 さ れ ます。 エ ク ス テ ン ト に フ ィ ル タ と 一致す る 行が含まれてい る 可能性がない場合、 そのエ ク ス テ ン ト 全体が無 視 さ れ ます。 ま た、 1 つの列に対 し て除外 さ れた各エ ク ス テ ン ト に よ っ て表内の他の すべての列の同 じ エ ク ス テ ン ト も 除外 さ れ る ため、 使用で き ない フ ィ ル タ チ ェーン を I/O の必要な く 簡単に識別で き ます。 た と えば、 次の 2 つの列お よ びそれ ら のエ ク ス テ ン ト マ ッ プ情報について考え てみます。 InfiniDB のアーキテ ク チ ャ 21 「COL1 BETWEEN 220 AND 250 AND COL2 < 10000」 と い う WHERE フ ィ ル タ が指定 さ れてい る 場合、 InfiniDB では、 エ ク ス テ ン ト 1、 2 お よ び 4 が最初の列フ ィ ル タ か ら 除外 さ れます。 その後、 COL2 (つま り エ ク ス テ ン ト 3 のみ) に対 し て一致す る エ ク ス テ ン ト の みが検索 さ れ、 一致す る エ ク ス テ ン ト が存在 し ない こ と が確認 さ れ る と I/O を実行す る こ と な く 0 行が返 さ れ ます。 I/O 処理およびワー ク ロー ド の分散 InfiniDB Enterprise 構成では、 ブ ロ ッ ク はエ ク ス テ ン ト 内に割 り 当て ら れてお り 、 エ ク ス テ ン ト はデ ィ ス ク 上の連続領域 (セグ メ ン ト フ ァ イ ル) にマ ッ プ さ れ る ため、 任意の数の パフ ォ ーマ ン ス モジ ュ ールに作業を均等に分散で き ます。 た と えば、 2 つのパフ ォ ーマ ン ス モジ ュ ールシ ス テ ム では、 8 つのエ ク ス テ ン ト が含まれてい る 列の ス キ ャ ンは次の よ う に分散 さ れ ます。 22 InfiniDB のアーキテ ク チ ャ 4 つのパフ ォ ーマ ン ス モジ ュ ールシ ス テ ム では次の よ う にな り ます。 こ のアーキ テ ク チ ャ では、 InfiniDB に よ っ て作業がすべての関連パフ ォ ーマ ン ス モ ジ ュ ールに適切に分散 さ れ る ため、 多 く の問合せにおいてパフ ォーマ ン ス を リ ニ アに 向上 さ せ る こ と がで き ます。 大規模な ス キ ャ ン操作のために、 InfiniDB では、 ColScanReadAheadBlocks パ ラ メ ー タ に よ っ て構成 さ れ る 先読み メ カ ニズ ム を採用 し てい ます。 こ の メ カ ニズ ムは現 InfiniDB のアーキテ ク チ ャ 23 在 512 にデフ ォ ル ト 設定 さ れ ますが、 問合せへの対応に必要でない可能性があ る デー タ の 読取 り を回避す る ために、 InfiniDB ではプ リ フ ェ ッ チ し き い値パ ラ メ ー タ (PrefetchThreshold、 デフ ォ ル ト 設定は 5) も 使用 さ れ ます。 こ れに よ っ て、 問合せ に必要なブ ロ ッ ク の数が し き い値を下回っ てい る こ と がシ ス テ ム で確認 さ れた場合、 必要 なブ ロ ッ ク のみが読み取 ら れ ます。 も う 1 つの注意点は、 InfiniDB ではハ ッ シ ュ 結合がサポー ト さ れてい る と い う 点です。 こ のマニ ュ アルの作成時点では、 ハ ッ シ ュ 結合は MySQL ではサポー ト さ れてい ません。 ま た、 InfiniDB のハ ッ シ ュ 結合は、 複数 ノ ー ド の MPP 構成が使用 さ れてい る 場合、 分散 し て 並行で処理で き ます。 24 InfiniDB のアーキテ ク チ ャ 第3章 デー タ ベースの管理 製品版の InfiniDB には、 InfiniDB デー タ ベース に管理 コ マ ン ド を発行す る のに使用 さ れ る InfiniDB 管理 ( コ マ ン ド ) コ ン ソ ールが付属 し ます。 管理者は、 こ れを使用 し て 1 つ以上の InfiniDB サーバーの構成、 監視お よ び管理を行 う こ と がで き ます。 ユー テ ィ リ テ ィ 名は cmconsole で、 InfiniDB バ イ ナ リ に対す る 実行権限を持つ任意のオ ペレーテ ィ ン グ シ ス テ ム ユーザーが起動で き ます。 サポー ト さ れてい る コ マ ン ド に関す る ヘルプ を参照す る には、 help と 入力 し て コ マ ン ド の リ ス ト を確認 し ます。 特定の コ マ ン ド のヘルプは、 help に続けて目的の コ マ ン ド を入力す る と 参照で き ます。 デー タ ベースの管理 25 InfiniDB コ マ ン ド の全 リ ス ト については、 『Calpont InfiniDB 管理者ガ イ ド 』 を参照 し て く だ さ い。 26 デー タ ベースの管理 SQL イ ン タ フ ェ ース InfiniDB デー タ ベース に対す る SQL コ マ ン ド は、 idbmysql ユーテ ィ リ テ ィ を使用 し て入力で き ます。 こ の コ マ ン ド ラ イ ン ツールは、 用途 と 機能の点で、 標準 MySQL の mysql コ マ ン ド ラ イ ン ユーテ ィ リ テ ィ に類似 し てい ます。 すべての標準 SQL 文 (SELECT、 INSERT、 UPDATE、 DELETE、 GRANT な ど ) は、 こ のユーテ ィ リ テ ィ を介 し て発行で き ます。 InfiniDB イ ン ス タ ン スの起動および停止 関連す る すべてのユーザーモジ ュ ールお よ びパフ ォーマ ン ス モジ ュ ールの起動お よ び 停止は、 cmconsole ユーテ ィ リ テ ィ を使用 し て非常に簡単に実行で き ます。 主な 3 つの コ マ ン ド を次に示 し ます。 startsystem stopsystem restartsystem 管理者は、 基本的なオペレーテ ィ ン グ シ ス テ ムのサービ ス起動 コ マ ン ド を活用す る こ と も で き ます。 た と えば、 管理者は、 個々の Linux マシ ン で service infinidb start コ マ ン ド を発行 し て InfiniDB イ ン ス タ ン ス を起動で き ます。 service infinidb stop を実行 し た場合は InfiniDB イ ン ス タ ン ス が停止 さ れ ます。 セキ ュ リ テ ィ の概念 こ の項では、 Calpont のセキ ュ リ テ ィ の概念お よ びプ ラ ク テ ィ ス について簡単に説明 し ます。 オペ レーテ ィ ングシ ス テムのセキ ュ リ テ ィ InfiniDB は、 実行可能フ ァ イ ルお よ び基礎 と な る デー タ ベース フ ァ イ ルの保護に関 し て、 オペレーテ ィ ン グ シ ス テ ム の標準的なセキ ュ リ テ ィ を使用 し ます。 こ の レベルで は、 特殊な も のは使用 さ れ ません。 InfiniDB デー タ ベース を イ ン ス ト ール し て管理す る 管理者は、 InfiniDB バ イ ナ リ ま たはデー タ ベース フ ァ イ ルを含むフ ァ イ ルシ ス テ ム やデ ィ レ ク ト リ へのア ク セ ス権を ど のオペレーテ ィ ン グ シ ス テ ム ア カ ウ ン ト に付与す る か と い う 点に関 し て、 標準のセキ ュ リ テ ィ 手順に従 う 必要があ り ます。 デー タ ベースの管理 27 デー タ ベースのロ グ イ ン ア ク セス権 InfiniDB では、 標準 MySQL のセキ ュ リ テ ィ コ マ ン ド を使用 し て、 InfiniDB デー タ ベース に 対す る ユーザーの追加お よ び削除を行い ます。 ユーザーア カ ウ ン ト には、 シ ス テ ム全体お よ び作業す る 特定のデー タ ベースへのア ク セ ス権が付与 さ れ ます。 た と えば、 「rms」 と い う 名前の新 し いユーザーに、 シ ス テ ムへのア ク セ ス権お よ び 「db1」 と い う 名前のデー タ ベース に対す る 完全な権限を付与す る 場合、 管理者は次の コ マ ン ド を 入力 し ます。 mysql> grant all on db1.* to rms identified by ‘password’ ; Query OK, 0 rows affected (0.00 sec) InfiniDB デー タ ベース か ら ユーザーア カ ウ ン ト を削除す る 場合、 管理者は drop user コ マ ン ド を使用 し ます。 ユーザーア カ ウ ン ト の追加お よ び削除の詳細は、 最新オ ン ラ イ ン版の MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 オブ ジ ェ ク ト のセキ ュ リ テ ィ デー タ ベースやシ ス テ ムのア ク セ ス セ キ ュ リ テ ィ と 同様に、 InfiniDB では標準 MySQL の セキ ュ リ テ ィ コ マ ン ド を使用 し ます。 こ れには、 選択 さ れたユーザーア カ ウ ン ト に対 し て オブジ ェ ク ト レベルの権限を付与お よ び削除す る 、 ANSI 標準 SQL の GRANT お よ び REVOKE コ マ ン ド が含まれ ます。 た と えば、 「db1」 デー タ ベース の 「t1」 と い う 名前の表 に対す る すべての権限を 「rms」 と い う 名前のユーザーに付与す る 場合、 管理者は次の コ マ ン ド を発行 し ます。 mysql> grant all on db1.t1 to rms; Query OK, 0 rows affected (0.00 sec) GRANT お よ び REVOKE の機能の全 リ ス ト については、最新オ ン ラ イ ン版の MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 InfiniDB 構成フ ァ イル InfiniDB 構成フ ァ イ ルには、 InfiniDB デー タ ベース の操作を制御す る パ ラ メ ー タ が含ま れ ます。 こ れは XML ベース の フ ァ イ ルで、 シ ス テ ムの ス タ ー ト ア ッ プお よ びシ ャ ッ ト ダ ウ ン時に、 InfiniDB シ ス テ ム内の関連す る すべての ノ ー ド で自動的に レ プ リ ケー ト さ れます (ま たは明示的な コ マ ン ド を発行 し て フ ァ イ ルを レ プ リ ケー ト し ます)。 構成フ ァ イ ルのマ ス タ ー コ ピーは、 プ ラ イ マ リ のパフ ォーマ ン ス モジ ュ ールに保持 さ れ ます。 シ ス テ ムは、 ス タ ー ト ア ッ プ時に構成フ ァ イ ルか ら 情報を読み取っ て、 シ ス テ ムのア ク テ ィ ビ テ ィ に必 要な リ ソ ース (デー タ キ ャ ッ シ ュ な ど) を割 り 当て ます。 28 デー タ ベースの管理 構成フ ァ イ ルを テ キ ス ト エデ ィ タ で直接編集す る こ と はお薦め し ません。 かわ り に、 フ ァ イ ルを変更す る ための コ マ ン ド ラ イ ン ツール configxml が提供 さ れてい ます。 ス ク リ プ ト に対 し て各種パ ラ メ ー タ を使用 し て、 構成情報を表示お よ び設定 し ます。 た と えば、 ア ク テ ィ ブな ト ラ ンザ ク シ ョ ン ロ グのアーカ イ ブ ロ グがデ ィ ス ク に書 き 込 まれ る 時間間隔の値 (分単位で設定) を表示す る 場合、 DBA は次を入力 し ます。 [root@server1 bin]$ ./configxml.sh getconfig SystemConfig TransactionArchivePeriod Current value of SystemConfig / TransactionArchivePeriod is 10 アーカ イ ブ ロ グの時間間隔を 60 分に変更す る には、 setconfig オプシ ョ ン を使用 し て次を入力 し ます。 [root@server1 bin]$ ./configxml.sh setconfig SystemConfig TransactionArchivePeriod 60 Old value of SystemConfig / TransactionArchivePeriod is 10 /usr/local/Calpont/etc/Calpont.xml backed up to /usr/ local/ Calpont/etc/Calpont.xml.1255027253 Old value of SystemConfig / TransactionArchivePeriod is 10 SystemConfig / TransactionArchivePeriod now set to 60 Calpont で使用 さ れ る 構成変数の全 リ ス ト については、 『Calpont InfiniDB 管理者ガ イ ド 』 を参照 し て く だ さ い。 新 し いデー タ ベースの作成 InfiniDB のパ ラ ダ イ ムは、 サーバーの イ ン ス タ ン ス が実行 さ れて、 デー タ ベース がそ の イ ン ス タ ン ス の下で管理 さ れ る と い う 点で、 MySQL お よ び Microsoft SQL Server に 類似 し てい ます。 イ ン ス タ ン ス と デー タ ベース には 1 対多の関係があ り ます。 こ れ は、 イ ン ス タ ン ス と デー タ ベース が通常 1 対 1 であ る Oracle と 異な り ます。 InfiniDB では、 新 し いデー タ ベース (MySQL では ス キーマ と 呼ばれ る こ と も あ る ) を 非常に簡単に作成で き ます。 mysql> create database db1; Query OK, 1 row affected (0.00 sec) デー タ ベースの管理 29 作成後、 次の例の よ う に、 デー タ ベース に表を作成で き ます。 mysql> use db1 Database changed mysql> create table t1 (c1 int, c2 date) engine=infinidb; Query OK, 0 rows affected (0.03 sec) mysql> desc t1; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c1 | int(11) | YES | | NULL | | | c2 | date | | NULL | | | YES +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec) 管理ユーテ ィ リ テ ィ InfiniDB では、 様々な コ マ ン ド ラ イ ン管理ユーテ ィ リ テ ィ が提供 さ れてい ます。 よ く 使用 さ れ る ユーテ ィ リ テ ィ を以下に示 し ます。 colxml : バル ク ロ ー ド ユーテ ィ リ テ ィ cpimport に よ っ て使用 さ れ る ジ ョ ブ フ ァ イ ルを作成 し ます configxml.sh : 構成フ ァ イ ルのパ ラ メ ー タ の読取 り お よ び更新に使用 さ れます cpimport : デー タ ベースへのデー タ のバル ク ロ ー ド に使用 さ れ ます dumpcol : 列デー タ を出力 し ます edititem : エ ク ス テ ン ト マ ッ プの レ ポー ト お よ び編集に使用 さ れます edittxn : シ ス テ ム変更番号 (SCN) を出力 し 、 複数 ノ ー ド 構成での一貫性の検 証に役立ち ます file2oid.sh : 列のいずれかのデー タ フ ァ イ ルが指定 さ れてい る 場合に、 その列 のオブジ ェ ク ト ID を出力 し ます oid2file : オブジ ェ ク ト の最初の フ ァ イ ルのデ ィ レ ク ト リ 情報を表示 し ます replaytransactionlog : アーカ イ ブ さ れた ト ラ ンザ ク シ ョ ン ロ グお よ び現在 の ト ラ ンザ ク シ ョ ン ロ グのすべての ト ラ ンザ ク シ ョ ン情報を含むフ ァ イ ルを作成 し ます 30 デー タ ベースの管理 シ ス テムロ グ InfiniDB は、 次の よ う ない く つかの ロ グにシ ス テ ム情報を書 き 込みます。 サーバーの操作に関す る 一般情報を含む情報 ロ グ (info.log) サーバーで発生 し たエ ラ ーに関す る デー タ を含むエ ラ ー ロ グ (err.log) 将来的な シ ス テ ム エ ラ ー (サーバーのデ ィ ス ク 領域の不足な ど) を示す可能性 があ る サーバーの状態を通知す る 警告 ロ グ (warning.log) InfiniDB では、 こ れ ら の フ ァ イ ルは一般的な ロ ギ ン グデ ィ レ ク ト リ に格納 さ れ ます (た と えば、 Linux の場合、 こ の場所は /var/log/Calpont です)。 バ ッ ク ア ッ プおよび リ カバ リ こ の項では、 InfiniDB のバ ッ ク ア ッ プお よ び リ カバ リ の操作について説明 し ます。 バ ッ ク ア ッ プ手順の概要 InfiniDB シ ス テ ム の全体バ ッ ク ア ッ プ を作成す る 場合の基本的な手順は次の と お り で す。 シ ス テ ム での書込みア ク テ ィ ビ テ ィ を一時的に停止 し ます (製品版の InfiniDB でのみ利用可能な cmconsole ユーテ ィ リ テ ィ を使用 し て実行) MySQL イ ン ス タ ン ス をバ ッ ク ア ッ プ し ます InfiniDB デー タ ベース フ ァ イ ルをバ ッ ク ア ッ プ し ます InfiniDB の ト ラ ンザ ク シ ョ ン ロ グ をバ ッ ク ア ッ プ し ます シ ス テ ム での書込みア ク テ ィ ビ テ ィ を リ ス ト ア し ます (製品版の InfiniDB での み利用可能な cmconsole ユーテ ィ リ テ ィ を使用 し て実行) デー タ ベースの書込みの一時停止 InfiniDB シ ス テ ム でデー タ ベース の書込みを一時停止す る には、 cmconsole 内で次の コ マ ン ド を発行 し ます。 calpont> suspendDatabaseWrites suspenddatabasewrites Wed Sep 30 08:58:06 2009 デー タ ベースの管理 31 This command suspends the DDL/DML writes to the InfiniDB Database Do you want to proceed: (y or n) [n]: y Suspend InfiniDB Database Writes Request successfully completed MySQL イ ン ス タ ン スのバ ッ ク ア ッ プ MySQL デー タ ベース は、 い く つかの方法を使用 し てバ ッ ク ア ッ プで き ます。 方法 1 : MySQL が提供す る ユーテ ィ リ テ ィ (mysqldump や mysqlhotcopy な ど) を使用 し ま す。 InfiniDB では MySQL 内のデー タ ベースデー タ は格納 さ れないため、 MySQL イ ン ス タ ン ス のバ ッ ク ア ッ プは迅速に実行す る 必要があ る こ と に注意 し て く だ さ い。 MySQL のバ ッ ク ア ッ プお よ び リ カバ リ の詳細な処理については、 最新オ ン ラ イ ン版の MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 方法 2 : MySQL フ ロ ン ト エ ン ド には Calpont InfiniDB 固有の実装は さ れないため、 通常の手順のか わ り に、 次のデ ィ レ ク ト リ をバ ッ ク ア ッ プ し ます。 /usr/local/Calpont/mysql/db 例: cp -rp /usr/local/Calpont/mysql/db /mnt/InfiniDB/backup/ frontend 注意 : -rp オプシ ョ ンは、 デ ィ レ ク ト リ を再帰的に コ ピー し 、 所有権情報を保存 す る ための も のです。 選択 し たデー タ ベース のみをバ ッ ク ア ッ プす る 場合は、 かわ り に前述のデ ィ レ ク ト リ 内 のデー タ ベースデ ィ レ ク ト リ をバ ッ ク ア ッ プ し ます。 InfiniDB デー タ フ ァ イルのバ ッ ク ア ッ プ InfiniDB デー タ フ ァ イ ルをバ ッ ク ア ッ プす る には、 その フ ァ イ ルをバ ッ ク ア ッ プ場所に コ ピーす る か、 シ ス テ ム ま たはベン ダーが提供す る バ ッ ク ア ッ プ ま たは ス ナ ッ プシ ョ ッ ト の ユーテ ィ リ テ ィ を使用 し て InfiniDB デー タ が存在す る デ ィ レ ク ト リ の ス ナ ッ プシ ョ ッ ト を 作成 し ます。 こ れ ら の場所の次の フ ァ イ ルをバ ッ ク ア ッ プす る 必要があ り ます。 32 デー タ ベースの管理 DBRM フ ァ イ ル。 た と えば、 Linux の標準 イ ン ス ト ールの場合、 こ の フ ァ イ ルは /usr/local/Calpont/data1/systemfiles/dbrm/ デ ィ レ ク ト リ にあ り ます。 すべてのデー タ フ ァ イ ル。 た と えば、 Linux の標準 イ ン ス ト ールの場合、 すべ ての フ ァ イ ルは /usr/local/Calpont/dataN (N は data1、 data2 な ど の一 意のデ ィ レ ク ト リ を表す) にあ り ます。 ト ラ ンザク シ ョ ン ログのバ ッ ク ア ッ プ InfiniDB ト ラ ンザ ク シ ョ ン ロ グ を適切にバ ッ ク ア ッ プす る には、 管理者は次の手順を 実行す る 必要があ り ます。 現在の ト ラ ンザ ク シ ョ ン ロ グ を コ ピーす る か、 こ の フ ァ イ ルの ス ナ ッ プシ ョ ッ ト を作成 し ます。 た と えば、 Linux の標準 イ ン ス ト ールの場合、 ト ラ ンザ ク シ ョ ン ロ グは /usr/local/Calpont/data1/systemFiles/ dataTransaction にあ り ます。 ポ イ ン ト イ ン タ イ ム リ カバ リ に使用可能な アーカ イ ブ さ れた ト ラ ンザ ク シ ョ ン ロ グ フ ァ イ ルを コ ピーす る か、 こ の フ ァ イ ルの ス ナ ッ プシ ョ ッ ト を作成 し ま す。 Linux の標準 イ ン ス ト ールの場合、 こ の フ ァ イ ルは /usr/local/ Calpont/data1/systemFiles/dataTransaction/archive にあ り ます。 デー タ ベースの書込みの再開 バ ッ ク ア ッ プの完了後にデー タ ベース の書込みア ク テ ィ ビ テ ィ を再開す る には、 cmconsole 内で次の コ マ ン ド を発行 し ます。 calpont> resumeDatabaseWrites resumedatabasewrites Wed Sep 30 08:58:23 2009 This command resumes the DDL/DML writes to the InfiniDB Database Do you want to proceed: (y or n) [n]: y Resume InfiniDB Database Writes Request successfully completed デー タ ベースの管理 33 リ カバ リ 手順の概要 InfiniDB デー タ ベース の完全 リ ス ト ア を行 う には、 次の手順を実行 し ます。 MySQL イ ン ス タ ン ス を リ ス ト ア し ます InfiniDB デー タ ベース を リ ス ト ア し ます ト ラ ンザ ク シ ョ ン ロ グ を再生 し ます (手動のポ イ ン ト イ ン タ イ ム リ カバ リ で必要 な場合) MySQL イ ン ス タ ン スの リ ス ト ア MySQL デー タ ベース は様々な方法で リ ス ト アで き ますが、 最 も 一般的な方法は、 mysqldump に よ っ て作成 し たバ ッ ク ア ッ プ フ ァ イ ルを取得 し 、 mysql コ マ ン ド ラ イ ン ユーテ ィ リ テ ィ か ら その フ ァ イ ルを実行す る こ と です。 こ れに よ っ て、 その フ ァ イ ル内に 含ま れ る すべての SQL 文が実行 さ れ ます。 MySQL のバ ッ ク ア ッ プお よ び リ カバ リ の詳細な処理については、 最新オ ン ラ イ ン版の MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 InfiniDB デー タ フ ァ イルの リ ス ト ア InfiniDB デー タ フ ァ イ ルを リ ス ト アす る には、 その フ ァ イ ルをバ ッ ク ア ッ プ場所か ら コ ピーす る か、 シ ス テ ム ま たはベン ダーが提供す る ス ナ ッ プシ ョ ッ ト ユーテ ィ リ テ ィ を使用 し て、 InfiniDB デー タ が存在 し たデ ィ レ ク ト リ の ス ナ ッ プシ ョ ッ ト を リ ス ト ア し ます。 リ ス ト アす る フ ァ イ ルには次の も のがあ り ます。 DBRM フ ァ イ ル。 た と えば、 Linux の標準 イ ン ス ト ールの場合、 こ の フ ァ イ ルは / usr/local/Calpont/data1/systemfiles/dbrm/ デ ィ レ ク ト リ に戻 さ れ ま す。 すべてのデー タ フ ァ イ ル。 た と えば、 Linux の標準 イ ン ス ト ールの場合、 すべての フ ァ イ ルは /usr/local/Calpont/dataN (N は data1、 data2 な ど の一意のデ ィ レ ク ト リ を表す) に戻 さ れ ます。 InfiniDB ト ラ ンザク シ ョ ン ログの再生 InfiniDB では、 アーカ イ ブ さ れた ト ラ ンザ ク シ ョ ン ロ グお よ びア ク テ ィ ブな ト ラ ンザ ク シ ョ ン ロ グ を読み取 る ユーテ ィ リ テ ィ (ReplayTransactionLog と 呼ばれ る ) が提供 さ れてい ます。 こ のユーテ ィ リ テ ィ は、 アーカ イ ブ さ れた ト ラ ンザ ク シ ョ ン ロ グ フ ァ イ ル お よ びア ク テ ィ ブな ト ラ ンザ ク シ ョ ン ロ グ フ ァ イ ルを調べて SQL 文 (DML お よ び DDL) を生成 し ます。 こ の SQL 文は、 InfiniDB SQL イ ン タ フ ェ ース か ら の実行お よ びデー タ ベー ス内での再実行が可能な フ ァ イ ルに書 き 込ま れ ます。 34 デー タ ベースの管理 DBA ま たはシ ス テ ム管理者は、 デー タ ベース の最後の全体バ ッ ク ア ッ プ以降に発生 し てデー タ ベースへの適用が必要な ト ラ ンザ ク シ ョ ン があ る 場合に、 ReplayTransactionLog を使用 し て手動のポ イ ン ト イ ン タ イ ム リ カバ リ 操作を実行 で き ます。 現行バージ ョ ンの InfiniDB では、 ReplayTransactionLog ユーテ ィ リ テ ィ は、 利用可能なすべてのアーカ イ ブ さ れた ロ グ フ ァ イ ル と 現在の ト ラ ンザ ク シ ョ ン ロ グ を読み取っ て出力フ ァ イ ルを生成す る こ と に注意 し て く だ さ い。 DBA は、 InfiniDB SQL イ ン タ フ ェース で実行 さ れ る フ ァ イ ルに各種の文が含まれない よ う にす る 場合、 フ ァ イ ルを手動で編集 し て こ れ ら の文を削除す る 必要があ り ます。 最後のバ ッ ク ア ッ プ以降に発生 し たバル ク ロ ー ド 操作 も 再実行す る 必要があ る こ と に 注意 し て く だ さ い。 GUI ツールのサポー ト 現在、 Calpont は、 InfiniDB デー タ ベース で動作す る GUI ツールを提供 し てい ません。 一般的なデー タ モデ リ ン グ、 問合せの開発、 一般的な MySQL のセキ ュ リ テ ィ お よ び オブジ ェ ク ト 管理用に、 開発者ま たは DBA は MySQL か ら 無償の GUI ツール (MySQL Workbench お よ び古い GUI ツールのバン ド ル) を ダ ウ ン ロ ー ド で き ます。 ま た、 開発者ま たは DBA が InfiniDB デー タ ベース オブジ ェ ク ト に対 し て問合せや管理 を実行で き る ツールが多数のサー ド パーテ ィ の ソ フ ト ウ ェ アベン ダーに よ っ て作成 さ れてい ます。 SQLYog、 Quest Software (TOAD for MySQL)、 Mentat Technologies (DreamCoder for MySQL) な ど、 多数のベン ダーが、 無償版の GUI ツールお よ び高度 な機能を含む有償エデ ィ シ ョ ン の両方を提供 し てい ます。 デー タ ベースの管理 35 36 デー タ ベースの管理 第4章 オブ ジ ェ ク ト 管理 こ の項では、 InfiniDB デー タ ベース オブジ ェ ク ト の作成お よ び一般的な管理について 説明 し ます。 表 リ レーシ ョ ナルデー タ ベース であ る InfiniDB は論理表構造でデー タ を格納 し ます。 InfiniDB と 他の多 く の RDBMS の主な違いは、 InfiniDB では列指向の構造が使用 さ れ る こ と です。 こ れは、 従来の行ベース の実装 よ り 、 分析環境ま たはデー タ ウ ェ アハ ウ ス 環境に適 し てい ます。 ただ し 、 デー タ ベース表の作成に関 し ては、 InfiniDB と 他の リ レーシ ョ ナルデー タ ベース に表面上の違いはあ り ません。 表内のデー タ の作成、 移 入、 操作お よ び表示には、 ANSI 標準の SQL 文、 DDL 文ま たは DML 文が使用 さ れま す。 た と えば、 列が 3 つの 「db1」 と い う デー タ ベース内に新 し い表を作成す る 場合、 ユーザーは次の よ う に入力で き ます。 mysql> use db1 Database changed mysql> create table t1 (c1 int, c2 date, c3 varchar(20)) engine=infinidb; Query OK, 0 rows affected (3.03 sec) InfiniDB に よ っ て各表に連続 し た領域が事前に割 り 当て ら れ る ため、 create table コ マ ン ド の実行では、 表が空で作成 さ れてい る 場合で も 表に領域が事前に割 り 当て ら れない他のデー タ ベース シ ス テ ム よ り 少 し 時間がかか る こ と に注意 し て く だ さ い。 作成後、 ユーザーは Calpont のバル ク ロ ー ド ユーテ ィ リ テ ィ を使用 し て大量のデー タ を迅速に表に ロ ー ド し た り 、 MySQL ユーテ ィ リ テ ィ を使用 し てデー タ を表に ロ ー ド し た り で き ます。 ま た、 1 つの DML 文を使用 し てデー タ の挿入、 更新お よ び削除を行 う こ と も で き ます。 表への領域割当てに関 し てユーザーに よ る 操作は必要あ り ませ ん。 InfiniDB に よ る 領域の割当て方法の詳細は、 InfiniDB の ス ト レージ概念に関す る 前 述の項を参照 し て く だ さ い。 InfiniDB の現行の実装では、 主キー、 外部キーま たは列レベルの制約はサポー ト さ れ てい ません。 こ のサポー ト は今後の リ リ ース のサーバーで追加 さ れます。 オブ ジ ェ ク ト 管理 37 CREATE TABLE コ マ ン ド の処理の詳細は、 『InfiniDB SQL 構文ガ イ ド 』 ま たは MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 表の変更および削除 InfiniDB では、 表の列の追加お よ び削除に対 し て標準の ALTER TABLE コ マ ン ド がサポー ト さ れてい ます。 表の変更は、 標準の MySQL (ま たは他のデー タ ベース) よ り InfiniDB での方が短時間で実行 さ れ ます。 こ れは、 InfiniDB では索引付けが使用 さ れないので操作 時に索引の保守を実行す る 必要がないためです。 ま た、 InfiniDB では、 特別な方法を使用 し てオ ン ラ イ ン で表に新 し い列を追加す る こ と も で き ます。 操作時、 表の読取 り 操作は中断な く 続行 さ れ ます。 オ ン ラ イ ン で表に新 し い列 を追加す る ために calonlinealter 関数 コ ールが使用 さ れた後、 操作が完了す る と MySQL デー タ デ ィ ク シ ョ ナ リ が同期化 さ れます。 た と えば、 新 し い整数列 (c7) を表 (t1) にオ ン ラ イ ン で追加す る には、 ユーザーは次の コ マ ン ド を発行 し ます。 select calonlinealter('alter table t1 add column c7 int;'); alter table t1 add column c7 int comment 'schema sync only'; 表の削除は、 単純な DROP TABLE コ マ ン ド を使用 し て実行 し ます。 InfiniDB では、 表の削 除時に、 基礎 と な る 物理デー タ フ ァ イ ル も すべてサーバーか ら 削除 さ れ る ため、 後で管理 者が手動 ク リ ーン ア ッ プ を実行す る 必要はあ り ません。 ALTER TABLE お よ び DROP TABLE コ マ ン ド の処理の詳細は、 『InfiniDB SQL 構文ガ イ ド 』 ま たは MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 ス ト ア ド プ ロ シージ ャ および SQL 関数 InfiniDB では、 MySQL の ス ト ア ド プ ロ シージ ャ お よ び SQL 関数がサポー ト さ れてい ます。 ス ト ア ド プ ロ シージ ャ は、 サーバー自体に格納 さ れてい る プ ロ シージ ャ コ ー ド オブジ ェ ク ト であ り 、 デー タ のプ ロ グ ラ ム に よ る 処理の実行お よ び機密デー タ に対す る セキ ュ リ テ ィ の強化のために使用 さ れ る 場合があ り ます。 DBA は、 ス ト ア ド プ ロ シージ ャ に実行権限 を付与 し て ア ク セ スす る 表内の列お よ びそのア ク セ ス方法を制限で き ますが、 基礎 と な る 表自体は制限で き ません。 た と えば、 ユーザーが顧客番号を入力 し た と き に 「customer」 と い う 表か ら 2 つの列を取 得す る ス ト ア ド プ ロ シージ ャ を作成す る 必要があ る 場合、 DBA は次の よ う なプ ロ シー ジ ャ を作成で き ます。 delimiter // create procedure p_cust (p1 int) begin select c_name,c_address from customer 38 オブ ジ ェ ク ト 管理 where c_custkey = p1; end // delimiter ; ス ト ア ド プ ロ シージ ャ の コ ールは次の よ う に実行 し ます。 mysql> call p_cust(1); +---------------------------+--------------+ | c_name | c_address | +---------------------------+--------------+ | Customer#000000001 | IVhzIApeRb | +---------------------------+--------------+ 1 row in set (0.26 sec) ス ト ア ド プ ロ シージ ャ お よ び InfiniDB を使用す る 場合の現在の制限では、 一度に使用 で き る オープン カー ソ ルは 1 つだけです。 ま た、 SQL 関数 も 作成 し て使用で き ます。 簡単な関数の例を次に示 し ます。 mysql> CREATE FUNCTION hello (s CHAR(20)) -> RETURNS CHAR(50) DETERMINISTIC -> RETURN CONCAT('Hello, ',s,'!'); Query OK, 0 rows affected (0.00 sec) mysql> select hello('world'); +----------------+ | hello('world') | +----------------+ | Hello, world! | +----------------+ 1 row in set (0.03 sec) ス ト ア ド プ ロ シージ ャ お よ び関数の詳細は、 最新版の MySQL の リ フ ァ レ ン ス マニ ュ アルを参照 し て く だ さ い。 オブ ジ ェ ク ト 管理 39 サポー ト さ れていないデー タ ベースオブ ジ ェ ク ト 現行バージ ョ ン の InfiniDB では次のオブジ ェ ク ト はサポー ト さ れてい ません。 ト リ ガー 主キー 外部キー NOT NULL と デフ ォ ル ト 値以外の列制約 InfiniDB シ ス テム カ タ ログ InfiniDB を イ ン ス ト ールす る と 、 InfiniDB オブジ ェ ク ト に関連付け ら れてい る メ タ デー タ の追跡に使用 さ れ る 小 さ いシ ス テ ム カ タ ロ グが構成 さ れます。 こ のシ ス テ ム カ タ ロ グは、 MySQL の mysql お よ び information_schema デー タ ベース内にあ る 標準オブジ ェ ク ト と と も に使用 さ れます。 デー タ ベース名ま たは ス キーマ名は calpontsys です。 InfiniDB シ ス テ ム カ タ ロ グデー タ ベース内に含まれてい る オブジ ェ ク ト は次の と お り です。 mysql> desc systable; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | tablename | varchar(128) | YES | | NULL | | | schema | varchar(128) | YES | | NULL | | | objectid | int(11) | YES | | NULL | | | createdate | date | YES | | NULL | | | lastupdate | date | YES | | NULL | | | init | int(11) | YES | | NULL | | | next | int(11) | YES | | NULL | | | numofrows | int(11) | YES | | NULL | | | avgrowlen | int(11) | YES | | NULL | | | numofblocks | int(11) | YES | | NULL | | | autoincrement | int(11) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ 11 rows in set (0.00 sec) 40 オブ ジ ェ ク ト 管理 mysql> desc syscolumn; +-----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+-------+ | schema | varchar(128) | YES | | NULL | | | tablename | varchar(128) | YES | | NULL | | | columnname | varchar(128) | YES | | NULL | | | objectid | int(11) | YES | | NULL | | | dictobjectid | int(11) | YES | | NULL | | | listobjectid | int(11) | YES | | NULL | | | treeobjectid | int(11) | YES | | NULL | | | datatype | int(11) | YES | | NULL | | | columnlength | int(11) | YES | | NULL | | | columnposition | int(11) | YES | | NULL | | | lastupdate | date | YES | | NULL | | | defaultvalue | varchar(64) | YES | | NULL | | | nullable | int(11) | YES | | NULL | | | scale | int(11) | YES | | NULL | | | prec | int(11) | YES | | NULL | | | autoincrement | char(1) | YES | | NULL | | | distcount | int(11) | YES | | NULL | | | nullcount | int(11) | YES | | NULL | | | minvalue | varchar(64) | YES | | NULL | | | maxvalue | varchar(64) | YES | | NULL | | | compressiontype | int(11) | YES | | NULL | | | nextvalue | bigint(20) | YES | | NULL | | +-----------------+--------------+------+-----+---------+-------+ 22 rows in set (0.00 sec) オブ ジ ェ ク ト 管理 41 42 オブ ジ ェ ク ト 管理 第5章 デー タ のロー ド および操作 こ の項では、 InfiniDB デー タ ベース内でのデー タ の ロ ー ド お よ び操作について説明 し ます。 InfiniDB のバルク ローダー InfiniDB では、 InfiniDB の表にデー タ を迅速に効率 よ く イ ン ポー ト す る 高速のバル ク ロ ー ド ユーテ ィ リ テ ィ が提供 さ れてい ます。 こ のユーテ ィ リ テ ィ は、 デー タ の フ ィ ー ル ド (表内の列な ど) がデ リ ミ タ で区切 ら れたデー タ を含む任意の フ ラ ッ ト フ ァ イ ル を入力す る こ と がで き ます。 デフ ォ ル ト のデ リ ミ タ はパ イ プ (|) 文字ですが、 カ ン マ な ど、 その他のデ リ ミ タ も 使用で き ます。 InfiniDB のバル ク ロ ー ド ユーテ ィ リ テ ィ (cpimport と 呼ばれ る ) は、 InfiniDB デー タ ベースへのデー タ の イ ン ポー ト 時に次の操作を実行 し ます。 指定 さ れた フ ラ ッ ト フ ァ イ ルか ら デー タ を読み取 り ます InfiniDB の列指向の ス ト レージ設計に合 う よ う にデー タ を変換 し ます 冗長デー タ を ト ー ク ン化 し 、 論理的に圧縮 し ます デー タ をデ ィ ス ク に書 き 込みます cpimport を使用す る 最 も 一般的な方法には次の 2 つがあ り ます。 1. UM か ら : cpimport がすべてのパフ ォ ーマ ン ス モジ ュ ールに行を分散 し ます 2. PM か ら : cpimport が起動元の PM にのみ イ ン ポー ト さ れた行を ロ ー ド し ま す こ れ ら ほ ど一般的ではあ り ませんが、 cpimport には他に も 多 く のデー タ の ロ ー ド 方 法があ り ます。 cpimport の使用方法の詳細については、 『Calpont InfiniDB 管理者ガ イ ド 』 を参照 し て く だ さ い。 cpimport ユーテ ィ リ テ ィ の 2 つの主な使用手順は次の と お り です。 1. フ ラ ッ ト フ ァ イ ルか ら 複数の表にデー タ を ロ ー ド す る のに使用す る ジ ョ ブ フ ァ イ ルを作成 し ます (オプシ ョ ン) 2. cpimport ユーテ ィ リ テ ィ を実行 し て、 デー タ の イ ン ポー ト を実行 し ます デー タ のロー ド および操作 43 バル ク ロ ー ド は表への追加操作であ る ため、 処理中 も 既存のデー タ の読取 り が可能であ り 、 既存のデー タ は影響を受けない こ と に注意 し て く だ さ い。 ま た、 バル ク ロ ー ド では、 デー タ 操作が ト ラ ンザ ク シ ョ ン ロ グに書 き 込まれません。 こ れ ら の操作に ト ラ ンザ ク シ ョ ン の特性はな く 、 こ の時点ではア ト ミ ッ ク 操作 と 見な さ れ ます。 ただ し 、 情報マーカーが ト ラ ンザ ク シ ョ ン ロ グに配置 さ れ る ため、 DBA はバル ク 操作が発生 し た こ と を確認で き ます。 ロ ー ド 操作が完了す る と 、 各列フ ァ イ ルの最高水位標がア ト ミ ッ ク 操作で移動 さ れ ます。 こ のア ト ミ ッ ク 操作に よ り 、 新たに ロ ー ド さ れたデー タ を後続の問合せで読み取 る こ と が で き る よ う にな り ます。 こ の追加操作では、 読取 り 一貫性を実現で き ますが、 デー タ の ロ ギ ン グのオーバーヘ ッ ド は発生 し ません。 シ ン プルバルク ロー ド の例 DBA が 「db1」 デー タ ベース の 「t1」 表を ロ ー ド し 、 「t1.tbl」 と い う 名前の ロ ー ド フ ァ イ ルを使用す る こ と を想定 し ます。 こ の フ ァ イ ルには次のデー タ が含まれ、 パ イ プデ リ ミ タ を使用 し てデー タ が区切 ら れてい ます。 1|Smith|2000-01-01 2|Jones|2000-02-01 3|Fields|2000-03-01 4|Johnson|2000-04-01 5|Simms|2000-05-01 Calpont の現在のバージ ョ ン では、 -f パ ス名オプシ ョ ン が使用 さ れていない場合、 こ の フ ァ イ ルの場所は、 デフ ォ ル ト で現在のデ ィ レ ク ト リ に設定 さ れ ます。 現在、 ユーテ ィ リ テ ィ では <table name>.tbl のネー ミ ン グ形式がデフ ォ ル ト で設定 さ れ ます。 表の構造は次の と お り です。 mysql> desc t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | c1 | int(11) | YES | | NULL | | | c2 | varchar(20) | YES | | NULL | | | c3 | date | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.03 sec) 1 つの表のみを ロ ー ド す る 場合は、 cpimport ユーテ ィ リ テ ィ を直接 コ ールで き ます。 DBA は、 cpimport ユーテ ィ リ テ ィ (InfiniDB の bin デ ィ レ ク ト リ にあ る ) を実行 し て、 実際にデー タ を表に ロ ー ド し ます。 44 デー タ のロー ド および操作 [root@server1 test]# pwd /home/test [root@server1 bin]# /usr/local/Calpont/bin/cpimport db1 t1 t1.dbl Bulkload root directory : /home/test job description file : Job_501.xml 2009-10-06 15:08:16 (17995) INFO : successfully load job file / usr/local/Calpont/data/bulk/job/Job_501.xml 2009-10-06 15:08:16 (17995) INFO : PreProcessing check starts 2009-10-06 15:08:16 (17995) INFO : PreProcessing check completed 2009-10-06 15:08:16 (17995) INFO : preProcess completed, total run time : 0 seconds 2009-10-06 15:08:16 (17995) INFO : No of Read Threads Spawned = 1 2009-10-06 15:08:16 (17995) INFO : No of Parse Threads Spawned = 3 2009-10-06 15:08:17 (17995) INFO : For table db1.t1: 5 rows processed and 5 rows inserted. 2009-10-06 15:08:17 (17995) INFO : Bulk load completed, total run time : 1 seconds 複数の表を ロ ー ド す る 場合は、 後述す る 複数の表のバル ク ロ ー ド 例を参照 し て く だ さ い。 STDIN のバルク ロー ド の例 InfiniDB では、 cpimport を簡単に使用 し た、 標準入力か ら のデー タ のバル ク ロ ー ド がサポー ト さ れてい ます。 前述の同 じ ロ ー ド フ ァ イ ルを使用 し て、 フ ァ イ ルを cpimport プ ロ セ ス に送信で き ます。 た と えば、 最初の 100,000,000 行のみを イ ン ポー ト す る よ う に t1.tbl フ ァ イ ルを制限で き 、 こ の フ ァ イ ルを cpimport に送信 し ます。 head -100000000 t1.tbl | /usr/local/Calpont/bin/cpimport db1 t1 -s '\t' 表から 選択 し た内容のバルク挿入 標準入力は、 任意の SELECT 文か ら の出力を高速のバル ク ロ ーダーに直接送信す る た めに使用す る こ と も で き ます。 こ こ では、 デー タ 以外の書式設定を削除す る ために N フ ラ グ を使用 し て db2.source_table か ら 選択 し てい ます。 idbmysql -e 'select * from source_table;' -N db2 | /usr/local/ Calpont/bin/cpimport db1 t1 -s '\t' デー タ のロー ド および操作 45 複数の表のバルク ロー ド イ ン ポー ト ユーテ ィ リ テ ィ を使用 し て複数の表を同時に イ ン ポー ト で き ます。 シ ン プルバ ル ク ロ ー ド では、 イ ン ポー ト ご と に表が一意であ る かぎ り 、 複数のジ ョ ブ を同時に発行で き ます。 従来のバル ク ロ ー ド では、 ス キーマ内のすべての表を イ ン ポー ト す る か、 ま たは colxml で -t オプシ ョ ン を使用 し て特定の表を リ ス ト す る こ と で複数の表を イ ン ポー ト で き ます。 表お よ びジ ョ ブ ID が一意であ る かぎ り 、 従来の イ ン タ フ ェース を使用 し て複数 のジ ョ ブ を発行で き ます。 従来のバルク ロー ド の例 DBA は、 従来のバル ク ロ ー ド を使用 し て、 ス キーマ全体ま たは複数の表を 1 つのバル ク ロ ー ド ジ ョ ブで ロ ー ド す る こ と も で き ます。 た と えば、 DBA が、 「tpch2」 と い う 名前の デー タ ベース にあ る 次の表にデー タ を ロ ー ド す る と し ます。 mysql> show tables; +---------------+ | Tables_in_rms | +---------------+ | customer | | lineitem | | nation | | orders | | part | | partsupp | | region | | supplier | +---------------+ 8 rows in set (0.00 sec) ロ ー ド フ ァ イ ルでデフ ォ ル ト のパ イ プ (|) フ ィ ール ド デ リ ミ タ を使用 し 、 イ ン ポー ト デ ィ レ ク ト リ にすべての表の ロ ー ド フ ァ イ ルを配置 し てか ら 、 「tpch2」 デー タ ベース自体 に対す る ロ ー ド ジ ョ ブ用に colxml ユーテ ィ リ テ ィ を実行で き ます。 [user1@server1 bin]$ ./colxml tpch2 -j500 Running colxml with the following parameters: 2009-10-07 15:14:20 (9481) INFO : Schema: tpch2 Tables: Load Files: -b 0 -c 1048576 -d | 46 デー タ のロー ド および操作 -e -f -j -n -p -r -s -u -w -x 10 CSV 500 /usr/local/Calpont/data/bulk/job/ 5 10485760 tbl File completed for tables: tpch2.customer tpch2.lineitem tpch2.nation tpch2.orders tpch2.part tpch2.partsupp tpch2.region tpch2.supplier Normal exit. その後、 実際のバル ク ロ ー ド 操作を実行で き ます。 [user1@server1 bin]$ ./cpimport -j 500 Bulkload root directory : /usr/local/Calpont/data/bulk job description file : Job_500.xml 2009-10-07 15:14:59 (9952) INFO : successfully load job file /usr/ local/Calpont data/bulk/job/Job_500.xml 2009-10-07 15:14:59 (9952) INFO : PreProcessing check starts 2009-10-07 15:15:04 (9952) INFO : PreProcessing check completed 2009-10-07 15:15:04 (9952) INFO : preProcess completed, total run time : 5 seconds 2009-10-07 15:15:04 (9952) INFO : No of Read Threads Spawned = 1 2009-10-07 15:15:04 (9952) INFO : No of Parse Threads Spawned = 3 2009-10-07 15:15:06 (9952) INFO : For table tpch2.customer: 150000 rows processed and 150000 rows inserted. 2009-10-07 15:16:12 (9952) INFO : For table tpch2.nation: 25 rows processed and 25 rows inserted. 2009-10-07 15:16:12 (9952) INFO : For table tpch2.lineitem: 6001215 rows processed and 6001215 rows inserted. デー タ のロー ド および操作 47 2009-10-07 15:16:31 (9952) INFO : For table tpch2.orders: 1500000 rows processed and 1500000 rows inserted. 2009-10-07 15:16:33 (9952) INFO : For table tpch2.part: 200000 rows processed and 200000 rows inserted. 2009-10-07 15:16:44 (9952) INFO : For table tpch2.partsupp: 800000 rows processed and 800000 rows inserted. 2009-10-07 15:16:44 (9952) INFO : For table tpch2.region: 5 rows processed and 5 rows inserted. 2009-10-07 15:16:45 (9952) INFO : For table tpch2.supplier: 10000 rows processed and 10000 rows inserted. 2009-10-07 15:16:45 (9952) INFO : Bulk load completed, total run time : 106 seconds STDIN のバルク ロー ド の例 InfiniDB では、 標準入力か ら のデー タ のバル ク ロ ー ド がサポー ト さ れてい ます。 こ の際、 複数表の cpimport で -fSTDIN フ ラ グ を指定 し ます。 前述の同 じ ロ ー ド フ ァ イ ルを j501 コ マ ン ド で使用 し て、 フ ァ イ ルを cpimport プ ロ セ ス に送信で き ます。 た と えば、 最初の 100,000,000 行のみを イ ン ポー ト す る よ う に t1.tbl フ ァ イ ルを制限で き 、 こ の フ ァ イ ルを cpimport に送信 し ます。 head -100000000 t1.tbl | /usr/local/Calpont/bin/cpimport -j501 -s '\t' -fSTDIN 表から 選択 し た内容のバルク挿入 標準入力は、 任意の SELECT 文か ら の出力を高速のバル ク ロ ーダーに直接送信す る ために 使用す る こ と も で き ます。 こ こ では、 デー タ 以外の書式設定を削除す る ために -N フ ラ グ を使用 し て db2.source_table か ら 選択 し てい ます。 idbmysql -e 'select * from source_table;' -N db2 | /usr/local/ Calpont/bin/cpimport -j501 -s '\t' -fSTDIN デー タ ロー ド 用の MySQL ユーテ ィ リ テ ィ MySQL では、 デー タ ベース の表にデー タ を ロ ー ド す る load data infile コ マ ン ド が 提供 さ れてい ます。 こ の コ マ ン ド (ユーテ ィ リ テ ィ ) は InfiniDB でサポー ト さ れてお り 、 使用可能ですが、 InfiniDB のバル ク ロ ー ド ユーテ ィ リ テ ィ cpimport を使用 し たほ う が高 速です。 次の表を例 と し ます。 mysql> desc t3; +-------+---------+------+-----+---------+-------+ 48 デー タ のロー ド および操作 | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c1 | int(11) | YES | | NULL | | | c2 | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 次の フ ァ イ ルを ロ ー ド し ます。 [root@server1 local]# more t3.tst 1,2 2,3 3,4 次の よ う に実行 し て ロ ー ド で き ます。 mysql> load data infile '/usr/local/t3.tst' into table t3 fields terminated by ','; Query OK, 3 rows affected (0.96 sec) DML のサポー ト InfiniDB では標準 DML がサポー ト さ れてい る ため、 ユーザーは、 InfiniDB の表に対 し て SQL の INSERT、 UPDATE お よ び DELETE 文を発行で き ます。 InfiniDB は列指向 デー タ ベース であ る ため、 InfiniDB で INSERT 文お よ び DELETE 文を実行 し た場合、 行指向デー タ ベース で実行 し た場合 よ り も 、 通常は低速にな る こ と に注意 し て く だ さ い ( よ り 多 く のブ ロ ッ ク にア ク セ スす る 必要があ り ます)。 ただ し 、 UPDATE 文はか な り 高速に実行 さ れ ます。 INSERT 文の場合、InfiniDB では MySQL の複数挿入操作がサポー ト さ れ る こ と に注意 し て く だ さ い。 次の表を例 と し ます。 mysql> desc t3; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c1 | int(11) | YES | | NULL | | | c2 | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ ユーザーは次の INSERT 文を発行で き ます。 mysql> insert into t3 values (1,2),(3,4),(5,6); デー タ のロー ド および操作 49 Query OK, 3 rows affected (0.34 sec) Records: 3 Duplicates: 0 Warnings: 0 DML 構文の詳細は、 『InfiniDB SQL 構文ガ イ ド 』 を参照 し て く だ さ い。 ト ラ ンザク シ ョ ン管理 InfiniDB では、 完全な コ ミ ッ ト 、 ロ ールバ ッ ク お よ びデ ッ ド ロ ッ ク 検出機能 と と も に、 ACID 準拠の ト ラ ンザ ク シ ョ ンがサポー ト さ れてい ます。 InfiniDB のデフ ォ ル ト モー ド は、 すべての DML 文が自動的に確定 さ れ る 自動 コ ミ ッ ト です。 こ の設定は、 InfiniDB のセ ッ シ ョ ン ご と に簡単に変更で き ます。 た と えば、 次の例では自動 コ ミ ッ ト モー ド を オ フ に設 定 し 、 表を更新 し て変更を ロ ールバ ッ ク し 、 再度表を更新 し て、 デー タ ベース に対 し ト ラ ンザ ク シ ョ ン を コ ミ ッ ト し ます。 mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> select c1 from t3; +------+ | c1 | +------+ | 1 | | 2 | | 3 | | 1 | | 1 | | 3 | | 5 | +------+ 7 rows in set (0.26 sec) mysql> update t3 set c1=4; Query OK, 7 rows affected (0.26 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysql> rollback; Query OK, 0 rows affected (0.23 sec) mysql> select c1 from t3; +------+ 50 デー タ のロー ド および操作 | c1 | +------+ | 1 | | 2 | | 3 | | 1 | | 1 | | 3 | | 5 | +------+ 7 rows in set (0.26 sec) mysql> update t3 set c1=5; Query OK, 7 rows affected (0.14 sec) Rows matched: 0 Changed: 0 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.21 sec) mysql> select c1 from t3; +------+ | c1 | +------+ | 5 | | 5 | | 5 | | 5 | | 5 | | 5 | | 5 | +------+ 7 rows in set (0.14 sec) 同時実行の制御 InfiniDB では、 ページ レベルの ロ ッ ク が使用 さ れ、 分離レベルでの コ ミ ッ ト 読取 り ロ ッ ク が採用 さ れてお り 、 コ ミ ッ ト さ れたデー タ のみが読み取 ら れ る よ う に し てい ま す。 デー タ のロー ド および操作 51 InfiniDB では、 InfiniDB にバージ ョ ニ ン グ イ ン フ ラ ス ト ラ ク チ ャ を提供す る 多版型同時実 行制御 (MVCC) も 使用 さ れ ます。 こ れは、 他のデー タ ベース では 「ス ナ ッ プシ ョ ッ ト 読 取 り 」 と 呼ばれ る こ と も あ り ます。 ス ナ ッ プシ ョ ッ ト 読取 り は、 問合せが常に、 問合せが 発行 さ れた時点のデー タ を参照す る こ と を意味 し ます。 こ れに よ っ て、 問合せに関係す る すべての表のすべての列で読取 り 一貫性が実現 さ れ ます。 InfiniDB のバージ ョ ニ ン グの最 も 重要な メ リ ッ ト は、 読取 り が遮断 さ れない こ と です。 つ ま り 、 バージ ョ ニ ン グ さ れた (古い) ブ ロ ッ ク を、 あ る セ ッ シ ョ ンが更新 し てい る と き に、 同時に別のセ ッ シ ョ ンが読み取 る こ と がで き ます。 InfiniDB のすべての文は、 InfiniDB に よ っ て シ ス テ ム変更番号 (SCN) と し て参照 さ れ る デー タ ベース の特定のバージ ョ ン (ま たは ス ナ ッ プシ ョ ッ ト ) で実行 さ れます。 循環バージ ョ ンバ ッ フ ァ 、 バージ ョ ン置換 構造 (VSS) お よ びバージ ョ ンバ ッ フ ァ ブ ロ ッ ク マネージ ャ (VBBM) 構造を使用 し て、 リ ク エ ス ト さ れたブ ロ ッ ク の適切なバージ ョ ンが検索 さ れます。 こ れ ら のオブジ ェ ク ト の サ イ ズは、 予測負荷でのバ ッ フ ァ オーバー ラ ン を回避で き る よ う に構成可能です。 バージ ョ ニ ン グが ト ラ ンザ ク シ ョ ン の DML 文のみに適用 さ れ、 追加操作を使用 し て行わ れ る バル ク ロ ー ド には適用 さ れない こ と に注意 し て く だ さ い。 52 デー タ のロー ド および操作 第6章 ア プ リ ケーシ ョ ンおよびビ ジネス イ ン テ リ ジ ェ ン スの開発 こ の項では、 アプ リ ケーシ ョ ン開発お よ びビ ジネ ス イ ン テ リ ジ ェ ン ス環境での InfiniDB と の連携動作について簡単に説明 し ます。 ア プ リ ケーシ ョ ン ツールおよび BI ツールを使用 し た InfiniDB へ の接続 InfiniDB では MySQL フ ロ ン ト エ ン ド が使用 さ れ る ため、 InfiniDB への接続には任意の 標準 MySQL コ ネ ク タ を使用で き ます。 無償で入手で き る コ ネ ク タ には、 次の も のが あ り ます。 ADO.NET ODBC JDBC C++ C PHP Perl Python Ruby MySQL コ ネ ク タ は、 MySQL Web サ イ ト か ら 自由にダ ウ ン ロ ー ド し て使用で き ます。 現在の URL の場所は、 http://www.mysql.com/products/connector/ です。 ア プ リ ケーシ ョ ンおよびビ ジネス イ ン テ リ ジ ェ ン スの開発 53 アプリ ケーショ ン開発ツールおよびビジネスイ ンテリ ジェ ンスツール InfiniDB の MySQL フ ロ ン ト エ ン ド に よ り 、 InfiniDB では、 現在 MySQL をサポー ト す る ア プ リ ケーシ ョ ン開発ツール ま たはビ ジネ ス イ ン テ リ ジ ェ ン ス ツールが動作 し ます。 Eclipse、 Microsoft Visual Studio な ど、 多 く のアプ リ ケーシ ョ ン開発ツールが MySQL を サ ポー ト し てお り 、 InfiniDB で正常に動作 し ます。 現在、 MySQL に接続す る ビ ジネ ス イ ン テ リ ジ ェ ン ス ツールには、 Business Objects、 Cognos、 Microsoft Analysis Services な ど、 主要ベン ダー独自仕様の も のがすべて含まれ ま す。 Pentaho、 Jaspersoft、 Talend な ど のオープ ン ソ ース の BI ツール も Calpont で動作 し ま す。 54 ア プ リ ケーシ ョ ンおよびビ ジネス イ ン テ リ ジ ェ ン スの開発 第7章 パフ ォ ーマ ン スのチ ュ ーニ ング こ の項では、 InfiniDB デー タ ベース の監視お よ びチ ュ ーニ ン グについて説明 し ます。 監視および診断ユーテ ィ リ テ ィ 製品版の InfiniDB に含ま れ る cmconsole ユーテ ィ リ テ ィ を使用す る と 、 DBA ま たは sysadmin は、 単一ま たは複数 ノ ー ド の InfiniDB 構成で様々な監視操作を実行で き ます。 DBA は、 cmconsole ユーテ ィ リ テ ィ を使用 し て、 ユーザーモジ ュ ールお よ びパ フ ォ ーマ ン ス モジ ュ ールが動作す る デー タ ベース と サーバーの両方を監視で き ます。 各種の監視お よ び診断 コ マ ン ド の リ ス ト を次に示 し ます。 こ れ ら の コ マ ン ド の多 く は、 その名前か ら 内容がわか る よ う にな っ てい ます。 コ マン ド 説明 ? コ ン ソ ール コ マ ン ド に関す る ヘルプ を表示 し ます addDbroot DBRoot デ ィ ス ク ス ト レージ を Calpont InfiniDB シ ス テ ムに追加 し ます addExternalDevice 外部デバ イ ス を構成フ ァ イ ルに追加 し ます addModule Calpont InfiniDB シ ス テ ム内でモジ ュ ールを追 加 し ます alterSystem-disableModule モジ ュ ールを無効に し て Calpont InfiniDB シ ス テ ム を変更 し ます alterSystem-enableModule モジ ュ ールを有効に し て Calpont InfiniDB シ ス テ ム を変更 し ます assignDbrootPmConfig 割 り 当て ら れていない DBroot をパフ ォ ーマ ン ス モジ ュ ールに割 り 当て ます assignElasticIPAddress Amazon Elastic IP ア ド レ ス を モジ ュ ールに割 り 当て ます パフ ォ ーマ ン スのチ ュ ーニ ング 55 コ マン ド 説明 disableLog プ ロ セ スお よ びデバ ッ グの ロ ギ ン グの レベル を無効に し ます enableLog プ ロ セ スお よ びデバ ッ グの ロ ギ ン グの レベル を有効に し ます exit コ ン ソ ールツールを終了 し ます getActiveAlarms ア ク テ ィ ブな ア ラ ーム リ ス ト を取得 し ます getActiveSQLStatements シ ス テ ム内でア ク テ ィ ブな SQL 文の リ ス ト を 取得 し ます getAlarmConfig ア ラ ームの構成情報を取得 し ます getAlarmHistory シ ス テ ム ア ラ ーム を取得 し ます getAlarmSummary ア ク テ ィ ブな ア ラ ームの集計数を取得 し ます getCalpontSoftwareInfo Calpont InfiniDB RPM の詳細情報を取得 し ます getExternalDeviceConfig 外部デバ イ ス の構成情報を取得 し ます getLogConfig シ ス テ ム ロ グ フ ァ イ ルの構成を取得 し ます getModuleConfig モジ ュ ール名の構成情報を取得 し ます getModuleCpu モジ ュ ールの CPU 使用率を取得 し ます getModuleCpuUsers CPU を利用 し てい る 上位のモジ ュ ールプ ロ セ ス を取得 し ます getModuleDisk モジ ュ ールのデ ィ ス ク 使用率を取得 し ます getModuleMemory モジ ュ ールの メ モ リ ー使用率を取得 し ます getModuleMemoryUsers メ モ リ ーを利用 し てい る 上位のモジ ュ ールプ ロ セ ス を取得 し ます getModuleResourceUsage モジ ュ ールの リ ソ ース使用率を取得 し ます getModuleTypeConfig モジ ュ ール タ イ プの構成情報を取得 し ます getProcessConfig プ ロ セ ス の構成情報を取得 し ます getProcessStatus Calpont InfiniDB プ ロ セ ス の状態を取得 し ます getStorageConfig シ ス テ ムの ス ト レージ構成情報を取得 し ます getStorageStatus シ ス テ ムの ス ト レージ ス テー タ ス を取得 し ま す getSystemConfig シ ス テ ムの構成情報を取得 し ます 56 パフ ォ ーマ ン スのチ ュ ーニ ング コ マン ド 説明 getSystemCpu すべてのモジ ュ ールにおけ る シ ス テ ムの CPU 使用率を取得 し ます getSystemCpuUsers CPU を利用 し てい る 上位のシ ス テ ム プ ロ セ ス を取得 し ます getSystemDisk すべてのモジ ュ ールにおけ る シ ス テ ムのデ ィ ス ク 使用率を取得 し ます getSystemInfo シ ス テ ム全体の状態を取得 し ます getSystemMemory すべてのモジ ュ ールにおけ る シ ス テ ムの メ モ リ ー使用率を取得 し ます getSystemMemoryUsers メ モ リ ーを利用 し てい る 上位のシ ス テ ム プ ロ セ ス を取得 し ます getSystemNetworkConfig シ ス テ ムのネ ッ ト ワ ー ク 構成情報を取得 し ま す getSystemResourceUsage すべてのモジ ュ ールにおけ る シ ス テ ムの リ ソ ース使用率を取得 し ます getSystemStatus シ ス テ ムお よ びモジ ュ ールの状態を取得 し ま す help コ ン ソ ール コ マ ン ド に関す る ヘルプ を表示 し ます monitorAlarms リ アル タ イ ム モー ド でア ラ ーム を監視 し ます movePmDbrootConfig DBRoot をパフ ォ ーマ ン ス モジ ュ ールか ら 別の モジ ュ ールに移動 し ます quit コ ン ソ ールツールを終了 し ます removeDbroot DBRoot デ ィ ス ク ス ト レージ を Calpont InfiniDB シ ス テ ム か ら 削除 し ます removeExternalDevice 外部デバ イ ス を構成フ ァ イ ルか ら 削除 し ます removeModule モジ ュ ールを Calpont InfiniDB シ ス テ ム か ら 削 除 し ます resetAlarm ア ク テ ィ ブな ア ラ ーム を リ セ ッ ト し ます restartSystem 停止ま たはシ ャ ッ ト ダ ウ ン さ れた Calpont InfiniDB シ ス テ ム を再起動 し ます resumeDatabaseWrites Calpont InfiniDB デー タ ベースへの書込みの実 行を再開 し ます パフ ォ ーマ ン スのチ ュ ーニ ング 57 コ マン ド 説明 setAlarmConfig ア ラ ームの構成パ ラ メ ー タ を設定 し ます setExternalDeviceConfig 外部デバ イ ス の構成パ ラ メ ー タ を設定 し ます setModuleTypeConfig モジ ュ ール タ イ プの構成パ ラ メ ー タ を設定 し ます setProcessConfig プ ロ セ ス の構成パ ラ メ ー タ を設定 し ます setSystemConfig シ ス テ ムの構成パ ラ メ ー タ を設定 し ます shutdownSystem Calpont InfiniDB シ ス テ ム を シ ャ ッ ト ダ ウ ン し ます startSystem 停止ま たはシ ャ ッ ト ダ ウ ン さ れた Calpont InfiniDB シ ス テ ム を起動 し ます stopSystem Calpont InfiniDB シ ス テ ム の処理を停止 し ます suspendDatabaseWrites Calpont InfiniDB デー タ ベースへの書込みの実 行を一時停止 し ます switchParentOAMModule ア ク テ ィ ブな親 OAM モジ ュ ールを別のパ フ ォ ーマ ン ス モジ ュ ールに切 り 替え ます system シ ス テ ム シ ェ ル コ マ ン ド を実行 し ます unassignElasticIPAddress Amazon Elastic IP ア ド レ ス の割 り 当て を解除 し ます コ マ ン ド のヘルプ を参照す る には、 「help」 に続けて コ マ ン ド 名を入力 し ます cmconsole を使用 し て、 多数のシ ス テ ム診断を監視お よ び分析で き ます。 問合せア ク テ ィ ビ テ ィ 、 シ ス テ ム全体の状態、 デ ィ ス ク 使用率、 CPU と メ モ リ ーの リ ソ ース消費な ど の問合せお よ びレ ポー ト が可能です。 た と えば、 DBA ま たは sysadmin は、 次の コ マ ン ド を実行 し て、 構成全体の状態をすばや く 取得で き ます。 calpont> getSystemStatus getsystemstatus Wed Oct 26 12:34:28 2012 System qperfd01 System and Module statuses Component ------------ 58 パフ ォ ーマ ン スのチ ュ ーニ ング Status ------------------- Last Status Change ------------------------ System Module Module Module Module Module Module Module Module Module um1 pm1 pm2 pm3 pm4 pm5 pm6 pm7 pm8 ACTIVE ACTIVE ACTIVE ACTIVE MAN_DISABLED MAN_DISABLED MAN_DISABLED MAN_DISABLED MAN_DISABLED MAN_DISABLED Wed Tue Tue Wed Tue Tue Tue Tue Tue Tue Oct Oct Oct Oct Oct Oct Oct Oct Oct Oct 7 6 6 7 6 6 6 6 6 6 15:10:47 15:50:09 15:50:19 15:10:45 13:25:09 13:25:39 11:19:38 11:20:10 11:20:44 11:21:18 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 Active Parent OAM Performance Module is 'pm1' こ の出力は、 現在、 1 つのユーザーモジ ュ ールお よ び 2 つのパフ ォーマ ン ス モジ ュ ー ルがオ ン ラ イ ン のため、 問合せに利用可能であ る のに対 し 、 パフ ォ ーマ ン ス モジ ュ ー ル 3-8 が現在オ フ ラ イ ン であ る こ と を示 し てい ます。 DBA ま たは sysadmin は、 構成 内にあ る いずれかの ノ ー ド に関す る CPU、 デ ィ ス ク お よ び メ モ リ ーの消費を表示す る 場合、 次の よ う な コ マ ン ド を入力で き ます。 calpont> getModuleCpu pm1 getmodulecpu Wed Oct 26 12:35:36 2012 Module 'pm1' CPU Usage % = 47 calpont> getModuleDisk pm1 getmoduledisk Wed Oct 26 12:36:02 2012 Module 'pm1' Disk Usage (in 1K blocks) Mount Point -----------------------/ /boot /usr/local/Calpont/data1 /usr/local/Calpont/data2 /usr/local/Calpont/data3 /usr/local/Calpont/data4 /usr/local/Calpont/data5 /usr/local/Calpont/data6 /usr/local/Calpont/data7 /usr/local/Calpont/data8 /home/qa/srv Total Blocks -----------66719320 101086 1124868224 1124868224 1124868224 1124868224 1124868224 1124868224 1124868224 1124868224 235332176 Used Blocks Usage % ------------ ------57662764 87 19987 20 830641000 74 835241732 75 834809896 75 833940516 75 835826024 75 833620112 75 832053424 74 832324408 74 88043896 38 calpont> getModuleMemory pm1 getmodulememory Wed Oct 26 12:37:20 2012 Module Memory Usage (in K bytes) パフ ォ ーマ ン スのチ ュ ーニ ング 59 Module Mem Total -----pm1 --------16440436 Mem Used cache Mem Usage % Swap Total Swap Used Swap Usage% ------- ------- ---------- ---------- --------- ---15472352 136236 94 2031608 0 0 cmconsole を使用 し て ロ ーカルマシ ンお よ び リ モー ト マシ ン を監視す る こ と で時間を節 約す る こ と がで き ます。 さ ら に、 こ れに よ っ て、 DBA お よ び sysadmin は、 1 つの ツール でデー タ ベース と 物理サーバーの両方の診断を実行で き ます。 ア ラ ームおよび通知 InfiniDB では、 DBA ま たは sysadmin は、 デー タ ベース ま たはシ ス テ ム で障害が発生す る 前 に問題の通知を受け る ために使用可能な各種のシ ス テ ム ア ラ ーム を構成す る こ と も で き ま す。 管理者は、 デ ィ ス ク 、 CPU、 メ モ リ ー、 シ ス テ ムの ス ワ ッ プ領域、 非互換の ソ フ ト ウ ェ アバージ ョ ン な ど に対 し て し き い値を設定で き ます。 ア ラ ームお よ び通知は、 cmconsole ユーテ ィ リ テ ィ を使用 し て管理 し ます。 管理者は、 次の コ マ ン ド を入力す る と 、 構成可能な ア ラ ーム の リ ス ト を表示で き ます。 calpont> getAlarmConfig getalarmconfig Wed Oct 7 15:45:50 2009 Alarm Configuration Alarm ID #1 Configuration information BriefDesc = CPU_USAGE_HIGH DetailedDesc = The usage on the indicated CPU has exceeded its high threshold Severity = CRITICAL Threshold = 100 Alarm ID #2 Configuration information BriefDesc = CPU_USAGE_MED DetailedDesc = The usage on the indicated CPU has exceeded its medium threshold Severity = MAJOR Threshold = 70 Alarm ID #3 Configuration information BriefDesc = CPU_USAGE_LOW DetailedDesc = The usage on the indicated CPU has exceeded its low threshold 60 パフ ォ ーマ ン スのチ ュ ーニ ング Severity = MINOR Threshold = 50 Alarm ID #4 Configuration information BriefDesc = DISK_USAGE_HIGH DetailedDesc = The usage on the indicated Disk Drive has exceeded its high threshold Severity = CRITICAL Threshold = 100 . . . 管理者は、 setAlarmConfig コ マ ン ド を使用 し て、 ア ラ ーム番号 と その し き い値を 指定す る こ と に よ っ て、 ア ラ ームの現在の設定を変更で き ます。 た と えば、 約 95% に 達 し た CPU に関 し て通知す る CPU_USAGE_HIGH ア ラ ーム を設定す る 場合、 管理者は 次の コ マ ン ド を実行 し ます。 calpont> setAlarmConfig 1 Threshold 95 setalarmconfig Wed Oct 7 15:55:47 2009 Successfully set Threshold = 95 ト リ ガー さ れた ア ラ ームは、 getActiveAlarms コ マ ン ド を使用 し て表示で き ます。 calpont> getActiveAlarms AlarmID Brief Description Alarm Severity Time Issued Reporting Module Reporting Process Reported Device = = = = = = = 1 CPU_USAGE_HIGH CRITICAL Tue Oct 6 14:50:06 2009 pm2 ServerMonitor CPU AlarmID Brief Description Alarm Severity Time Issued Reporting Module Reporting Process Reported Device = = = = = = = 30 CONN_FAILURE CRITICAL Tue Oct 6 15:48:08 2009 um1 ExeMgr 10.100.7.5 PrimProc パフ ォ ーマ ン スのチ ュ ーニ ング 61 Nagios、 HP OpenView ま たは Tivoli な ど のグ ロ ーバルシ ス テ ム監視 ソ フ ト ウ ェ アに SNMP ト ラ ッ プ を送信す る よ う にア ラ ーム通知を構成す る こ と も で き ます。 SQL の監視および診断ユーテ ィ リ テ ィ 適切に記述 さ れていない SQL は、 多 く の場合、 デー タ ベース でパフ ォ ーマ ン ス の問題が 発生す る 1 番の原因 と な り ます。 適切に実行 さ れていない SQL 文を特定 し て修正で き る よ う に、 InfiniDB では多数の コ マ ン ド お よ びユーテ ィ リ テ ィ が提供 さ れてい ます。 まず、 一般的な MySQL サポー ト の観点では、 ユーザーは、 ロ グオ ン し てい る ユーザー と そのユーザーが現在実行 し てい る SQL に関す る 簡単な情報を show processlist コ マ ン ド を使用 し て表示で き ます。 mysql> show processlist; +----+------+-----------+-------+---------+------+-------+--------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+-------+---------+------+-------+--------------+ | 73 | root | localhost | ssb10 | Query | 0 | NULL | show processlist +----+------+-----------+-------+---------+------+-------+--------------+ 1 row in set (0.01 sec) InfiniDB の cmconsole ユーテ ィ リ テ ィ で も 、 デー タ ベース で現在実行 さ れてい る SQL を 表示す る getActiveSQLStatements コ マ ン ド が提供 さ れてい ます。 calpont> getActiveSQLStatements getactivesqlstatements Wed Oct 7 08:38:32 2009 Get List of Active SQL Statements ================================= Start Time Time (hh:mm:ss) Session ID SQL Statement ---------------- ---------------- -----------------------------------------------------------------------------Oct 7 08:38:30 00:00:03 73 select c_name, sum(lo_revenue) from customer, lineorder where lo_custkey = c_custkey and c_custkey = 6 group by c_name 個々の SQL 文のパフ ォ ーマ ン ス に対 し て ト ラ ブルシ ュ ーテ ィ ン グ を行 う 場合、 使用可能 なユーテ ィ リ テ ィ は 3 つあ り ます。 1 つ目の標準 MySQL の EXPLAIN ユーテ ィ リ テ ィ は、 InfiniDB では索引や MySQL I/O 機能が使用 さ れないため、 若干有用性に欠け ます。 ただ し 、 次の例に示す よ う に、 EXPLAIN でい く つかの情報を取得で き ます。 mysql> explain select select count(*) from dateinfo,customer, part, supplier, lineorder where s_suppkey = lo_suppkey and d_datekey = lo_or and 62 パフ ォ ーマ ン スのチ ュ ーニ ング p_partkey = lo_partkey and c_custkey = lo_custkey and s_nation = 'BRAZIL'; +----+-------------+-----------+------+---------------+------+--------+------+------+------------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+--------+------+------+------------------------------------------------------+ | 1 | SIMPLE | dateinfo | ALL | NULL | NULL | NULL | NULL | 2000 | | | 1 | SIMPLE | customer | ALL | NULL | NULL | NULL | NULL | 2000 | Using join buffer | | 1 | SIMPLE | part | ALL | NULL | NULL | NULL | NULL | 2000 | Using join buffer | | 1 | SIMPLE | supplier | ALL | NULL | NULL | NULL | NULL | 2000 | Using where with pushed condition; Using join buffer | | 1 | SIMPLE | lineorder | ALL | NULL | NULL | NULL | NULL | 2000 | Using where; Using join buffer | +----+-------------+-----------+------+---------------+------+--------+------+------+------------------------------------------------------+ InfiniDB が提供す る SQL 統計 コ マ ン ド (calgetstats) お よ び ト レース ユーテ ィ リ テ ィ (caltrace) を使用す る と 、 SQL 文のパフ ォ ーマ ン ス に関 し て、 よ り 高度な診 断情報を取得で き ます。 DBA ま たは開発者は、 calgetstats を コ ールす る だけで、 SQL イ ン タ フ ェース を介 し て実行 さ れた問合せの SQL パフ ォ ーマ ン ス の統計を表示で き ます。 次に例を示 し ます。 mysql> select c_name, sum(l_quantity) from customer, orders, lineitem where c_custkey = o_custkey and l_orderkey = o_orderkey and l_shipdate = '1992-01-02' group by c_name; +--------------------+-----------------+ | c_name | sum(l_quantity) | +--------------------+-----------------+ | Customer#000094199 | 35.00 | | Customer#000009263 | 19.00 | . . 17 rows in set (1.21 sec) mysql> select calgetstats()\G *************************** 1. row *************************** calgetstats(): Query Stats: MaxMemPct-0; NumTempFiles-0; TempFileSpace-0MB; ApproxPhyI/O-0; CacheI/O-7977; BlocksTouched7977; PartitionBlocksEliminated-0; MsgBytesIn-5MB; MsgBytesOut0MB; Mode-Distributed| 1255540221 457489 1 row in set (0.00 sec) パフ ォ ーマ ン スのチ ュ ーニ ング 63 統計出力には、 次の情報が含ま れ ます。 MaxMemPct : 大規模なハ ッ シ ュ 結合操作のサポー ト 時な ど、 ユーザーモジ ュ ール の ピー ク 時の メ モ リ ー利用率。 NumTempFiles : 一時フ ァ イ ルに関す る レ ポー ト 。 一時フ ァ イ ルは、 利用可能な メ モ リ ーを超え る 大 き さ の問合せ操作 (通常は、 比較的小 さ い表結合カーデ ィ ナ リ テ ィ が、 構成可能な何 ら かの し き い値を超え る 特殊な結合操作) を サポー ト す る ために作成 さ れ ます。 TempFileSpace : 一時フ ァ イ ルが使用す る 領域に関す る レ ポー ト 。 一時フ ァ イ ル は、 利用可能な メ モ リ ーを超え る 大 き さ の問合せ操作 (通常は、 比較的小 さ い表 結合カーデ ィ ナ リ テ ィ が、 構成可能な何 ら かの し き い値を超え る 特殊な結合操作) をサポー ト す る ために作成 さ れ ます。 PhyI/O : デ ィ ス ク 、 SSD、 その他の永続ス ト レージか ら 読み取 ら れ る 8K ブ ロ ッ ク の数。 ほ と ん ど の場合、 個々の I/O 操作の数はブ ロ ッ ク の数に比べて非常に少な いため、 Calpont InfiniDB では 1 回の I/O 操作で 512 個のブ ロ ッ ク が同時に読み取 ら れます。 CacheI/O : 必要な個別の物理 I/O コ ールの数に よ り 下方調整 さ れてい る 、 メ モ リ ー内で処理 さ れた 8K ブ ロ ッ ク の概数。 BlocksTouched : メ モ リ ー内で処理 さ れた 8K ブ ロ ッ ク の概数。 PartitionBlocksEliminated : InfiniDB がエ ク ス テ ン ト マ ッ プに よ っ て除外 し たブ ロ ッ ク ア ク セ ス数。 MsgBytesIn、 MsgByteOut : 問合せを サポー ト す る ために ノ ー ド 間で送信 さ れ る メ ッ セージのバ イ ト 数 (MB 単位)。 InfiniDB の SQL ト レース ユーテ ィ リ テ ィ caltrace の基本的な使用手順は次の と お り で す。 1. 特定のセ ッ シ ョ ンの ト レース を開始 し ます 2. 問題の SQL 文を実行 し ます 3. こ の文に対 し て収集 さ れた ト レース を確認 し ます 例 と し て、 次のセ ッ シ ョ ン で ト レース を開始 し て、 6,000,000 行の フ ァ ク ト 表お よ び 300,000 行のデ ィ メ ン シ ョ ン表に対 し て問合せを発行 し 、 ト レース か ら の出力を確認 し ま す。 mysql> select calsettrace(1); +----------------+ | calsettrace(1) | +----------------+ | 1 | 64 パフ ォ ーマ ン スのチ ュ ーニ ング +----------------+ 1 row in set (0.04 sec) mysql> select c_name, sum(lo_revenue) -> from customer, lineorder -> where lo_custkey = c_custkey and -> c_custkey = 5 -> group by c_name; +--------------------+-----------------+ | c_name | sum(lo_revenue) | +--------------------+-----------------+ | Customer#000000005 | 552483078.00 | +--------------------+-----------------+ 1 row in set, 0 warning (1.23 sec) mysql> select calgettrace(); +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | calgettrace() | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Desc Mode Table TableOID ReferencedOIDs PIO LIO PBE Elapsed Rows BPS PM customer 3327 (3328,3336) 0 150 0 0.017 1 BPS PM lineorder 3278 (3281,3291) 4096 29808 0 0.766 63 HJS PM lineorder 3278 0.000 ADS UM 0.724 | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.02 sec) 各ス テ ッ プの物理お よ び論理 I/O、 経過時間な ど に関す る 情報が表示 さ れます。 パフ ォ ーマ ン スのチ ュ ーニ ング 65 66 パフ ォ ーマ ン スのチ ュ ーニ ング 第8章 InfiniDB への移行 こ の項では、 他のデー タ ベース か ら InfiniDB デー タ ベース に移行す る 方法について説 明 し ます。 一般的な移行の概念 通常、 InfiniDB への移行では、 別のデー タ ベース か ら の ス キーマ ま たはデー タ の移動、 お よ び場合に よ っ ては ス ト ア ド プ ロ シージ ャ な ど の ス ト ア ド コ ー ド オブジ ェ ク ト の移 動を実行 し ます。 通常、 次の ロ ー ド マ ッ プに従い ます。 1. ソ ースデー タ ベース オブジ ェ ク ト の ド キ ュ メ ン ト 化 2. InfiniDB オブジ ェ ク ト の設計 3. ソ ース シ ス テ ム か ら InfiniDB へのデー タ の移動 4. InfiniDB への コ ー ド オブジ ェ ク ト の変換 (オプシ ョ ン) 既存のデー タ ベース構造の ド キ ュ メ ン ト 化は、 通常は手動のデー タ デ ィ ク シ ョ ナ リ 検 索な ど を実行す る 標準の手動処理で試行す る と 困難な場合があ り ます。 ほ と ん ど の デー タ ベース には操作に役立つ メ タ デー タ デ ィ ク シ ョ ナ リ が含ま れてい ますが、 手動 ですべての メ タ デー タ (表、 列な ど) を取得す る 処理は、 大規模なデー タ ベース では 非常に時間がかか る イ ベン ト と な る 場合があ り ます。 ほ と ん ど の場合の最良の方法は、 変換に必要で適用可能なすべての メ タ デー タ を自動 的にカ タ ロ グ化す る 、 コ ン ピ ュ ー タ に よ る リ バース エ ン ジニ ア リ ン グ処理を使用す る 方法です。 こ れには、 PowerDesigner、 ERWin お よ び ER/Studio な ど の適切なサー ド パーテ ィ のデー タ モデ リ ン グ ツールを使用で き ます。 こ れ ら のすべての ツールで複数 のデー タ ベース タ イ プの リ バース エ ン ジニ ア リ ン グがサポー ト さ れてい ます。 InfiniDB ではほ と ん ど の重要なデー タ 型がサポー ト さ れてい る ため、 通常、 InfiniDB へ の ス キーマ構造の移動は困難な タ ス ク ではあ り ません。 InfiniDB でのデー タ 型のサ ポー ト の詳細は、 『InfiniDB SQL 構文ガ イ ド 』 を参照 し て く だ さ い。 ソ ースデー タ ベース の メ タ デー タ を取得 し て理解 し た ら 、 次の手順は InfiniDB タ ー ゲ ッ ト デー タ ベース の設計です。 こ れには、 ソ ース オブジ ェ ク ト お よ びそのプ ロ パ テ ィ (列のデー タ 型な ど) を InfiniDB の対応す る も のに変換す る こ と が含まれます。 一部のモデ リ ン グ ツールでは、 ユーザーは基礎 と な る デー タ ベース を物理的な設計で 変更す る オプシ ョ ン を選択す る こ と で、 あ る デー タ ベース ス キーマ を別のデー タ ベー InfiniDB への移行 67 ス ス キーマに自動的に変換で き ます。 すべてのデー タ 型が自動的に変更 さ れますが、 デー タ 型が 1 対 1 で一致 し ない場合、 一部のデー タ 型に手動での調整が必要な こ と があ り ま す。 ス ト ア ド プ ロ シージ ャ な ど の コ ー ド オブジ ェ ク ト の変換は別問題です。 Oracle、 Sybase、 SQL Server な ど の ス ト ア ド プ ロ シージ ャ か ら MySQL の ス ト ア ド プ ロ シージ ャ に変換す る 、 Ispirer の SQLWays 製品な ど のい く つかのサー ド パーテ ィ ツールがあ り ます。 ス キーマオブジ ェ ク ト の変換の場合は、 可能性があ る 1 つの方法 と し て、 無償の MySQL Migration Toolkit の使用があ り ます。 MySQL Migration Toolkit を使用す る と 、 ツールに よ っ て リ バース エ ン ジニ ア リ ン グ さ れた ソ ースデー タ ベース が MySQL ベース の対応す る も のに自動的に変換 さ れ、 すべてのデー タ 型変換が行われます。 ユーザーは、 ソ ースデー タ ベース か ら 移行す る オブジ ェ ク ト お よ び MySQL の特定の指定方法に関 し て包括的に制 御で き ます。 Calpont 用の無償の MySQL Migration Toolkit を使用す る 場合、 通常、 ユーザーは次の手順 に従い ます。 1. Migration Toolkit を ダ ウ ン ロ ー ド し て イ ン ス ト ール し ます。 MySQL の Web サ イ ト の GUI ツールのダ ウ ン ロ ー ド セ ク シ ョ ン (現在、 http://dev.mysql.com/downloads/ gui-tools/5.0.html) にあ り ます。 2. ツールを使用 し て ソ ースデー タ ベース に接続 し ます。 3. ツールを使用 し て InfiniDB タ ーゲ ッ ト デー タ ベース に接続 し ます。 4. InfiniDB に移行す る ス キーマお よ びオブジ ェ ク ト を選択 し ます。 5. オブジ ェ ク ト マ ッ ピ ン グの画面で、 ユーザー定義の ラ ジオボ タ ン を選択 し て、 作 成す る SQL ス ク リ プ ト に 「engine=infinidb」 と 入力 し ます。 6. オブジ ェ ク ト を オ ン ラ イ ン で自動的に作成す る のではな く 、 SQL の作成を ス ク リ プ ト に送信す る こ と を選択 し ます。 7. エデ ィ タ で作成ス ク リ プ ト を確認 し 、 InfiniDB で必要なデー タ 型ま たはその他の変 更を行い ます。 8. InfiniDB SQL エデ ィ タ で ス ク リ プ ト を実行 し て InfiniDB 表オブジ ェ ク ト を作成 し ま す。 68 InfiniDB への移行 MySQL のデー タ の移行方法 汎用的な MySQL デー タ ベース のデー タ を InfiniDB に移動す る には、 い く つかの異な る 方法を使用で き ます。 1 つ目では、 ユーザーは MySQL の SELECT INTO OUTFILE コ マ ン ド を使用 し て一連の表出力を フ ラ ッ ト フ ァ イ ルに ス プールで き ます。 た と え ば、 ユーザーは、 2 つの列があ る 「t1」 と い う 表か ら 、 パ イ プ (|) 文字で区切 ら れた フ ァ イ ルにデー タ を書 き 出す必要があ る 場合、 次の よ う に行 う こ と がで き ます。 mysql> select c1, c2 -> from t1 -> into outfile 't1.tbl' fields terminated by '|'; MySQL フ ァ イ ルへの書込みが行われた ら 、 その フ ァ イ ルを InfiniDB イ ン ポー ト デ ィ レ ク ト リ に移動 し 、 cpimport ユーテ ィ リ テ ィ を使用 し て InfiniDB に イ ン ポー ト で き ま す。 も う 1 つの方法では、 無償のオープン ソ ース ETL (抽出 - 変換 - ロ ー ド ) ツールを使 用 し て、 あ る MySQL サーバーか ら 、 あ る InfiniDB サーバーにデー タ を移動 し ます。 ツールは Pentaho、 Jaspersoft、 Talend な ど か ら 入手で き ます。 短時間で表全体か ら デー タ を移動 し て InfiniDB に イ ン ポー ト す る 3 つ目の方法では、 MySQL の CSV ス ト レージエ ン ジ ン (MySQL 5.1 以上で使用可能) を使用 し ます。 カ ン マ区切 り 値ス ト レージエ ン ジ ンに よ っ て、 フ ァ イ ル内の列がカ ン マで区切 ら れてい る フ ラ ッ ト フ ァ イ ルに表のデー タ が格納 さ れ ます。 ユーザーは、 InfiniDB 以外の イ ン ス ト ール環境内の既存の MySQL 表を使用 し 、 現行のエ ン ジ ン ではな く CSV エ ン ジ ン を使用す る よ う にその表を変更 し て表フ ァ イ ルを InfiniDB サーバーに コ ピー し た後で、 表を元のエ ン ジ ン に戻す こ と がで き ます。 唯一の注意事項 と し ては、 CSV ス ト レージ エ ン ジ ン では NULLABLE 列定義はサポー ト さ れていないため、 列に NULL 制約が関 連付け ら れていない よ う にす る 必要があ り ます。 ユーザーは、 InfiniDB サーバーにカ ン マ区切 り 形式の表フ ァ イ ルを含めた後、 その フ ァ イ ルを InfiniDB イ ン ポー ト デ ィ レ ク ト リ に移動 し 、 cpimport ユーテ ィ リ テ ィ を 使用 し て InfiniDB に ロ ー ド で き ます。 Oracle のデー タ の移行方法 Oracle のデー タ を InfiniDB に移動す る 方法は多 く あ り ます。 MySQL に接続可能なすべ てのデー タ 移動ツールが Calpont へのデー タ の移動に適 し てい ます。 た と えば、 DBA は、 必要に応 じ てデー タ を移動 し 、 変換を実行す る のに、 Talend ま たは Pentaho の Kettle な ど のオープン ソ ース ETL ツールを自由にダ ウ ン ロ ー ド し て使用で き ます。 Oracle ではデー タ ベース用のア ン ロ ー ド ツールは提供 さ れていないため、 DBA は Oracle デー タ を ア ン ロ ー ド す る ためのサー ド パーテ ィ のア ン ロ ー ド ツールを所有 し て いないかぎ り 、 SQL*Plus セ ッ シ ョ ン か ら フ ラ ッ ト フ ァ イ ルを ス プールア ウ ト す る 必要 InfiniDB への移行 69 があ る 場合があ り ます。 た と えば、 DBA は、 3 つの列があ る 「workorder」 と い う 表を含 む InfiniDB に ロ ー ド す る ために Oracle か ら フ ラ ッ ト 表を作成 し 、 パ イ プ (|) 文字でデー タ を区切 る 場合、 次の よ う な ス ク リ プ ト を使用で き ます。 SET TERMOUT OFF set newpage 0 set space 0 set linesize 500 set pagesize 0 set echo off set feedback off set heading off set trimspool on col wonum format a10 col leadcraft format a8 col location format a50 spool c:\workorder.txt SELECT WORKNUM || '|' || CONTACT || '|' || PRIMARY_LOCATION FROM SCHEMA1.WORKORDER; spool off exit Microsoft SQL Server のデー タ の移行方法 Microsoft では、 SQL Server 製品 と の統合サービ ス が提供 さ れてい ます。 こ れは、 バン ド ル さ れたデー タ の移動お よ び BI のプ ラ ッ ト フ ォ ーム です。 SQL Server の DBA は、 こ れを 使用 し て InfiniDB に接続 し 、 InfiniDB にデー タ を移動で き ます。 Oracle と は異な り 、 SQL Server にはデー タ ベース用の bcp と い う 高速ア ン ロ ー ド ツール があ り ます。 bcp ユーテ ィ リ テ ィ を使用 し て SQL Server 表デー タ の フ ラ ッ ト フ ァ イ ルを 作成 し 、 cpimport ユーテ ィ リ テ ィ を使用 し て InfiniDB に ロ ー ド で き ます。 大量のデー タ に対 し ては、 SQL Server デー タ を bcp で出力 し 、 cpimport で InfiniDB に イ ン ポー ト す る 方法が最良の方法であ る と 考え ら れ ます。 70 InfiniDB への移行 付録 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 71 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. 72 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 73 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 74 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 75 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 76 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 77 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. 78 GNU Free Documentation License
© Copyright 2024 Paperzz