Loading...
MySQL 9.5 Reference Manual 9.5의 18.8.3 FEDERATED Storage Engine Notes and Tips의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
FEDERATED 스토리지 엔진을 사용할 때는 다음 사항을 인지해야 합니다:
FEDERATED 테이블은 다른 복제본으로 복제될 수 있지만, 복제본 서버가 원격 서버에 연결하기 위해 CONNECTION 문자열(또는 mysql.servers 테이블의 row)에 정의된 사용자/비밀번호 조합을 사용할 수 있도록 보장해야 합니다.다음 항목은 FEDERATED 스토리지 엔진이 지원하는 기능과 지원하지 않는 기능을 나타냅니다:
원격 서버는 MySQL 서버여야 합니다.
FEDERATED 테이블이 가리키는 원격 테이블은 FEDERATED 테이블을 통해 해당 테이블에 접근을 시도하기 전에 반드시 존재해야 합니다.
하나의 FEDERATED 테이블이 다른 FEDERATED 테이블을 가리키는 것은 가능하지만, 루프를 생성하지 않도록 주의해야 합니다.
FEDERATED 테이블은 일반적인 의미의 인덱스를 지원하지 않습니다. 테이블 데이터에 대한 접근이 원격으로 처리되기 때문에 실제로 인덱스를 사용하는 것은 원격 테이블입니다. 이는 어떤 인덱스도 사용할 수 없어서 전체 테이블 스캔이 필요한 쿼리의 경우, 서버가 원격 테이블의 모든 row를 가져와서 이를 로컬에서 필터링한다는 것을 의미합니다. 이는 이 SELECT statement와 함께 사용된 어떤 WHERE 또는 LIMIT에도 상관없이 발생하며, 이 절들은 반환된 row에 대해 로컬에서 적용됩니다.
인덱스를 사용하지 못하는 쿼리는 따라서 성능 저하와 네트워크 과부하를 일으킬 수 있습니다. 또한 반환된 row는 메모리에 저장되어야 하므로, 이러한 쿼리는 로컬 서버가 스와핑을 하거나 심지어 hang 상태에 빠지게 만들 수도 있습니다.
FEDERATED 테이블을 생성할 때는, 동등한 MyISAM 또는 다른 테이블의 인덱스 정의가 지원되지 않을 수 있으므로 주의해야 합니다. 예를 들어, 테이블이 어떤 VARCHAR, TEXT 또는 BLOB column에 대해 인덱스 prefix를 사용하는 경우, FEDERATED 테이블 생성은 실패합니다. 다음 MyISAM을 사용하는 정의는 유효합니다:1CREATE TABLE `T1`( 2 `A` VARCHAR(100), 3 UNIQUE KEY(`A`(30)) 4) ENGINE=MYISAM;
이 예제의 key prefix는 FEDERATED 엔진과 호환되지 않으며, 동등한 statement는 실패합니다:
1CREATE TABLE `T1`( 2 `A` VARCHAR(100), 3 UNIQUE KEY(`A`(30)) 4) ENGINE=FEDERATED 5 CONNECTION='MYSQL://127.0.0.1:3306/TEST/T1';
가능하다면, 이러한 인덱스 문제를 피하기 위해 원격 서버와 로컬 서버 양쪽에서 테이블을 생성할 때 column과 인덱스 정의를 분리하려고 해야 합니다.
내부적으로, 구현은 SELECT, INSERT, UPDATE, 그리고 DELETE를 사용하지만, HANDLER는 사용하지 않습니다.
FEDERATED 스토리지 엔진은 SELECT, INSERT, UPDATE, DELETE, TRUNCATE TABLE, 그리고 인덱스를 지원합니다. ALTER TABLE이나, DROP TABLE을 제외하고 테이블 구조에 직접 영향을 주는 어떤 Data Definition Language statement도 지원하지 않습니다. 현재 구현은 prepared statement를 사용하지 않습니다.
FEDERATED는 INSERT ... ON DUPLICATE KEY UPDATE statement를 허용하지만, duplicate-key 위반이 발생하면 statement는 error와 함께 실패합니다.
트랜잭션은 지원되지 않습니다.
FEDERATED는 벌크 인서트 처리 방식을 수행하여 여러 row를 배치로 원격 테이블에 전송하며, 이는 성능을 향상시킵니다. 또한 원격 테이블이 트랜잭셔널한 경우, error가 발생했을 때 원격 스토리지 엔진이 statement 롤백을 적절하게 수행할 수 있도록 합니다. 이 기능에는 다음과 같은 제한이 있습니다:
insert의 크기는 서버 간 최대 패킷 크기를 초과할 수 없습니다. insert가 이 크기를 초과하면 여러 패킷으로 분할되며, 롤백 문제가 발생할 수 있습니다.
벌크 인서트 처리는 [INSERT ... ON DUPLICATE KEY UPDATE](https://dev.mysql.com/doc/refman/9.5/en/insert-on-duplicate.html "15.2.7.2 INSERT ... ON DUPLICATE KEY UPDATE Statement)에 대해서는 발생하지 않습니다.
FEDERATED 엔진이 원격 테이블이 변경되었는지를 알 수 있는 방법은 없습니다. 그 이유는 이 테이블이 데이터베이스 시스템 이외의 어떤 것에 의해서도 절대 쓰기 작업이 발생하지 않는 데이터 파일처럼 동작해야 하기 때문입니다. 원격 데이터베이스에 어떤 변경이라도 발생하면 로컬 테이블의 데이터 무결성이 손상될 수 있습니다.
CONNECTION 문자열을 사용할 때는 비밀번호에 '@' 문자를 사용할 수 없습니다. 이 제한을 우회하기 위해 CREATE SERVER statement를 사용하여 서버 연결을 생성할 수 있습니다.
insert_id와 timestamp option은 데이터 제공자(data provider)로 전파되지 않습니다.
FEDERATED 테이블에 대해 발행된 어떤 DROP TABLE statement도 원격 테이블이 아닌 로컬 테이블만 drop합니다.
사용자 정의 파티셔닝은 FEDERATED 테이블에서 지원되지 않습니다.
18.8.2 How to Create FEDERATED Tables
18.8.4 FEDERATED Storage Engine Resources