동일한 쿼리를 연속해서 실행하면 쿼리 결과가 캐시되거나 쿼리 캐시에서 쿼리가 후속 실행된다는 의미는 아닙니다.
쿼리를 처음 실행할 때 액세스해야하는 인덱스 및/또는 데이터 블록이 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를 시작했고 큰 테이블에 대해이 쿼리를 실행했습니다. 버퍼 캐시를 "플러시"하고 다시 실행하십시오.
을보기 때문에 그래서 난 쿼리 반복 걸리는 더 많거나 적은 같은 시간을 얻을 수있는 버퍼에이 블록을 취소 할 가능성이있다. 예인 경우이를 지우는 변수입니다. 그렇지 않다면 어떻게 mysql 쿼리 성능을 테스트 할 수 있을까요? – ramky