15.8.3 FEDERATED 스토리지 엔진 Tips
FEDERATED 스토리지 엔진을 사용할 때는 다음 사항에주의하는 것이 좋습니다.
FEDERATED테이블을 다른 슬레이브에 복제하여도 상관 없지만, 슬레이브 서버가CONNECTION문자열 (또는mysql.servers테이블의 행)에 정의 된 사용자 및 암호 조합을 사용하여 원격 서버에 연결할 수 있는지 확인해야합니다.
다음 항목은 FEDERATED 스토리지 엔진이 지원하는 기능과 지원하지 않는 기능을 나타냅니다.
원격 서버는 MySQL 서버가 아니면 안됩니다.
FEDERATED테이블을 가리키는 원격 테이블은FEDERATED테이블을 통해 그 테이블에 접근을 시도하기 전에 존재해야합니다.있는
FEDERATED테이블이 다른 테이블을 가리킬 수 있지만 루프를 만들지 않도록주의해야합니다.FEDERATED테이블은 본질적으로 인덱스를 지원하지 않습니다. 테이블에 대한 액세스가 원격으로 처리되기 때문에 원격 테이블이 인덱스를 지원합니다. 동등한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문을 승인하지만 중복 키 위반이 발생하면 문은 오류로 실패합니다.대량 삽입을 실행하는 경우 (예를 들어,
INSERT INTO ... SELECT ...문)의FEDERATED테이블의 성능은 선택된 행이FEDERATED테이블에서 개별INSERT문으로 처리되기 때문에 다른 테이블 유형 에 비해 떨어집니다.트랜잭션은 지원되지 않습니다.
FEDERATED여러 행이 배치에서 원격 테이블에 보내도록 대량 삽입 작업을 수행합니다. 이제 성능이 향상 원격 테이블은 개선을 실행할 수 있습니다. 또한 원격 테이블이 트랜잭션을 사용할 경우 오류가 발생했을 때 원격 스토리지 엔진은 문 롤백을 제대로 실행할 수 있습니다. 이 기능에는 다음과 같은 제한이 있습니다.삽입의 크기는 서버의 최대 패킷 크기를 초과 할 수 없습니다. 삽입이 크기를 초과하면 여러 패킷으로 분할되어 롤백 문제가 발생할 수 있습니다.
대량 삽입 작업은
INSERT ... ON DUPLICATE KEY UPDATE에서는 발생하지 않습니다.
FEDERATED엔진은 원격 테이블이 바뀌 었는지 여부를 알 방법이 없습니다. 그 이유는이 테이블이 데이터베이스 시스템 이외의 무언가에 의해 결코 쓸 수없는 데이터 파일처럼 동작해야하기 때문입니다. 원격 데이터베이스에 변경이 가해 졌을 경우 로컬 테이블의 데이터 무결성이 손상 될 수 있습니다.CONNECTION문자열을 사용하는 경우 암호에 '@'문자를 사용할 수 없습니다.CREATE SERVER문을 사용하여 서버 연결을 작성하여이 제한을 피할 수 있습니다.insert_id및timestamp옵션은 데이터 공급자가 전달되지 않습니다.FEDERATED테이블에 발급 된DROP TABLE문은 로컬 테이블 만 삭제하고 원격 테이블은 삭제하지 않습니다.FEDERATED테이블은 쿼리 캐시에서는 작동하지 않습니다.사용자 정의 파티션은
FEDERATED테이블에서는 지원되지 않습니다.