Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  FEDERATED ストレージエンジンの注記とヒント

15.8.3 FEDERATED ストレージエンジンの注記とヒント

FEDERATED ストレージエンジンを使用するときは、次の点に注意することをお勧めします。

  • FEDERATED テーブルをほかのスレーブに複製してもかまいませんが、スレーブサーバーが CONNECTION 文字列 (または mysql.servers テーブルの行) で定義されたユーザーとパスワードの組み合わせを使用してリモートサーバーに接続できることを確認する必要があります。

次の項目は、FEDERATED ストレージエンジンがサポートしている機能とサポートしていない機能を示します。

  • リモートサーバーは MySQL サーバーでなくてはいけません。

  • FEDERATED テーブルがポイントするリモートテーブルは、FEDERATED テーブルを介してそのテーブルにアクセスを試みる前に、存在している必要があります

  • ある FEDERATED テーブルがほかのテーブルをポイントすることは可能ですが、ループを作らないように注意する必要があります。

  • FEDERATED テーブルは本質的にインデックスをサポートしていません。テーブルへのアクセスがリモートで処理されるため、リモートテーブルがインデックスをサポートします。同等の MyISAM やほかのテーブルからのインデックス定義がサポートされていない可能性があるため、FEDERATED テーブルを作成するときは注意を払うようにしてください。たとえば、VARCHARTEXT、または BLOB カラムにインデックスプリフィクスを付けた FEDERATED テーブルを作成すると、失敗します。MyISAM の次の定義は有効です。

    CREATE TABLE `T1`(`A` VARCHAR(100),UNIQUE KEY(`A`(30))) ENGINE=MYISAM;

    この例のキープリフィクスは FEDERATED エンジンと互換性がないため、同等のステートメントは失敗します。

    CREATE TABLE `T1`(`A` VARCHAR(100),UNIQUE KEY(`A`(30))) ENGINE=FEDERATED
      CONNECTION='MYSQL://127.0.0.1:3306/TEST/T1';

    可能であれば、これらのインデックスの問題を回避するため、リモートサーバーとローカルサーバーの両方にテーブルを作成する場合、カラムとインデックスの定義を分けるようにしてください。

  • 内部的に、実装は SELECTINSERTUPDATE、および DELETE を使用しますが、HANDLER は使用しません。

  • FEDERATED ストレージエンジンは、SELECTINSERTUPDATEDELETETRUNCATE TABLE、およびインデックスをサポートしています。DROP TABLE を除いて、ALTER TABLE や、テーブルの構造に直接影響を与えるデータ定義言語ステートメントをサポートしていません。現在の実装は、プリペアドステートメントを使用しません。

  • FEDERATEDINSERT ... ON DUPLICATE KEY UPDATE ステートメントを受け入れますが、重複キー違反が起こった場合、ステートメントはエラーで失敗します。

  • 大量の挿入を実行する場合 (たとえば、INSERT INTO ... SELECT ... ステートメント) の FEDERATED テーブルのパフォーマンスは、選択された各行が FEDERATED テーブルで個々の INSERT ステートメントとして処理されるため、ほかのテーブルタイプに比べて低下します。

  • トランザクションはサポートされていません。

  • FEDERATED は、複数の行がバッチでリモートテーブルに送られるように大量挿入処理を実行します。これでパフォーマンスは向上し、リモートテーブルは改善を実行できます。また、リモートテーブルがトランザクション対応の場合、エラーが発生したときにリモートストレージエンジンはステートメントロールバックを適切に実行できます。この機能には次の制限があります。

    • 挿入のサイズは、サーバー間の最大パケットサイズを超えることはできません。挿入がこのサイズを超えた場合、複数のパケットに分割され、ロールバック問題が発生する可能性があります。

    • 大量挿入処理は INSERT ... ON DUPLICATE KEY UPDATE では起こりません。

  • FEDERATED エンジンは、リモートテーブルが変わったかどうかを知る方法がありません。その理由は、このテーブルが、データベースシステム以外の何かによって決して書き込まれることのないデータファイルのように動作する必要があるためです。リモートデータベースに変更が加えられた場合に、ローカルテーブルのデータの完全性が損なわれる可能性があります。

  • CONNECTION 文字列を使用する場合、パスワードに '@' 文字を使用できません。CREATE SERVER ステートメントを使用してサーバー接続を作成することで、この制限を回避できます。

  • insert_id および timestamp オプションはデータプロバイダには伝達されません。

  • FEDERATED テーブルに対して発行された DROP TABLE ステートメントは、ローカルテーブルだけを削除し、リモートテーブルは削除しません。

  • FEDERATED テーブルはクエリーキャッシュでは機能しません。

  • ユーザー定義のパーティション化は、FEDERATED テーブルではサポートされていません。


User Comments
  Posted by Matt Jackson on August 5, 2010
Its worth noting that you cannot use an alter table statement to change a tables storage engine to Federated, or atleast as of 5.1 you cannot change from InnoDb to Federated.
Sign Up Login You must be logged in to post a comment.