MySQL-쿼리 속도 테스트를 위해 캐시를 사용하지 마십시오


343

MySQL에서 일부 쿼리의 속도를 테스트하고 있습니다. 데이터베이스는 이러한 쿼리를 캐싱하여 이러한 쿼리의 속도를 테스트 할 때 신뢰할 수있는 결과를 얻기가 어렵습니다.

쿼리 캐싱을 비활성화하는 방법이 있습니까?

시스템 : Linux 웹 호스팅의 MySQL 4, PHPMyAdmin에 액세스 할 수 있습니다.

감사

mysql 

답변:


527

쿼리에서 SQL_NO_CACHE (MySQL 5.7) 옵션을 사용해보십시오 . (MySQL 5.6 사용자는 여기를 클릭하십시오 )

예.

SELECT SQL_NO_CACHE * FROM TABLE

이렇게하면 MySQL 캐싱 결과가 중지되지만 다른 OS 및 디스크 캐시도 성능에 영향을 줄 수 있습니다. 이것들은 돌아 다니기가 더 어렵습니다.



4
mysql 쿼리 캐시에 대한 좋은 기사. 캐시를 설정하고 확인하는 방법! 읽을만한 가치가 있습니다. databasejournal.com/features/mysql/article.php/3110171/…
Adrian P.

1
성능을 향상시키기 전에 mysql 서버를 다시 시작하십시오. 일부 프로세스가 모든 것에 영향을 줄 수 있습니다. 그것은 나와 함께 일어났다. 이 문제와 직접적인 관련이없는 의견이지만 많은 사람들에게 도움이 될 수 있습니다.
dellasavia

2
결과 캐싱을 중지하지만 캐시 사용을 중지 합니까?
Brett

3
@Brett는 SalmanPK의 의견을 '11 년에 보았습니다. 해당 문서 페이지는 말 그대로 4 문장이며 질문에 직접 대답합니다. 나중에 페이지가 제거되는 경우 : "결과가 이미 캐시되어 있는지 여부를 확인하기 위해 쿼리 캐시를 검사하지도 않고 쿼리 결과를 캐시하지도 않습니다."
모리스

121

현재 연결에만 영향을 미치는 다른 대안 :

SET SESSION query_cache_type=0;

내 잘못이야. 그것은이었다 query_cache_size내가에 있지보고 있었다 query_cache_type. 나는 당신과 SeniorDev의 대답을 섞고있었습니다.
Mike


30

구성 옵션도 있습니다 : query_cache_size = 0

서버 시작시 쿼리 캐시를 비활성화하려면 query_cache_size 시스템 변수를 0으로 설정하십시오. 쿼리 캐시 코드를 비활성화하면 눈에 띄는 오버 헤드가 없습니다. 소스에서 MySQL을 빌드하는 경우 --without-query-cache 옵션으로 configure를 호출하여 쿼리 캐시 기능을 서버에서 완전히 제외 할 수 있습니다.

http://dev.mysql.com/doc/refman/5.1/en/query-cache.html을 참조 하십시오


24

follow 명령을 실행하여 쿼리 캐시를 재설정 할 수도 있습니다.

RESET QUERY CACHE

9
이것은 아마도 과잉입니다 ... 이상적으로는 MySQL이 캐시를 일시적으로 무시하기를 원합니다.
BMiner

3
이에 대한 특별 권한도 필요합니다.
Erick Robertson

19

한 가지 문제

SELECT SQL_NO_CACHE * FROM TABLE

방법은 쿼리 결과가 캐시되는 것을 막는 것 같습니다. 그러나 테스트하려는 쿼리에 적극적으로 사용중인 데이터베이스를 쿼리하는 경우 다른 클라이언트가 쿼리를 캐시하여 결과에 영향을 줄 수 있습니다. 나는이 문제를 계속 연구하고 있으며,이 게시물을 알아 내면이 게시물을 편집 할 것입니다.


1
그러나 다른 사람들이 캐시를 가득 채운다면, 빠른 속도라는 착각을 얻게 될 것입니다. 그러나 때로는 그렇지 않습니다.
karatedog

14

나는 다음을 사용한다 :

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

3

쿼리 내에서 사용자 정의 변수를 사용하면 쿼리를 다시 캐시 할 수 없습니다. 나는 그것을 사용하는 것보다 훨씬 더 좋은 지표를 찾았습니다 SQL_NO_CACHE. 그러나 변수 설정이 성능에 크게 영향을 미치지 않는 곳에 변수를 배치해야합니다.

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;

3
"나는 그것을 사용하는 것보다 훨씬 더 좋은 지표를 찾았습니다 SQL_NO_CACHE." 어떻게 요? 명백한 키워드가 주장하는 것을 수행하지 않는 한 명시 적 키워드에 대해 모호한 해킹을 사용하려면 꽤 강력한 사례가 필요한 것 같습니다.
Air

1
@Air 나는이 솔루션이 SQL_NO_CACHE보다 더 잘 작동한다는 것을 알았습니다. SQL_NO_CACHE는 처음으로 쿼리를 실행했지만 그 후에는 다시 작동하지 않았습니다. 나는 이것이 다른 캐싱 메커니즘 때문이라고 가정합니다. 변수에 의존하는 검색은 어떤 계층이나 메커니즘으로도 캐시 할 수 없기 때문에 이것이 더 잘 작동한다고 생각합니다. 적어도 내 최선의 추측입니다.
Klik

2

쿼리 캐시를 비활성화하려면 mysql 구성 파일에서 'query_cache_size'를 0으로 설정하십시오. 설정이 0이면 mysql은 쿼리 캐시를 사용하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.