SlideShare a Scribd company logo
1 of 18
Download to read offline
Federated Engine 적용사례와 동작원리
2015. 11.
이윤정
- 1/17 -
Federated Table 적용 사례 1
동기화대상테이블
(=원본테이블)
트리거
한국
원본테이블_DML
DML
유형
DML
일시
순번
동기화 테이블과
동일한 구성
ToBe
지역코드
미국 유럽(네덜란드)
federated_원본테이블_dml federated_원본테이블_dml
원본테이블_dml 원본테이블이름_dml
원본테이블 원본테이블
sp_sync_원본테이블이름
(동기화 stored procedure)
sp_sync_원본테이블이름
(동기화 stored procedure)
Federated Table은
미국DB 혹은 유럽DB에서
한국DB에 있는 테이블의 내용을
읽어오는 용도로만 사용함
미국/유럽 DB에서는
한국DB에서 데이터를 가져온
마지막 “순번”이후의 데이터만
한국DB에서 읽어오도록 조건을 줘서
인덱스를 이용해 데이터를 읽도록 했음
PK
한국 <-> 미국 : 2Mbps
한국 <-> 유럽: 1Mbps
해외에서 한국에 있는 DML이력을 가져와서 해외에 반영한 후 반영여부를 한국에 update 해주는 경우 분당 약 1000건 처리
해외에서 한국에 있는 DML이력을 읽어오기만 하고 해외에 반영됐는지 여부를 한국에 update는 하지 않는 경우 분당 약 30,000건 처리
- 2/17 -
Federated Table 적용 사례 2
 Federated Table 과 Local Table 간의 조인 (Federated Table 이 Driving Table이면서 NOT IN & UNION ALL...)
쿼리에서 Federated Table 의 데이터를 전부 Local DB 로 가져온 후 한 건씩 Nested Loop Join 하면서 과도한
메모리를 사용하게 됨
평소 DB서버의 상태
Federated Table을 이용 쿼리가 실행될 때
- 3/17 -
Federated Engine 이해
 Remote Server에 있는 MySQL/MariaDB에 있는 테이블에 접근할 수 있게 하는 스토리지 엔진
(Oracle의 DB Link와 유사함)
 Local Server에서 Remote Server에 있는 테이블을 Local Server에 있는 테이블처럼 사용할 수 있게 해준다.
 MySQL에서 Federated, MariaDB에서는 FederatedX(확장된 기능의 Federated) 로 부르고 있다.
 실체가 없는 브릿지 역할을 한다.
- 4/17 -
Federated Engine 활성화
 Local Server에서 Federated 엔진이 활성화 돼 있어야 한다.
 MariaDB: 별다른 옵션 없이 사용할 수 있다.(기본적으로 활성화 돼 있음)
 MySQL: 환경을 설정한 후에 DB를 restart 한다.
 엔진 활성화 여부 확인
vi my.cnf
[mysqld]
…
Federated
…
SHOW ENGINES;
- 5/17 -
Federated Table 생성 – 방법1: 테이블 생성문 안에 Remote Server 정보 포함
 Remote Table
 Local Table
 Local Server에 만든 Federated Table은 Local에 있는 다른 일반 테이블처럼 사용이 가능하다.
 SHOW CREATE TABLE 구문을 이용하면 테이블 생성에 사용된 username, password, host 등 모든 정보가
노출된다.
↑
username
↑
password
↑
host
↑
port
↑
schema
↑
tablename
create table remoteschema.t1
(
id int unsigned not null auto_increment primary key
,c1 int
,c2 varchar(100)
)
engine=innodb
default charset=utf8;
create table localschema.federated_t1
(
id int unsigned not null auto_increment primary key
,c1 int
,c2 varchar(100)
)
engine=federated
default charset=utf8
connection = 'mysql://remoteuser:remotepass@127.0.0.1:3307/remoteschema/t1';
- 6/17 -
Federated Table 생성 – 방법2: Remote Server 정보 등록 후 사용
 Remote Server 정보 등록
 Local Federated Table 생성
CREATE SERVER remote_server
FOREIGN DATA WRAPPER 'mysql' OPTIONS
(HOST ‘127.0.0.1',
DATABASE 'remoteschema',
USER 'remoteuser',
PASSWORD 'remotepass',
PORT 3307
);
← host
← schema
← username
← password
← port
CREATE TABLE 접근할대상테이블이름
(
Remote Server에 있는 것과 동일한 컬럼 구성
)
ENGINE=FEDERATED
CONNECTION='remote_server/접근할대상테이블이름'
COMMENT='코멘트'
DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_bin;
- 7/17 -
Federated Engine의 특성
 SELECT, INSERT, UPDATE, DELETE, TRUNCATE 구문을 지원한다.
 INSERT ON DUPLICATE KEY UPDATE 는 지원되지 않는다.
: 쿼리문에서 에러가 발생하진 않으나, 중복데이터가 있으면 UPDATE가 되지 않고 KEY 중복 에러가 발생한다.
 ALTER TABLE 이나 DDL 문은 허용되지 않는다.
 Query Cache를 이용하지 않고, 쿼리가 실행될 때마다 매번 데이터를 다시 읽는다.
 사용자 정의 파티션을 지원하지 않는다.
 Federated table를 이용하면 remote에 있는 모든 데이터를 local로 가져온다.
 인덱스를 지원한다.
 local의 연결이 종료돼도 remote의 연결은 남아있으며, remote에 남아있는 연결은 remote server의 timeout
설정에 따라서 추후에 정리된다.
- 8/17 -
Federated Table 동작 원리
 테스트를 통한 Federated Table의 동작 원리를 이해하기 위해 테스트용 테이블을 생성한다.
Remote
Server
create table remoteschema.t1
(
id int unsigned not null auto_increment primary key
,c1 int
,c2 varchar(100)
)
engine=innodb
default charset=utf8;
Local
Server
create table localschema.federated_t1
(
id int unsigned not null auto_increment primary key
,c1 int
,c2 varchar(100)
)
engine=federated
default charset=utf8
connection = 'mysql://remoteuser:remotepass@127.0.0.1:3307/remoteschema/t1';
- 9/17 -
Federated Table 동작 원리
 INSERT ~ SELECT ~ 문의 처리
 입력될 모든 데이터를 가져와서 리터럴 변수를 이용한 INSERT문 처럼 만들어서 처리한다.
Local
Server
insert into localschema.federated_t1 (c1, c2)
select @rownum:=@rownum+1 as id
,a.table_name
from information_schema.tables a
,(select @rownum := 0) b
limit 5;
Remote
Server
151126 13:53:49 2 Connect remoteuser@localhost as anonymous on
remoteschema
2 Query SET AUTOCOMMIT=0
2 Query SAVEPOINT save1
2 Query INSERT INTO `t1` (`id`, `c1`, `c2`) VALUES
(0, 1 , 'ALL_PLUGINS')
2 Query INSERT INTO `t1` (`id`, `c1`, `c2`) VALUES
(0, 2 , 'APPLICABLE_ROLES') ,
(0, 3 , 'CHARACTER_SETS') ,
(0, 4 , 'CLIENT_STATISTICS') ,
(0, 5 , 'COLLATIONS')
2 Query COMMIT
- 10/17 -
Federated Table 동작 원리
 LAST_INSERT_ID()
federated를 이용해서 auto_increment가 포함된 테이블에 데이터를 입력하고 last_insert_id()를 확인해보면
federated를 통해서 입력된 테이블의 last_insert_id()가 나오지 않고 다른 값이 나온다.
즉, federated를 이용할 때는 last_insert_id()를 사용할 수 없다.
 SELECT문의 처리 : 인덱스가 있는 컬럼이 조건으로 사용되는 경우
Local
Server
select * from localschema.federated_t1 where id = 1;
Remote
Server
151126 14:31:06 2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE (`id` = 1)
Local
Server
select * from localschema.federated_t1 where id between 3 and 6;
Remote
Server
151126 14:32:05 2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1`
WHERE ( (`id` >= 3) ) AND ( (`id` <= 6) )
- 11/17 -
Federated Table 동작 원리
 SELECT문의 처리: limit을 사용하는 경우 = remote에 있는 모든 데이터를 local로 읽어온 후에 1건을 반환한다.
 SELECT문의 처리: 인덱스가 없는 컬럼을 조건으로 사용하는 경우 = remote의 모든 데이터를 local로 가져온
후에 처리한다.
Local
Server
select c2 from localschema.federated_t1 limit 1;
Remote
Server
151126 14:33:11 2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1`
Local
Server
select c2 from localschema.federated_t1 where c2 like 'ALL%';
Remote
Server
151126 14:34:16 2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1`
- 12/17 -
Federated Table 동작 원리
 SELECT문의 처리: 인덱스가 없던 컬럼에 인덱스를 생성하는 경우
 remote에서 인덱스가 없던 컬럼에 인덱스를 생성한 후에 데이터를 조회해도 local에서는 여전히
인덱스가 없는 것으로 인식하여 remote의 모든 데이터를 local로 가져온 후에 처리한다.
Remote
Server
create index t1_idx on remoteschema.t1 (c2);
Local
Server
select c2 from localschema.federated_t1 where c2 like 'ALL%';
Remote
Server
151126 14:36:30 2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1`
- 13/17 -
Federated Table 동작 원리
 SELECT문의 처리: 인덱스가 없던 컬럼에 인덱스를 생성하는 경우
 인덱스 정보를 추가해서 Federated table을 재생성하면 인덱스를 인식하여 remote에서 인덱스를
사용해서 필요한 데이터만 읽어서 local로 가져온다.
Remote
Server
drop table if exists localschema.federated_t1;
create table localschema.federated_t1
(
id int unsigned not null auto_increment primary key
,c1 int
,c2 varchar(100)
,INDEX t1_idx (c2)
)
engine=federated
default charset=utf8
connection = 'mysql://remoteuser:remotepass@127.0.0.1:3307/remoteschema/t1';
Local
Server
select c2 from localschema.federated_t1 where c2 like 'ALL%';
Remote
Server
151126 14:42:06 6 Query SHOW TABLE STATUS LIKE 't1'
6 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE
( (`c2` >= 'ALL000...000') ) AND
( (`c2` <= 'ALL...') )
- 14/17 -
Federated Table 동작 원리
 DELETE문의 처리
 remote server에서 바로 delete문을 처리하는 것이 아니라 조건에 해당되는 데이터를 remote에서
local로 모두 읽어온 후에 다시 조건을 주고 remote에서 처리한다.
Local
Server
delete from localschema.federated_t1 where c2 like 'ALL%';
Remote
Server
151126 14:43:19 6 Query SET AUTOCOMMIT=0
6 Query SAVEPOINT save1
6 Query SHOW TABLE STATUS LIKE 't1'
6 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE
( (`c2` >= 'ALL000...000') ) AND
( (`c2` <= 'ALL...') )
6 Query DELETE FROM `t1` WHERE `id` = 1
AND `c2` = 'ALL_PLUGINS' LIMIT 1
6 Query DELETE FROM `t1` WHERE `id` = 11
AND `c2` = 'ALL_PLUGINS' LIMIT 1
6 Query DELETE FROM `t1` WHERE `id` = 16
AND `c2` = 'ALL_PLUGINS' LIMIT 1
6 Query DELETE FROM `t1` WHERE `id` = 21
AND `c2` = 'ALL_PLUGINS' LIMIT 1
6 Query COMMIT
- 15/17 -
Federated Table 동작 원리
 UPDATE문의 처리
 remote server에서 바로 update문을 처리하는 것이 아니라 조건에 해당되는 데이터를 remote에서
local로 모두 읽어온 후에 다시 조건을 주고 remote에서 처리한다.
Local
Server
update localschema.federated_t1
set c2 = 'X'
where c2 like 'ENGINE%';
Remote
Server
151126 14:45:06 6 Query SAVEPOINT save1
6 Query SHOW TABLE STATUS LIKE 't1'
6 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE
( (`c2` >= 'ENGINE000...000') ) AND
( (`c2` <= 'ENGINE...') )
6 Query UPDATE `t1` SET `c2` = 'X'
WHERE `id` = 10 AND `c2` = 'ENGINES'
6 Query COMMIT
- 16/17 -
Routine 안에서 Federated Table 사용될 때 remote에서의 처리
Local
Server
MainBlock: BEGIN
... 생략 ...
DECLARE out_cursor CURSOR FOR
select id from localschema.federated_t1;
... 생략 ...
OPEN out_cursor;
outLoopBlock: LOOP
FETCH out_cursor INTO v_out_value;
... 생략 ...
update localschema.federated_t1 set c1 = 9
where id = v_out_value;
END LOOP outLoopBlock;
END MainBlock
Remote
Server
2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1`
2 Query SET AUTOCOMMIT=0
2 Query SAVEPOINT save1
2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` = 2) ) AND ( (1=1) )
2 Query UPDATE `t1` SET `c1` = 2 WHERE `id` = 2
2 Query COMMIT
2 Query SAVEPOINT save1
2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` = 3) ) AND ( (1=1) )
2 Query UPDATE `t1` SET `c1` = 3 WHERE `id` = 3
2 Query COMMIT
2 Query SAVEPOINT save1
2 Query SHOW TABLE STATUS LIKE 't1'
2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` = 4) ) AND ( (1=1) )
- 17/17 -
Q&A
Q&A

More Related Content

What's hot

Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docxKeepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docxNeoClova
 
Maxscale 소개 1.1.1
Maxscale 소개 1.1.1Maxscale 소개 1.1.1
Maxscale 소개 1.1.1NeoClova
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL TuningPgDay.Seoul
 
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?Miguel Araújo
 
Maria db 이중화구성_고민하기
Maria db 이중화구성_고민하기Maria db 이중화구성_고민하기
Maria db 이중화구성_고민하기NeoClova
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기NHN FORWARD
 
redis 소개자료 - 네오클로바
redis 소개자료 - 네오클로바redis 소개자료 - 네오클로바
redis 소개자료 - 네오클로바NeoClova
 
MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바NeoClova
 
MySQL_MariaDB로의_전환_기술요소-202212.pptx
MySQL_MariaDB로의_전환_기술요소-202212.pptxMySQL_MariaDB로의_전환_기술요소-202212.pptx
MySQL_MariaDB로의_전환_기술요소-202212.pptxNeoClova
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザNoritaka Sekiyama
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxNeoClova
 
Maxscale_메뉴얼
Maxscale_메뉴얼Maxscale_메뉴얼
Maxscale_메뉴얼NeoClova
 
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & ClusterMySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & ClusterKenny Gryp
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대PgDay.Seoul
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]MongoDB
 
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleThe Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleColin Charles
 

What's hot (20)

Automated master failover
Automated master failoverAutomated master failover
Automated master failover
 
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docxKeepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
 
Maxscale 소개 1.1.1
Maxscale 소개 1.1.1Maxscale 소개 1.1.1
Maxscale 소개 1.1.1
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning
 
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
 
Maria db 이중화구성_고민하기
Maria db 이중화구성_고민하기Maria db 이중화구성_고민하기
Maria db 이중화구성_고민하기
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
redis 소개자료 - 네오클로바
redis 소개자료 - 네오클로바redis 소개자료 - 네오클로바
redis 소개자료 - 네오클로바
 
MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바
 
MySQL_MariaDB로의_전환_기술요소-202212.pptx
MySQL_MariaDB로의_전환_기술요소-202212.pptxMySQL_MariaDB로의_전환_기술요소-202212.pptx
MySQL_MariaDB로의_전환_기술요소-202212.pptx
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
Maxscale_메뉴얼
Maxscale_메뉴얼Maxscale_메뉴얼
Maxscale_메뉴얼
 
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & ClusterMySQL Database Architectures - InnoDB ReplicaSet & Cluster
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScaleThe Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
The Proxy Wars - MySQL Router, ProxySQL, MariaDB MaxScale
 

Similar to Federated Engine 실무적용사례

PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초Jiho Lee
 
효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차희동 강
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개PgDay.Seoul
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4성일 한
 
Unity cookbook 20
Unity cookbook 20Unity cookbook 20
Unity cookbook 20Jihun Soh
 
Linux blue borne-vulnerabilities
Linux blue borne-vulnerabilitiesLinux blue borne-vulnerabilities
Linux blue borne-vulnerabilitiesSeungyong Lee
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIjieun kim
 
파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄SeongHyun Ahn
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기흥배 최
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3Seok-joon Yun
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQLI Goo Lee
 
Network programming report
Network programming reportNetwork programming report
Network programming reportJongwon
 
손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)Devgear
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용Woonbong Kim
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin GuideJEONGPHIL HAN
 

Similar to Federated Engine 실무적용사례 (20)

PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초PostgreSQL로 배우는 SQL 기초
PostgreSQL로 배우는 SQL 기초
 
효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차효율적인 SQL 작성방법 1주차
효율적인 SQL 작성방법 1주차
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
 
Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4Laravel 로 배우는 서버사이드 #4
Laravel 로 배우는 서버사이드 #4
 
Unity cookbook 20
Unity cookbook 20Unity cookbook 20
Unity cookbook 20
 
Linux blue borne-vulnerabilities
Linux blue borne-vulnerabilitiesLinux blue borne-vulnerabilities
Linux blue borne-vulnerabilities
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
 
파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄파이썬 데이터베이스 연결 1탄
파이썬 데이터베이스 연결 1탄
 
닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기닷넷프레임워크에서 Redis 사용하기
닷넷프레임워크에서 Redis 사용하기
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
Network programming report
Network programming reportNetwork programming report
Network programming report
 
손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)손쉬운 데이터 연결 방법(라이브바인딩 활용)
손쉬운 데이터 연결 방법(라이브바인딩 활용)
 
1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace1.7 튜닝의도구 sql autorace
1.7 튜닝의도구 sql autorace
 
1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan1.8 튜닝의도구 dbms xplan
1.8 튜닝의도구 dbms xplan
 
NO PARALLEL DML
NO PARALLEL DMLNO PARALLEL DML
NO PARALLEL DML
 
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용게임 개발자를 위한 Vba 활용
게임 개발자를 위한 Vba 활용
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin Guide
 
Apache sqoop
Apache sqoopApache sqoop
Apache sqoop
 

More from I Goo Lee

MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항I Goo Lee
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOI Goo Lee
 
From MSSQL to MariaDB
From MSSQL to MariaDBFrom MSSQL to MariaDB
From MSSQL to MariaDBI Goo Lee
 
AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기I Goo Lee
 
Backup automation in KAKAO
Backup automation in KAKAO Backup automation in KAKAO
Backup automation in KAKAO I Goo Lee
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축I Goo Lee
 
MySQL 5.7 NF – Optimizer Improvement
 MySQL 5.7 NF – Optimizer Improvement MySQL 5.7 NF – Optimizer Improvement
MySQL 5.7 NF – Optimizer ImprovementI Goo Lee
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용I Goo Lee
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)I Goo Lee
 
MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개I Goo Lee
 
AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론I Goo Lee
 
AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분I Goo Lee
 
AWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTAWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTI Goo Lee
 
MySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKMySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKI Goo Lee
 
MySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKMySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKI Goo Lee
 
PostgreSQL 이야기
PostgreSQL 이야기PostgreSQL 이야기
PostgreSQL 이야기I Goo Lee
 
Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)I Goo Lee
 
Binlog Servers 구축사례
Binlog Servers 구축사례Binlog Servers 구축사례
Binlog Servers 구축사례I Goo Lee
 
Intro ProxySQL
Intro ProxySQLIntro ProxySQL
Intro ProxySQLI Goo Lee
 
1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례I Goo Lee
 

More from I Goo Lee (20)

MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIO
 
From MSSQL to MariaDB
From MSSQL to MariaDBFrom MSSQL to MariaDB
From MSSQL to MariaDB
 
AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기AWS Aurora 100% 활용하기
AWS Aurora 100% 활용하기
 
Backup automation in KAKAO
Backup automation in KAKAO Backup automation in KAKAO
Backup automation in KAKAO
 
텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축텔레그램을 이용한 양방향 모니터링 시스템 구축
텔레그램을 이용한 양방향 모니터링 시스템 구축
 
MySQL 5.7 NF – Optimizer Improvement
 MySQL 5.7 NF – Optimizer Improvement MySQL 5.7 NF – Optimizer Improvement
MySQL 5.7 NF – Optimizer Improvement
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
 
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
Intro KaKao MRTE (MySQL Realtime Traffic Emulator)
 
MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개MS 빅데이터 서비스 및 게임사 PoC 사례 소개
MS 빅데이터 서비스 및 게임사 PoC 사례 소개
 
AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론AWS 환경에서 MySQL Infra 설계하기-2본론
AWS 환경에서 MySQL Infra 설계하기-2본론
 
AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분AWS 환경에서 MySQL Infra 설계하기-1도입부분
AWS 환경에서 MySQL Infra 설계하기-1도입부분
 
AWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMTAWS 환경에서 MySQL BMT
AWS 환경에서 MySQL BMT
 
MySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKMySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELK
 
MySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKMySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELK
 
PostgreSQL 이야기
PostgreSQL 이야기PostgreSQL 이야기
PostgreSQL 이야기
 
Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)
 
Binlog Servers 구축사례
Binlog Servers 구축사례Binlog Servers 구축사례
Binlog Servers 구축사례
 
Intro ProxySQL
Intro ProxySQLIntro ProxySQL
Intro ProxySQL
 
1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례1.mysql disk io 모니터링 및 분석사례
1.mysql disk io 모니터링 및 분석사례
 

Federated Engine 실무적용사례

  • 1. Federated Engine 적용사례와 동작원리 2015. 11. 이윤정
  • 2. - 1/17 - Federated Table 적용 사례 1 동기화대상테이블 (=원본테이블) 트리거 한국 원본테이블_DML DML 유형 DML 일시 순번 동기화 테이블과 동일한 구성 ToBe 지역코드 미국 유럽(네덜란드) federated_원본테이블_dml federated_원본테이블_dml 원본테이블_dml 원본테이블이름_dml 원본테이블 원본테이블 sp_sync_원본테이블이름 (동기화 stored procedure) sp_sync_원본테이블이름 (동기화 stored procedure) Federated Table은 미국DB 혹은 유럽DB에서 한국DB에 있는 테이블의 내용을 읽어오는 용도로만 사용함 미국/유럽 DB에서는 한국DB에서 데이터를 가져온 마지막 “순번”이후의 데이터만 한국DB에서 읽어오도록 조건을 줘서 인덱스를 이용해 데이터를 읽도록 했음 PK 한국 <-> 미국 : 2Mbps 한국 <-> 유럽: 1Mbps 해외에서 한국에 있는 DML이력을 가져와서 해외에 반영한 후 반영여부를 한국에 update 해주는 경우 분당 약 1000건 처리 해외에서 한국에 있는 DML이력을 읽어오기만 하고 해외에 반영됐는지 여부를 한국에 update는 하지 않는 경우 분당 약 30,000건 처리
  • 3. - 2/17 - Federated Table 적용 사례 2  Federated Table 과 Local Table 간의 조인 (Federated Table 이 Driving Table이면서 NOT IN & UNION ALL...) 쿼리에서 Federated Table 의 데이터를 전부 Local DB 로 가져온 후 한 건씩 Nested Loop Join 하면서 과도한 메모리를 사용하게 됨 평소 DB서버의 상태 Federated Table을 이용 쿼리가 실행될 때
  • 4. - 3/17 - Federated Engine 이해  Remote Server에 있는 MySQL/MariaDB에 있는 테이블에 접근할 수 있게 하는 스토리지 엔진 (Oracle의 DB Link와 유사함)  Local Server에서 Remote Server에 있는 테이블을 Local Server에 있는 테이블처럼 사용할 수 있게 해준다.  MySQL에서 Federated, MariaDB에서는 FederatedX(확장된 기능의 Federated) 로 부르고 있다.  실체가 없는 브릿지 역할을 한다.
  • 5. - 4/17 - Federated Engine 활성화  Local Server에서 Federated 엔진이 활성화 돼 있어야 한다.  MariaDB: 별다른 옵션 없이 사용할 수 있다.(기본적으로 활성화 돼 있음)  MySQL: 환경을 설정한 후에 DB를 restart 한다.  엔진 활성화 여부 확인 vi my.cnf [mysqld] … Federated … SHOW ENGINES;
  • 6. - 5/17 - Federated Table 생성 – 방법1: 테이블 생성문 안에 Remote Server 정보 포함  Remote Table  Local Table  Local Server에 만든 Federated Table은 Local에 있는 다른 일반 테이블처럼 사용이 가능하다.  SHOW CREATE TABLE 구문을 이용하면 테이블 생성에 사용된 username, password, host 등 모든 정보가 노출된다. ↑ username ↑ password ↑ host ↑ port ↑ schema ↑ tablename create table remoteschema.t1 ( id int unsigned not null auto_increment primary key ,c1 int ,c2 varchar(100) ) engine=innodb default charset=utf8; create table localschema.federated_t1 ( id int unsigned not null auto_increment primary key ,c1 int ,c2 varchar(100) ) engine=federated default charset=utf8 connection = 'mysql://remoteuser:remotepass@127.0.0.1:3307/remoteschema/t1';
  • 7. - 6/17 - Federated Table 생성 – 방법2: Remote Server 정보 등록 후 사용  Remote Server 정보 등록  Local Federated Table 생성 CREATE SERVER remote_server FOREIGN DATA WRAPPER 'mysql' OPTIONS (HOST ‘127.0.0.1', DATABASE 'remoteschema', USER 'remoteuser', PASSWORD 'remotepass', PORT 3307 ); ← host ← schema ← username ← password ← port CREATE TABLE 접근할대상테이블이름 ( Remote Server에 있는 것과 동일한 컬럼 구성 ) ENGINE=FEDERATED CONNECTION='remote_server/접근할대상테이블이름' COMMENT='코멘트' DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_bin;
  • 8. - 7/17 - Federated Engine의 특성  SELECT, INSERT, UPDATE, DELETE, TRUNCATE 구문을 지원한다.  INSERT ON DUPLICATE KEY UPDATE 는 지원되지 않는다. : 쿼리문에서 에러가 발생하진 않으나, 중복데이터가 있으면 UPDATE가 되지 않고 KEY 중복 에러가 발생한다.  ALTER TABLE 이나 DDL 문은 허용되지 않는다.  Query Cache를 이용하지 않고, 쿼리가 실행될 때마다 매번 데이터를 다시 읽는다.  사용자 정의 파티션을 지원하지 않는다.  Federated table를 이용하면 remote에 있는 모든 데이터를 local로 가져온다.  인덱스를 지원한다.  local의 연결이 종료돼도 remote의 연결은 남아있으며, remote에 남아있는 연결은 remote server의 timeout 설정에 따라서 추후에 정리된다.
  • 9. - 8/17 - Federated Table 동작 원리  테스트를 통한 Federated Table의 동작 원리를 이해하기 위해 테스트용 테이블을 생성한다. Remote Server create table remoteschema.t1 ( id int unsigned not null auto_increment primary key ,c1 int ,c2 varchar(100) ) engine=innodb default charset=utf8; Local Server create table localschema.federated_t1 ( id int unsigned not null auto_increment primary key ,c1 int ,c2 varchar(100) ) engine=federated default charset=utf8 connection = 'mysql://remoteuser:remotepass@127.0.0.1:3307/remoteschema/t1';
  • 10. - 9/17 - Federated Table 동작 원리  INSERT ~ SELECT ~ 문의 처리  입력될 모든 데이터를 가져와서 리터럴 변수를 이용한 INSERT문 처럼 만들어서 처리한다. Local Server insert into localschema.federated_t1 (c1, c2) select @rownum:=@rownum+1 as id ,a.table_name from information_schema.tables a ,(select @rownum := 0) b limit 5; Remote Server 151126 13:53:49 2 Connect remoteuser@localhost as anonymous on remoteschema 2 Query SET AUTOCOMMIT=0 2 Query SAVEPOINT save1 2 Query INSERT INTO `t1` (`id`, `c1`, `c2`) VALUES (0, 1 , 'ALL_PLUGINS') 2 Query INSERT INTO `t1` (`id`, `c1`, `c2`) VALUES (0, 2 , 'APPLICABLE_ROLES') , (0, 3 , 'CHARACTER_SETS') , (0, 4 , 'CLIENT_STATISTICS') , (0, 5 , 'COLLATIONS') 2 Query COMMIT
  • 11. - 10/17 - Federated Table 동작 원리  LAST_INSERT_ID() federated를 이용해서 auto_increment가 포함된 테이블에 데이터를 입력하고 last_insert_id()를 확인해보면 federated를 통해서 입력된 테이블의 last_insert_id()가 나오지 않고 다른 값이 나온다. 즉, federated를 이용할 때는 last_insert_id()를 사용할 수 없다.  SELECT문의 처리 : 인덱스가 있는 컬럼이 조건으로 사용되는 경우 Local Server select * from localschema.federated_t1 where id = 1; Remote Server 151126 14:31:06 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE (`id` = 1) Local Server select * from localschema.federated_t1 where id between 3 and 6; Remote Server 151126 14:32:05 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` >= 3) ) AND ( (`id` <= 6) )
  • 12. - 11/17 - Federated Table 동작 원리  SELECT문의 처리: limit을 사용하는 경우 = remote에 있는 모든 데이터를 local로 읽어온 후에 1건을 반환한다.  SELECT문의 처리: 인덱스가 없는 컬럼을 조건으로 사용하는 경우 = remote의 모든 데이터를 local로 가져온 후에 처리한다. Local Server select c2 from localschema.federated_t1 limit 1; Remote Server 151126 14:33:11 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` Local Server select c2 from localschema.federated_t1 where c2 like 'ALL%'; Remote Server 151126 14:34:16 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1`
  • 13. - 12/17 - Federated Table 동작 원리  SELECT문의 처리: 인덱스가 없던 컬럼에 인덱스를 생성하는 경우  remote에서 인덱스가 없던 컬럼에 인덱스를 생성한 후에 데이터를 조회해도 local에서는 여전히 인덱스가 없는 것으로 인식하여 remote의 모든 데이터를 local로 가져온 후에 처리한다. Remote Server create index t1_idx on remoteschema.t1 (c2); Local Server select c2 from localschema.federated_t1 where c2 like 'ALL%'; Remote Server 151126 14:36:30 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1`
  • 14. - 13/17 - Federated Table 동작 원리  SELECT문의 처리: 인덱스가 없던 컬럼에 인덱스를 생성하는 경우  인덱스 정보를 추가해서 Federated table을 재생성하면 인덱스를 인식하여 remote에서 인덱스를 사용해서 필요한 데이터만 읽어서 local로 가져온다. Remote Server drop table if exists localschema.federated_t1; create table localschema.federated_t1 ( id int unsigned not null auto_increment primary key ,c1 int ,c2 varchar(100) ,INDEX t1_idx (c2) ) engine=federated default charset=utf8 connection = 'mysql://remoteuser:remotepass@127.0.0.1:3307/remoteschema/t1'; Local Server select c2 from localschema.federated_t1 where c2 like 'ALL%'; Remote Server 151126 14:42:06 6 Query SHOW TABLE STATUS LIKE 't1' 6 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`c2` >= 'ALL000...000') ) AND ( (`c2` <= 'ALL...') )
  • 15. - 14/17 - Federated Table 동작 원리  DELETE문의 처리  remote server에서 바로 delete문을 처리하는 것이 아니라 조건에 해당되는 데이터를 remote에서 local로 모두 읽어온 후에 다시 조건을 주고 remote에서 처리한다. Local Server delete from localschema.federated_t1 where c2 like 'ALL%'; Remote Server 151126 14:43:19 6 Query SET AUTOCOMMIT=0 6 Query SAVEPOINT save1 6 Query SHOW TABLE STATUS LIKE 't1' 6 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`c2` >= 'ALL000...000') ) AND ( (`c2` <= 'ALL...') ) 6 Query DELETE FROM `t1` WHERE `id` = 1 AND `c2` = 'ALL_PLUGINS' LIMIT 1 6 Query DELETE FROM `t1` WHERE `id` = 11 AND `c2` = 'ALL_PLUGINS' LIMIT 1 6 Query DELETE FROM `t1` WHERE `id` = 16 AND `c2` = 'ALL_PLUGINS' LIMIT 1 6 Query DELETE FROM `t1` WHERE `id` = 21 AND `c2` = 'ALL_PLUGINS' LIMIT 1 6 Query COMMIT
  • 16. - 15/17 - Federated Table 동작 원리  UPDATE문의 처리  remote server에서 바로 update문을 처리하는 것이 아니라 조건에 해당되는 데이터를 remote에서 local로 모두 읽어온 후에 다시 조건을 주고 remote에서 처리한다. Local Server update localschema.federated_t1 set c2 = 'X' where c2 like 'ENGINE%'; Remote Server 151126 14:45:06 6 Query SAVEPOINT save1 6 Query SHOW TABLE STATUS LIKE 't1' 6 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`c2` >= 'ENGINE000...000') ) AND ( (`c2` <= 'ENGINE...') ) 6 Query UPDATE `t1` SET `c2` = 'X' WHERE `id` = 10 AND `c2` = 'ENGINES' 6 Query COMMIT
  • 17. - 16/17 - Routine 안에서 Federated Table 사용될 때 remote에서의 처리 Local Server MainBlock: BEGIN ... 생략 ... DECLARE out_cursor CURSOR FOR select id from localschema.federated_t1; ... 생략 ... OPEN out_cursor; outLoopBlock: LOOP FETCH out_cursor INTO v_out_value; ... 생략 ... update localschema.federated_t1 set c1 = 9 where id = v_out_value; END LOOP outLoopBlock; END MainBlock Remote Server 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` 2 Query SET AUTOCOMMIT=0 2 Query SAVEPOINT save1 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` = 2) ) AND ( (1=1) ) 2 Query UPDATE `t1` SET `c1` = 2 WHERE `id` = 2 2 Query COMMIT 2 Query SAVEPOINT save1 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` = 3) ) AND ( (1=1) ) 2 Query UPDATE `t1` SET `c1` = 3 WHERE `id` = 3 2 Query COMMIT 2 Query SAVEPOINT save1 2 Query SHOW TABLE STATUS LIKE 't1' 2 Query SELECT `id`, `c1`, `c2` FROM `t1` WHERE ( (`id` = 4) ) AND ( (1=1) )