MySQL 5.1 リファレンスマニュアル :: 15 パーティショニング :: 15.1 MySQL パーティショニングの概要
« 15 パーティショニング

15.2 パーティショニングのタイプ »
Section Navigation      [Toggle]
  • 15 パーティショニング
  • 15.1 MySQL パーティショニングの概要
  • 15.2 パーティショニングのタイプ
  • 15.3 パーティショニング管理
  • 15.4 パーティションの刈り込み
  • 15.5 パーティショニングの制約と制限

15.1. MySQL パーティショニングの概要

このセクションでは MySQL 5.1 パーティショニングの概要のコンセプト説明を提供しています。

パーティショニングの制限またはフィーチャーされている限界については 項15.5. 「パーティショニングの制約と制限」 を参照してください。

SQL 基準は実際のデータ保存に関するガイダンスをあまり提供していません。SQL 言語自体、スキーマ、テーブル、行、そしてカラム等の基盤となるデータ構造やメディアとは独立して作動することを目的としています。それにもかかわらず、進んでいるデータベースマネージメントシステムのほとんどが何らかの方法を使ってファイルシステム、ハードウェア、もしくはその両方において特定のデータを保存するための実際のロケーションを決定づける手段を発展させてきました。MySQL では、InnoDB ストレージエンジンはテーブルスペースの概念をサポートしてきました。MySQL サーバも、パーティショニングが可能になる前から異なる実際のディレクトリを指定して異なるデータベースの保存を行うようコンフィギャすることが可能でした。(方法に関しては、項6.6.1. 「シンボリックリンクの使用」 を参照してください)

Partitioningはこの概念を進化させたもので、必要に応じて大まかに設定したルールに従い、各々のテーブルの一部分をファイルシステム上で分布することを可能にしています。結果的に、テーブルの異なる一部分は異なるテーブルとして別々のロケーションに保存されます。データのパーティショニングをとりおこなうユーザによって選択されたルールは関数 と呼ばれ、 MySQL では係数、レンジや値のリストに対する照合、内部ハッシュファンクション、もしくはリニアハッシュファンクションになります。関数はユーザによって指定されたパーティショニングの種類によって選択され、ユーザによって提供された表現の値をパラメータとして取り入れます。この表現は整数カラム値、もしくは一つまたは複数のカラム値に対して働く関数が整数を返していることが考えられます。この表現の値はパーティショニング関数へ渡され、その特定のレコードが記憶されるべきパーティションを示す整数値を返します。この関数はコンスタントでもランダムであってもいけません。クエリを含んでいないかもしれませんが、実質MySQL上有効などのSQL表現も使用可能です。ただし、MAXVALUE (可能な最大のポジティブ整数)未満のポジティブ整数を返す表現である必要があります。パーティショニング関数の例はこの章の後部に登場するパーティショニング種類のディスカッション( 項15.2. 「パーティショニングのタイプ」 を参照してください)のほかに、パーティショニング構文の記述に含まれています(項12.1.8. 「CREATE TABLE 構文」 を参照してください)。

これは 水平パーティショニング — と称されていて、テーブル内の異なる行が異なる実際のパーティショニングに割り当てられることが有ります。MySQL 5.1 は、テーブル内の異なるカラムが実際に異なるパーティショニングに割り当てられる、垂直パーティショニング をサポートしていません。現在、垂直パーティショニングをMySQL 5.1に組み込む予定はありません。

パーティショニングのサポートはMySQL 5.1の-max版に含まれています(つまり、5.1 -maxバイナリは--with-partitionで構築されます。MySQL バイナリがパーティショニングサポートで構築されている場合、有効化するための追加作業は必要ありません(例えば、my.cnfファイルへの特殊エントリーは要求されません。)ユーザのMySQLサーバがパーティショニングをサポートしているか否かは、以下のようなSHOW VARIABLESコマンドを使用して確認することができます。

mysql> SHOW VARIABLES LIKE '%partition%';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.00 sec)

妥当な SHOW VARIABLES の出力上に上記のように YES 値が have_partitioning 変数と現れない場合、ユーザの MySQL はパーティショニングをサポートしていません。

