このページは機械翻訳したものです。
FEDERATED ストレージエンジンを使用するときは、次の点に注意することをお勧めします。
FEDERATEDテーブルは他のレプリカにレプリケートできますが、レプリカサーバーがCONNECTION文字列 (またはmysql.serversテーブルの行) に定義されているユーザー/パスワードの組合せを使用してリモートサーバーに接続できることを確認する必要があります。
次の項目は、FEDERATED ストレージエンジンがサポートしている機能とサポートしていない機能を示します。
リモートサーバーは MySQL サーバーでなくてはいけません。
FEDERATEDテーブルがポイントするリモートテーブルは、FEDERATEDテーブルを介してそのテーブルにアクセスを試みる前に、存在している必要があります。ある
FEDERATEDテーブルがほかのテーブルをポイントすることは可能ですが、ループを作らないように注意する必要があります。-
FEDERATEDテーブルは通常の意味でインデックスをサポートしていません。テーブルデータへのアクセスはリモートで処理されるため、実際にはインデックスを使用するリモートテーブルです。 つまり、インデックスを使用できないために全テーブルスキャンが必要なクエリーの場合、サーバーはリモートテーブルからすべての行をフェッチし、ローカルでフィルタします。 これは、このSELECTステートメントで使用されるWHEREまたはLIMITに関係なく発生します。これらの句は、戻される行にローカルに適用されます。したがって、インデックスの使用に失敗したクエリーは、パフォーマンスおよびネットワークオーバーロードの低下を引き起こす可能性があります。 また、返される行はメモリーに格納する必要があるため、このようなクエリーによってローカルサーバーのスワッピングやハングアップが発生することもあります。
-
同等の
MyISAMやほかのテーブルからのインデックス定義がサポートされていない可能性があるため、FEDERATEDテーブルを作成するときは注意を払うようにしてください。 たとえば、テーブルがVARCHAR、TEXTまたは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';可能であれば、これらのインデックスの問題を回避するため、リモートサーバーとローカルサーバーの両方にテーブルを作成する場合、カラムとインデックスの定義を分けるようにしてください。
内部的に、実装は
SELECT、INSERT、UPDATE、およびDELETEを使用しますが、HANDLERは使用しません。FEDERATEDストレージエンジンは、SELECT、INSERT、UPDATE、DELETE、TRUNCATE TABLE、およびインデックスをサポートしています。DROP TABLEを除いて、ALTER TABLEや、テーブルの構造に直接影響を与えるデータ定義言語ステートメントをサポートしていません。 現在の実装は、プリペアドステートメントを使用しません。FEDERATEDはINSERT ... ON DUPLICATE KEY UPDATEステートメントを受け入れますが、重複キー違反が起こった場合、ステートメントはエラーで失敗します。トランザクションはサポートされていません。
-
FEDERATEDは、複数の行がバッチでリモートテーブルに送信されるように一括挿入処理を実行するため、パフォーマンスが向上します。 また、リモートテーブルがトランザクション対応の場合、エラーが発生したときにリモートストレージエンジンはステートメントロールバックを適切に実行できます。 この機能には次の制限があります。挿入のサイズは、サーバー間の最大パケットサイズを超えることはできません。 挿入がこのサイズを超えた場合、複数のパケットに分割され、ロールバック問題が発生する可能性があります。
大量挿入処理は
INSERT ... ON DUPLICATE KEY UPDATEでは起こりません。
FEDERATEDエンジンは、リモートテーブルが変わったかどうかを知る方法がありません。 その理由は、このテーブルが、データベースシステム以外の何かによって決して書き込まれることのないデータファイルのように動作する必要があるためです。 リモートデータベースに変更が加えられた場合に、ローカルテーブルのデータの完全性が損なわれる可能性があります。CONNECTION文字列を使用する場合、パスワードに '@' 文字を使用できません。CREATE SERVERステートメントを使用してサーバー接続を作成することで、この制限を回避できます。insert_idおよびtimestampオプションはデータプロバイダには伝達されません。FEDERATEDテーブルに対して発行されたDROP TABLEステートメントは、ローカルテーブルだけを削除し、リモートテーブルは削除しません。FEDERATEDテーブルはクエリーキャッシュでは機能しません。ユーザー定義のパーティション化は、
FEDERATEDテーブルではサポートされていません。