본문 바로가기
서버/리눅스

MySQL Cluster 7.1 Disk Data Storage 사용하기

by 사악신 2013. 6. 5.


기본적으로 MySQL Cluster 의 NDB 는 인덱스와 레코드 모두를 메모리에 상주시킨다. 만약, 대용량의 데이터를 취급하여야하는 경우라면 필시 메모리 부족 현상으로 인한 중단 현상(table is full)이 발생할 것이다. 따라서 데이터를 메모리 뿐만 아니라 디스크에 저장할 수 있는 기능이 필요하다. 물론, 이 외에도 노드 복구, 시스템 재시작시 다량 - 가령, 테라 바이트 - 의 데이터 처리 호율을 높이는 효과도 얻을 수 있다.(참고로 MySQL Cluster 데이터 노드의 권장 물리 메모리 용량은 16G 임, 아울러 데이터 노드간 1Gbit 랜 권장)


디스크 데이터를 사용하기 위하여 3가지 단계를 거친다.


1. Undo Log Gorup 생성

logfile group 을 만들고 하나 이상의 Undo 로그 파일을 해당 그룹에 추가한다.


CREATE LOGFILE GROUP lg_1

ADD UNDOFILE 'undo_1.log'

INITIAL_SIZE 16M

UNDO_BUFFER_SIZE 2M

ENGINE NDBCLUSTER;


ALTER LOGFILE GROUP lg_1

ADD UNDOFILE 'undo_2.log'

INITIAL_SIZE 12M

ENGINE NDBCLUSTER;


기본 INITIAL_SIZE 는 128MB 이고, UNDO_BUFFER_SIZE 는 8MB이다. alter 를 실행할 때마다 log 파일들이 각 데이터 노드에 생성된다. 그냥 디플트 값으로 logfile group 과 Undo 로그 파일을 하나씩 만들어 본다.


CREATE LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_1.log' ENGINE NDBCLUSTER;


생성된 결과 확인 방법은, config.ini 의 FileSystemPath 로 지정한 디렉토리 아래 ndb_노드ID_fs 디렉토리로 이동한 후 undo_1.log 파일이 존재하는지 확인한다. 모든 데이터 노드에 해당 파일이 생성되었으면 성공이다.



2. 테이블 스페이스 생성

 tablespace 를 만들때 log file group 을 할당하고 하나 이상의 데이터 파일을 추가한다.


CREATE TABLESPACE ts_1

ADD DATAFILE 'data_1.dat'

USE LOGFILE GROUP lg_1

INITIAL_SIZE 32M

ENGINE NDBCLUSTER;


ALTER TABLESPACE ts_1

ADD DATAFILE 'data_2.dat'

INITIAL_SIZE 48M

ENGINE NDBCLUSTER;


테이블 스페이스를 생성하고 1G 크기의 데이터 파일을 총 4개를 생성(그냥 1G 로 지정하면 에러가 발생한다. byte 단위로 계산하여 지정)한다. 운영중인 데이터베이스의 총 예상량을 고려하여 적당한 크기를 지정하면 된다.(기본 INITIAL_SIZE 는 128M 임)


CREATE TABLESPACE ts_1

ADD DATAFILE 'data_1.dat'

USE LOGFILE GROUP lg_1

INITIAL_SIZE 1073741824

ENGINE NDBCLUSTER;


ALTER TABLESPACE ts_1

ADD DATAFILE 'data_2.dat'

INITIAL_SIZE 1073741824

ENGINE NDBCLUSTER;


ALTER TABLESPACE ts_1

ADD DATAFILE 'data_3.dat'

INITIAL_SIZE 1073741824

ENGINE NDBCLUSTER;


ALTER TABLESPACE ts_1

ADD DATAFILE 'data_4.dat'

INITIAL_SIZE 1073741824

ENGINE NDBCLUSTER;


생성된 결과는, 상기와 동일한 경로에 dat 파일들이 존재하는지 확인하면 된다.



3. 테이블에 테이블 스페이스 지정

데이터 저장소로 상기 tablespace 를 사용하는 Disk Data table 을 만든다.


CREATE TABLE AAA (


어쩌구 저쩌구


)

TABLESPACE ts_1 STORAGE DISK

ENGINE NDBCLUSTER;


이를 이미 운영 중인 테이블에 적용해 보았다.(master data node 에서 실행, 가급적이면 처음 데이터베이스 구축시~ 디스크 사용을 할 것)


ALTER TABLE 테이블명 TABLESPACE ts_1 STORAGE DISK ENGINE NDBCLUSTER;


이 경우 인덱스가 걸려있는 칼럼은 모두 메모리에 올라가고 그 외는 디스크에 저장된다..(수정하는 경우라면, 마스터를 제외한 데이터 노드들을 종료하고 --initial 로 다시 실행하여야 함. 잘 안된다면 파일들까지 삭제...) 만약, 특정 칼럼을 메모리에 올리고 싶다면 다음과 같이 변경한다


ALTER TABLE 테이블명 MODIFY 칼럼명 칼럼타입 STORAGE MEMORY ENGINE NDBCLUSTER;


작업이 완료되었으면 제대로 반영이 되었는지 테이블을 확인한다.(각 데이터 노드에서...)


SHOW CREATE TABLE 테이블명;


작업 전과 후 데이터 노드의 메모리 사용량에 변화가 있는지도 확인해본다.





반응형

댓글