MySQL 5.1.6以前では、この変数はhave_partition_engineと名づけられていました。(Bug#16718)

パーティショニングされたテーブルを作成するには、MySQLサーバにサポートされるほとんどの記憶エンジンを使用することができます。MySQLパーティショニングエンジンは別の層で作動しており、これらのどのエンジンとも対話できます。MySQL 5.1では、同じパーティショニングされたテーブルのパーティショニングは同じ記憶エンジンを使用していなければいけません。例えば、MyISAMを1つのパーティションに使い、別のパーティションにInnoDBを使用することはできません。ただし、同じMySQLサーバもしくは同じデータベース上で異なるパーティショニングされたテーブルに異なる記憶エンジンを使用することを阻むものはありません。

注:MySQL パーティショニングはMERGEもしくはCSV記憶エンジンと使うことはできません。MySQL 5.1.15に始まり、FEDERATEDテーブルもパーティショニングできません (Bug#22451)。MySQL 5.1.6より前では、BLACKHOLE記憶エンジンを使用してパーティショニングされたテーブルを作ることは不可能でした (Bug#14524)。KEY を使用してのパーティショニングは NDBCluster 記憶エンジンを使用することでサポートされていますが、MySQL 5.1 内のクラスタテーブルでは他の種類のユーザによって定義されるパーティショニングはサポートされません。

パーティショニングテーブルに特定の記憶エンジンを使用するには、非パーティショニングされたテーブルでそうするように[STORAGE] ENGINEのみ使用する必要があります。ただし、[STORAGE] ENGINE (と他のテーブルオプション) はパーティショニングオプションがCREATE TABLEステートメントで使用される前に記述される必要があります。この例はハッシュを使って6のパーティショニングに分けられ、InnoDB記憶エンジンを使用しているテーブルの作成方法を示しています。

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
    ENGINE=INNODB
    PARTITION BY HASH( MONTH(tr_date) )
    PARTITIONS 6;

(各 PARTITION 節は [STORAGE] ENGINE オプションを含むことはできますが、MySQL 5.1 では効果がありません。)

注:パーティショニングはテーブルの全データとインデックスに対して適用されます。インデックスのみ、またはvice versaテーブルの1部分のみをパーティショニングすることはできません。

各パーティションのデータやインデックスは、パーティショニングされたテーブル作成のために使用されるCREATE TABLEステートメントの partitioning 節のDATA DIRECTORYとINDEX DIRECTORYオプションを使用して、特定のディレクトリに割り当てることができます。それに加え、MAX_ROWSとMIN_ROWSは各パーティショニングに記憶可能な最大と最低の数値を割り出すことができます。これらのオプションについては、項15.3. 「パーティショニング管理」 を参照してください。

パーティショニングの利点にはこういったものが含まれます。

  • 1つのディスクもしくはファイルシステムのパーティションで記憶できる量よりも多くのデータをテーブルで記憶することができます。

  • 有用性を失うデータはそのデータのみを含んでいるパーティションを消去することでテーブルから取り除くことができます。また逆に、新しいデータを追加するプロセスは、そのデータ特有のパーティションを用意することで大きく援助することができるケースがあります。

  • ある特定のWHERE節を満たすデータがが1つまたは1つ以上のパーティションのみで記憶されることによって、いくつかのクエリは最適化されます。これにより、検索から残りのパーティションを除外します。パーティショニングされたテーブル作成後にパーティショニングを変更できるため、パーティショニングスキームが最初に設定された当初は現れなかった頻繁なクエリを促進させるためにデータを再編成することができます。この機能は パーティションの刈り込み とも呼ばれており、MySQL 5.1.6で実装されました。追加情報に関しては 項15.4. 「パーティションの刈り込み」 を参照してください。

他のパーティショニングによるベネフィットが次のリストの記述されています。これらの特徴は現MySQLパーティショニングには実装されていませんが、優先事項のトップにあります。

  • SUM() や COUNT() といった集約関数を含むクエリは、簡単に並列化させることができます。そのようなクエリの単純な例:SELECT salesperson_id, COUNT(orders) as order_total FROM sales GROUP BY salesperson_id;.「並列化」とは、各パーティションで同時にクエリを作動させることが可能で、且つ最終結果は全パーティションの結果の合計として取得することができるという意味を含んでいます。

  • 複数のディスク上でデータシークを広めるために、さらに優れたクエリ処理能力を取得できます。

パーティショニングの開発は続いていますので、引き続きこのセクションと章をチェックしてください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates