14.18.5.3 InnoDB memcached 플러그인 성능 조정
InnoDB
및 memcached를 함께 사용하면 모든 데이터를 즉시 또는 잠시 후 디스크에 기록하므로 성능이 memcached만을 사용하는 경우보다 약간 낮습니다. InnoDB
memcached 플러그인의 튜닝은 동등한 SQL 조작보다 높은 성능을 달성하도록 설정하십시오.
벤치 마크에서는 쿼리 및 DML 조작 (삽입, 업데이트 및 삭제)은 모두 기존의 SQL보다 memcached 인터페이스를 통한 더 빠르게됩니다. 일반적으로 DML 작업이 더 속도가 크게 향상됩니다. 따라서 memcached 인터페이스를 사용하기 위해 먼저 변경하는 것이 좋은 응용 프로그램의 유형은 쓰기 작업이 많은 응용 프로그램입니다. 또한 이전 신뢰성이 우선되지 않으면 빠르고 가벼운 메커니즘을 사용하여 쓰기 작업이 많은 응용 프로그램 유형에서는 MySQL을 데이터 저장소로 사용하는 경우도 있습니다.
SQL 쿼리 변경
간단한 GET
요청 스타일의 가장 적합한 쿼리 유형은 단 한 마디 또는 AND
조건 세트를 WHERE
절에 지정한 것입니다.
SQL : select col from tbl where key = 'key_value'; memcached : GET key_value SQL : select col from tbl where col1 = val1 and col2 = val2 and col3 = val3; memcached : # Since you must always know these 3 values to look up the key, # combine them into a unique string and use that as the key # for all ADD, SET and GET operations. key_value = val1 + ":"+ val2 + ":"+ val3 GET key_value SQL : select 'key exists!'from tbl where exists (select col1 from tbl where key = 'key_value') limit 1; memcached : # Test for existence of key by asking for its value and checking if the call succeeds, # ignoring the value itself. For existence checking, you typically only store a very # short value such as "1". GET key_value
시스템 메모리 사용
최적의 성능을 얻으려면, InnoDB
memcached 플러그인 전형적인 데이터베이스 서버와 같이 구성된 시스템에 있어야하고 특히 innodb_buffer_pool_size
구성 옵션을 사용하여 대부분의 시스템 RAM을 InnoDB
버퍼 풀 에 할당 된 데이터베이스 서버에 배포합니다. 여러 기가 바이트의 버퍼 풀을 갖춘 시스템에서 대부분의 작업이 메모리에 캐시 된 데이터를 사용하는 경우 처리량이 최대가되도록 innodb_buffer_pool_instances
구성 옵션 값을 높게합니다.
중복 I / O 감소
InnoDB
는 충돌시의 높은 신뢰성과 높은 쓰기 작업시의 I / O 오버 헤드의 양의 균형을 선택할 수있는 설정이 있습니다. 예를 들어, 구성 옵션 innodb_doublewrite=0
및 innodb_flush_log_at_trx_commit=2
를 설정합니다. innodb_flush_method
옵션의 설정을 변경하여 성능을 측정합니다. 서버의 바이너리 로그 가 조정되지 않는 경우 innodb_support_xa=0
설정을 사용합니다.
테이블 조작의 I / O를 줄이고 튜닝 할 다른 방법은 섹션 8.5.7 "InnoDB 디스크 I / O 최적화" 를 참조하십시오.
트랜잭션 오버 헤드 감소
구성 옵션 daemon_memcached_r_batch_size
및 daemon_memcached_w_batch_size
대한 기본값 1에서 결과에 대한 최고의 신뢰성과 보관 또는 갱신되는 데이터의 안전을 보장합니다.
응용 프로그램의 유형에 따라 이러한 설정 중 하나 또는 모두를 늘리면 잦은 커밋 작업 비용을 절감 할 수 있습니다. 데이터 집약적 시스템에서는 SQL을 통해 행한 데이터에 변경이 memcached에 즉시 (즉, get
조작이 뒤 N
회 처리 될 때까지) 표시되지 않을 것을 확인하고 daemon_memcached_r_batch_size
을 늘릴 수 합니다. 모든 쓰기 작업을 확실하게 보관해야하는 데이터 처리의 경우 daemon_memcached_w_batch_size
설정 1을 유지합니다. 통계 분석에만 사용하는 대량의 업데이트를 처리하는 경우는 충돌시에 마지막 N
개의 업데이트가 손실 되어도 큰 문제가 아니기 때문에이 설정을 늘릴 수 있습니다.
예를 들어, 통행량이 많은 교량을 통과 교통량을 모니터하고 하루에 약 100,000 대의 차량을 기록하는 시스템에 대해 생각해 보겠습니다. 교통 패턴을 분석하기 위해 단순히 다른 종류의 차량을 세는 만 응용 프로그램의 경우 daemon_memcached_w_batch_size
를 1
에서 100
로 변경하면 커밋 작업의 I / O 오버 헤드를 99 % 줄일 수 있습니다. 의외의 기능 정지의 경우 최대 100 개의 레코드가 손실 되어도 허용 오차의 가능성이 있습니다. 한편, 각 차량에 대한 자동 요금 징수를 응용 프로그램에서 실행하는 경우 daemon_memcached_w_batch_size
설정을 1
로 유지하고 요금 징수의 기록을 즉시 디스크에 저장하는 것이 좋은 경우도 있습니다.
InnoDB
가 디스크에서 memcached 키 값을 구성하는 방법으로 인해 대량의 키가 생성되는 경우 데이터 항목을 응용 프로그램에서 키 값으로 정렬하고 정렬 한 순서대로 追加
하는 것이 어떤 순서로 키를 만드는 것보다 빨라집니다.
memslap 명령은 다양한 구성의 벤치 마크 편리합니다. 이것은 일반 memcached 배포의 일부이지만 MySQL Server에 포함되어 있지 않습니다. 또한 자신의 벤치 마크에서 사용할 수있는 샘플 키 / 값 쌍의 생성에 사용할 수 있습니다. 자세한 내용은 섹션 16.6.3.3.6 "libmemcached 명령 행 유틸리티" 를 참조하십시오.