• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 1. InnoDB 소개
    2. InnoDB의 개념과 아키텍처
    3. InnoDB 구성
    4. InnoDB 관리
    5. InnoDB 테이블 스페이스 관리
    6. InnoDB 테이블 관리
    7. InnoDB 압축 테이블
    8. InnoDB 파일 형식 관리
    9. InnoDB Row Storage and Row Formats
    10. InnoDB 디스크 I/O 및 파일 영역 관리
    11. InnoDB와 온라인 DDL
    12. InnoDB 부팅 옵션 및 시스템 변수
    13. InnoDB의 성능
    14. InnoDB INFORMATION_SCHEMA 테이블
    15. InnoDB 모니터
    16. InnoDB 백업 및 복구
    17. InnoDB와 MySQL 복제
    18. InnoDB 및 memcached의 통합
    1. InnoDB 및 memcached 조합의 장점
    2. InnoDB 및 memcached의 통합 아키텍처
    3. InnoDB Memcached 플러그인의 개요
    4. InnoDB memcached 플러그인의 보안 고려 사항
    5. InnoDB memcached 인터페이스용 응용 프로그램 만들기
    1. memcached 응용 프로그램에 대한 기존의 MySQL 스키마 변경
    2. 통합 memcached 데몬에 대한 기존 memcached 응용 프로그램의 수정
    3. InnoDB memcached 플러그인 성능 조정
    4. InnoDB memcached 플러그인의 트랜잭션 동작 제어
    5. memcached 조작에 맞춘 DML 문 수정
    6. 기반이되는 InnoDB 테이블의 DML 및 DDL 문 실행
    6. 복제에서 InnoDB memcached 플러그인 사용
    7. InnoDB memcached 플러그인 내부 구조
    8. InnoDB memcached 플러그인 문제 해결
    19. InnoDB 문제 해결
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

14.18.5.4 InnoDB memcached 플러그인의 트랜잭션 동작 제어

기존의 memcached와 달리 InnoDB + memcached의 조합을 사용하면 add , set , incr 등의 호출을 사용하여 생성 된 데이터 값의 "지속성"을 제어 할 수 있습니다. MySQL은 데이터의 지속성과 일관성에 높은 우선 순위를두고 있기 때문에 기본적으로는 memcached 인터페이스를 통해 기록되는 모든 데이터는 항상 디스크에 저장되며 get 호출은 디스크의 최신 값을 항상 반환합니다. 이 기본 설정은 본래의 성능을 가능한 한 높일 수 없지만, InnoDB 테이블의 기존 SQL 인터페이스에 비해 매우 빠릅니다.

이 기능을 사용하여 나감으로써 기능이 정지 한 경우 일부 업데이트 된 값을 잃거나 오래된 데이터를 반환 할 위험을 인식하고 중요하지 않은 데이터의 지속성 설정 완화 할 수 있습니다.

커밋 빈도

지속성과 본래의 성능을 양립시키는 하나의 조건은 새로운 데이터 나 변경된 데이터가 커밋 되는 빈도입니다. 중요한 데이터의 경우 데이터를 즉시 커밋하여 충돌 또는 기능 정지 발생시 데이터를 보호해야합니다. 충돌 후 리셋되는 카운터 나 수초 분 손실해도 지장이없는 로깅 데이터 등의 그다지 중요하지 않은 데이터의 경우 커밋의 빈도를 낮추고 본래의 처리량을 높이는 것이 좋을 수도 있습니다.

memcached 작업은베이스가되는 InnoDB 테이블에서 삽입, 업데이트 또는 삭제할 경우, 그 변경은 즉시 ( daemon_memcached_w_batch_size=1 의 경우) 또는 나중에 (이 구성 옵션 값이 1보다 큰 경우) 기초 테이블에 커밋됩니다. 두 경우 모두, 변경은 롤백 할 수 없습니다. 혼잡시의 높은 I / O 오버 헤드를 피하기 위해 daemon_memcached_w_batch_size=1 의 값을 늘리면 워크로드를 감소시 커밋의 빈도가 매우 저하 될 수 있습니다. 안전망으로 백그라운드 스레드에서 memcached API를 통해 수행 한 변경을 일정한 간격으로 자동으로 커밋합니다. 간격은 innodb_api_bk_commit_interval 구성 옵션에 의해 제어되며, 기본값은 5 초입니다.

memcached 작업은베이스가되는 InnoDB 테이블에 삽입 또는 갱신이 발생했을 경우, 변경된 데이터는 다른 memcached 요청에 의해 즉시 표시됩니다. 이것은 새로운 값은 MySQL에서 아직 커밋되지 않더라도 메모리 캐시에 남아 있기 때문입니다.

트랜잭션 격리

get 과 incr 등의 memcached 작업은베이스가되는 InnoDB 테이블에서 쿼리 또는 DML 작업을 수행 할 경우 테이블에 기록 된 최신 데이터를 보거나 커밋 된 데이터 만 표시 다른 트랜잭션 격리 수준 표시를 제어 할 수 있습니다. 이 기능은 innodb_api_trx_level 구성 옵션을 사용하여 제어합니다. 이 옵션에 지정된 값은 REPEATABLE READ 와 같이 설명 격리 수준 이름에 해당합니다. 전체 목록은 innodb_api_trx_level 옵션의 설명을 참조하십시오.

격리 수준의 엄격 성이 높아지면 취득한 데이터가 갑자기 롤백하거나 변경하고 후속 쿼리에서 다른 값이 표시 될 수 없습니다. 그러나 기술적 가능성이 높다고 잠금 오버 헤드가 커 대기가 발생합니다. 장기간에 걸친 트랜잭션을 사용하지 NoSQL 스타일의 응용 프로그램은 일반적으로 기본 격리 수준으로 유지하거나 낮은 엄밀성로 전환 할 수 있습니다.

memcached DML 작업 행 잠금 해제

innodb_api_disable_rowlock 옵션은 InnoDB memcached가 DML 작업을 수행 할 때 행 잠금을 해제 할 수 있습니다. 기본적으로 innodb_api_disable_rowlock 는 OFF 로 설정되어 있으며, memcached가 get 및 set 작업 행 잠금을 요청합니다. innodb_api_disable_rowlock 를 ON 으로 설정하면 memcached 행 잠금 대신 테이블 잠금을 요청합니다.

innodb_api_disable_rowlock 옵션은 동적하지 않습니다. mysqld 명령 줄에서 시작시 지정하거나 MySQL 구성 파일에 입력해야합니다.

DDL 허용 또는 금지

기본적으로 InnoDB memcached 플러그인에 의해 사용되는 테이블에서 ALTER TABLE 등의 DDL 작업을 수행 할 수 있습니다. 처리량이 높은 응용 프로그램에서 테이블 사용시의 잠재적 인 속도 저하를 방지하려면 innodb_api_enable_mdl 구성 옵션을 시작할 때 선택하면 테이블의 DDL 작업을 중지 할 수 있습니다. 이 옵션은 memcached 인터페이스 및 SQL에서 동일한 기초 테이블에 액세스하는 경우는 그다지 적절하지는 않습니다. 이 옵션은 보고서 작성 쿼리를 실행하는 시스템의 구성에서 중요 할 테이블의 CREATE INDEX 문을 차단하기 때문입니다.

디스크, 메모리, 또는 모두에 데이터 저장

테이블 innodb_memcache.cache_policies 는 memcached에서 기록 된 데이터가 디스크에 저장되거나 (기본, innodb_only ) 기존의 memcached처럼 메모리에만 저장되거나 ( cache-only ) 또는 둘 다에 저장됩니다 루카 ( caching )을 지정합니다.

caching 설정은 memcached가 메모리 내에서 키를 찾을 수없는 경우, InnoDB 테이블에서 값을 검색합니다. caching 설정 get 호출에서 반환 된 값은 디스크의 InnoDB 테이블에서 업데이트되고 메모리 캐시에서 아직 만료되지 않은 경우, 값이 최신 않을 수 있습니다.

캐시 정책은 get , set ( incr 및 decr 포함), delete 및 flush 조작으로 개별적으로 설정할 수 있습니다. 예 :

  • get 및 set 작업은 ( caching 설정을 사용하여) 테이블 및 memcached 메모리 캐시에 대한 쿼리 또는 갱신을 동시에 수행하면서 delete , flush 또는 이들 모두 ( cache_only 설정을 사용하여) 인 메모리 복사에서만 작동 할 수 있습니다. 이렇게하여 항목을 삭제하거나 플래시하면 단순히 캐시 만료 항목이 다음 요청한 때 최신 값이 InnoDB 테이블에서 반환됩니다.

mysql> desc innodb_memcache.cache_policies;
+---------------+-------------------------------------------------------+------+-----+---------+-------+
| Field         | Type                                                  | Null | Key | Default | Extra |
+---------------+-------------------------------------------------------+------+-----+---------+-------+
| policy_name   | varchar(40)                                           | NO   | PRI | NULL    |       |
| get_policy    | enum('innodb_only','cache_only','caching','disabled') | NO   |     | NULL    |       |
| set_policy    | enum('innodb_only','cache_only','caching','disabled') | NO   |     | NULL    |       |
| delete_policy | enum('innodb_only','cache_only','caching','disabled') | NO   |     | NULL    |       |
| flush_policy  | enum('innodb_only','cache_only','caching','disabled') | NO   |     | NULL    |       |
+---------------+-------------------------------------------------------+------+-----+---------+-------+

mysql> select * from innodb_memcache.cache_policies;
+--------------+-------------+-------------+---------------+--------------+
| policy_name  | get_policy  | set_policy  | delete_policy | flush_policy |
+--------------+-------------+-------------+---------------+--------------+
| cache_policy | innodb_only | innodb_only | innodb_only   | innodb_only  |
+--------------+-------------+-------------+---------------+--------------+

mysql> update innodb_memcache.cache_policies set set_policy = 'caching'
    -> where policy_name = 'cache_policy';

cache_policies 값은 시작할 때만 읽고 memcached 플러그인의 동작과 긴밀하게 통합되어 있습니다. 이 테이블의 값을 변경 한 후에 플러그인을 제거하고 다시 설치합니다.

 mysql> uninstall plugin daemon_memcached;
 Query OK, 0 rows affected (2.00 sec)
 mysql> install plugin daemon_memcached soname "libmemcached.so";
 Query OK, 0 rows affected (0.00 sec)


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved