2012-07-31 5 views
2

쿼리 속도 테스트를 위해 mysql 쿼리 캐시를 비활성화해야합니다. 난 이미 다음하지만 성공하지mysql 캐시를 비활성화하십시오.

  1. 선택 SQL_NO_CACHE의 COL1은, 테이블에서 COL2는
  2. 0 및 OFF로 'query_cache_size를'로 설정 변수 query_cache_type을했다 그래서 모든 qcache 변수를 보여 제로 SHOW 상태 LIKE를 시도했다 '% qcache %';
    Qcache_free_blocks 0 Qcache_free_memory 0 해서 qcache_hits 0 Qcache_inserts 0 Qcache_lowmem_prunes 0 Qcache_not_cached 0 Qcache_queries_in_cache 0 Qcache_total_blocks 0

3.used, '플러시 쿼리 캐시', 플러시 테이블 '쿼리 캐시를 재설정'; 역시 이지만 여전히 내 쿼리가 캐싱 중임을 의미하는 처음보다 빠르게 실행됩니다.

4.all qcache 변수는 항상 0으로 유지됩니다. 내가 무엇을 놓치고 있습니까? 도와주세요.

답변

3

동일한 쿼리를 연속해서 실행하면 쿼리 결과가 캐시되거나 쿼리 캐시에서 쿼리가 후속 실행된다는 의미는 아닙니다.

쿼리를 처음 실행할 때 액세스해야하는 인덱스 및/또는 데이터 블록이 InnoDB 버퍼 풀이나 MyISAM 키 캐시에 없기 때문에 디스크에서 검색해야 할 수도 있습니다. 이 블록들은 InnoDB 버퍼 풀과 MyISAM 키 캐시에 MySQL 쿼리 캐시와 완전히 독립적으로 남아있게된다. 해당 블록에 대한 후속 액세스는 여전히 메모리에 남아있는 경우 더 빨리 리턴 할 수 있습니다.


일반적으로, 당신은 InnoDB의 버퍼 풀 또는 성능을 측정 할 수있는의 MyISAM 키 캐시에서 블록을 플러시하고 싶지 않아요. 오히려 쿼리를 여러 번 실행하고 첫 번째 실행 시간을 버리기를 원합니다.

InnoDB 버퍼 풀이나 MyISAM 키 캐시에서 블록을 시작하지 않으려면 MySQL 서버를 종료했다가 다시 시작하십시오.

비록 그 블록이 InnoDB 버퍼 풀이나 MyISAM 키 캐시에 없다고하더라도, 그 블록들은 여전히 ​​OS 파일 시스템 캐시의 "메모리"에있을 수 있습니다. 따라서 디스크에서 블록을 읽으려면 OS 파일 시스템 캐시도 플러시해야합니다. 다음


오라클에 관한 톰 카이트 (AskTom) 기사에서 발췌 한 것입니다,하지만 같은 논리는 (MySQL을 포함) 기타 RDBMS 시스템에 대한 진정한 보유하고 있습니다.

http://www.oracle.com/technetwork/issue-archive/o43asktom-094944.html

캐시 플러시

Q :는 [버퍼 캐시]를 세척하는 방법이 있는가? ... 이것은 여러 가지 방법을 시도하는 튜닝 연습에서 중요하지만 데이터베이스를 다시 시작하지 않고 버퍼에있는 기존 블록의 영향을 줄이려합니다.

대답 : 실제로 튜닝 도구는 그렇게하지 않는 것이 중요합니다. 테스트를 실행하고 결과를 무시한 다음 2 ~ 3 회 실행하고 평균을내는 것이 중요합니다. 실제 환경에서는 버퍼 캐시에 결과가 전혀 없습니다. 못. 조정할 때 논리 I/O (LIO)를 줄이는 것이 목표입니다. 물리적 I/O (PIO)가 자체적으로 처리하므로 논리 I/O (LIO)를 줄이는 것이 목표입니다.

고려 : 공유 풀 및 버퍼 캐시를 플러시하는 것은 플러시하지 않는 것보다 훨씬 더 인위적입니다. 대부분의 사람들은 평범한 지혜에 직면하기 때문에 이것에 회의적으로 보입니다. 이 방법을 알려 드리지만 테스트에는 사용할 수 없습니다. 오히려, 나는 그것이 무의미하고 완전히 인공적인 운동 인 이유를 설명하기 위해 그것을 사용할 것이다. 그러므로 잘못된 가정에 이르게한다. 방금 PC를 시작했고 큰 테이블에 대해이 쿼리를 실행했습니다. 버퍼 캐시를 "플러시"하고 다시 실행하십시오.

+0

을보기 때문에 그래서 난 쿼리 반복 걸리는 더 많거나 적은 같은 시간을 얻을 수있는 버퍼에이 블록을 취소 할 가능성이있다. 예인 경우이를 지우는 변수입니다. 그렇지 않다면 어떻게 mysql 쿼리 성능을 테스트 할 수 있을까요? – ramky

0

Linux에 있습니까? 또한 OS 디스크 캐시를 플러시하려고 :

$ sync && sysctl -w vm.drop_caches = 3 

this post

관련 문제