Real MariaDB (2017년)
MEMCACHED 플러그인 0 0 50,401

by 구루비스터디 MariaDB 스토리지 엔진 MEMCACHED 플러그인 [2019.08.11]


6.5 Memcached 플러그인

  • PK 를 통한 검색 과 같은 단순한 쿼리의 반복 수행은 분석/최적화 부하가 상대적으로 큼
    • MariaDB 5.5 의 HandlerSocket 인터페이스 제공
    • MySQL 5.6 InnoDB 의 Memcached API 제공 (윈도우 미제공)


6.5.1 아키텍처

  • 모든 테이블 접근은 모든 스토리지 엔진을 위한 "핸들러 API" 계층 경유 (최적X)
    • Memcached 플러그인은 직접 InnoDB 스토리지 엔진 호출 (최적, MySQL 서버 프로세스 내 별도 스레드 형태)


Memcached 플러그인 기능 과 특성
  • MySQL 서버 프로세스 내 스레드로 작동 하므로 InnoDB 스토리지 엔진 접근 빠름
  • InnoDB API 직접 사용으로 빠름 (쿼리 분석/최적화, 핸들러 API 우회)
  • Memchached 텍스트/바이너리 프로토콜 지원, Memcapable 의 55개 호환성 테스트 통과
  • InnoDB 테이블의 멀티 컬럼을 구분자 활용하여 Memcached 의 Value 로 매핑 가능
  • Memcached 의 캐시 메모리와 InnoDB 버퍼 풀 메모리 조합 사용 가능
  • Memcached 옵션 지정 가능 : daemon_memcached_option 시스템 변수
  • Memcached 플러그 인으로 유입되는 요청의 격리 수준 설정 가능 (innodb_api_trx_level )


6.5.2 설치 및 테스트

  • libevent 1.4.3 이상 필요
  • 컴파일 시 "-DWITH_INNODB_MEMCACHED=ON" 옵션 필요
  • my.cnf


구분설정
TCP/IP 포트daemon_memcached_option = '-m 64 -p 11211 -c 200 -t 6'
Unix 소켓 파일daemon_memcached_option = '-m 64 -c 200 -t 6 -s /tmp/memcached.sock'


옵션
옵션설명비고
-m로컬 캐시 메모리 크기(단위: MB)MySQL 쿼리 캐시, InnoDB 버퍼 풀 무관
-pListen Port
-s유닉스 도메인 소켓 파일클라이언트가 로컬에 있을 때, 설정 시 -p 옵션 무시
-c최대 연결 수
-t사용자 요청 처리용 스레드 수200개 커넥션의 요청을 6개 스레드가 처리
-v, -vv, -vvv에러/에러+경고/에러+경고+진단 로그 출력MySQL 서버 에러 로그 사용


Memcached 플러그인 활성화
 
-- 메타 테이블 생성
mysql> SOURCE $[MYSQL_HOME]/share/innodb_memcached_config.sql

-- 플러그인 활성화
mysql> INSTALL PLUGIN daemon_memcached SONAME "libmemcached.so";


Memcached 플러그인 메타 테이블
메타 테이블설명비고
cache_policiesSET/GET/DELETE/FLUSH 에 대한 캐시 정책 설정
config_options레코드가 Memcached 프로토콜로 전송될 수 있도록 설정separator : 각 컬럼의 구분자 지정, table_map_delimiter : 키 명시
containersMemcached 플러그인이 INSERT/SELECT 할 테이블의 정보 관리


프로토콜
프로토콜설명비고
텍스트텍스트 기반, 단순함, 처음 부터 사용Endian 고려 불필요
바이너리CPU, 네트워크 대역폭 적게 사용


테스트

-- TCP/IP Port 접속
$ telnet localhost 11211

-- 데이터 입력 : key, flag, expire_time, byte_count, value
set matt 0 3600 12
Real MariaDB

-- 데이터 조회 : key
get matt

-- 데이터 삭제 : key
delete matt

-- 종료
quit

-- 유닉스 도메인  소켓 파일 접속
$ nc -U /tmp/memcached.sock


SET 명령 인자
인자설명비고
key아이템의 키최대 250 Byte
flag응용프로그램에서 활용 가능한 4바이트 정수 타입 필드
expire_time캐시 메모리에 유지할 시간 (초단위)259200 보다 작으면 상대 시간, 크면 unixtimestamp 로 인식
byte_count아이템의 값(value)의 전체 바이트최대 1MB
value아이템의 값


6.5.3 캐시 정책

  • Memcached 플러그인 자체 캐시 메모리 정책 (테이블 단위 설정 가능)
정책설명비고
innodb_onlyMemcached 플러그인 자체 캐시 무시SET 된 데이터는 즉시 InnoDB 에 영구 저장
cache_onlyMemcached 플러그인 캐시만 사용, InnoDB 의 데이터와 무관하게 동작MySQL 서버 재기동 시 데이터 초기화
cachingInnoDB 엔진, Memcached 플러그인 협업 동작먼저 Memcached 캐시 메모리 액세스 후 필요시 InnoDB 엔진 액세스
disabledMemcached 플러그인 안씀


6.5.4 사용자 테이블 등록

  • 초기화 스크립트(innodb_memcached_config.sql)는 test 데이터베이스 내 test_demo 테이블 생성 후 Memcached 플러그인에 등록.


Memcached 플러그인 적용 테이블, 키 컬럼 제약 사항
  • 키 값에 공백/줄바꿈 포함 불가
  • 키 타입은 정수, 문자열 만 가능
  • 키 컬럼은 PRIMARY KEY, UNIQUE KEY 생성 필수
  • 파티션 테이블 적용 불가


데모
 
create database my_service;
use my_service;

create table mc_store (
  c_key varchar(250) collate Latin1_bin not null,
  c_value mediumblob,
  c_flag int not null default '0'
  c_cas bigint unsigned not null default '0',
  c_expire int not null default '0',
  PRIMARY KEY (c_key)
) ENGINE = InnoDB STATS_PERSISTENT = 0;

use innodb_memcache;
insert into containers (name, db_schema, db_table, key_columns, value_columns, flags, cas_column, expire_time_column, unique_idx_name_on_key)
values ('default', 'my_service', 'mc_store', 'c_key', 'c_value', 'c_flag', 'c_ca', 'c_expire', 'PRIMARY');

-- containers.name = 'default'


  • Memcached 는 테이블 개념 없으나, MySQL 테이블과 매핑 수단 제공
    • @@product.A01 : product 테이블의 키가 'A01' 인 아이템
    • @@order.A01 : order 테이블의 키가 'A01' 인 아이템
    • A01 : default(유일한) 테이블의 키가 'A01' 인 아이템


6.5.5 관련 시스템 변수

변수
변수설명비고
daemon_memcached_optionMemcached 플러그인 기동 옵션
innodb_api_trx_levelMemcached 플러그인 커넥션 격리 수준 설정0:READ_UNCOMMITED, 1:READ_COMMITED, 2:REPEATABLE_READ, 3:SERIALIZABLE
daemon_memcached_{r,w}_batch_sizeCOMMIT 실행에 필요한 GET/SET 실행 수기본값:1, 중요하지 않은 데이터라면 값을 늘려서 성능 개선 가능
innodb_api_bk_commit_intervalMemcached 플러그인 관련 커넥션 일괄 커밋 Interval기본값:5초
innodb_api_enable_binlogMemcached 플러그인을 통한 변경 내용 바이너리 로그 기록 여부


"구루비 데이터베이스 스터디모임" 에서 2017년에 "Real MariaDB" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/4204

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입