programing

MySQL - 쿼리 속도를 테스트하기 위해 캐시를 사용하지 않음

bestcode 2023. 2. 6. 23:33
반응형

MySQL - 쿼리 속도를 테스트하기 위해 캐시를 사용하지 않음

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

쿼리의 캐시를 비활성화하는 방법이 있습니까?

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

감사해요.

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

예:

SELECT SQL_NO_CACHE * FROM TABLE

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

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

SET SESSION query_cache_type=0;

현재 날짜/시간을 참조하면 해당 선택 항목에 대한 쿼리 캐시가 비활성화됩니다.

SELECT *,NOW() FROM TABLE

http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html에서 "MySQL Query Cache 사용을 위한 전제조건 및 주의사항"을 참조하십시오.

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

서버 부팅 시 쿼리 캐시를 비활성화하려면 query_cache_size 시스템 변수를 0으로 설정합니다.쿼리 캐시 코드를 디세블로 하면 현저한 오버헤드가 발생하지 않습니다.소스에서 MySQL을 빌드하는 경우 --without-query-cache 옵션을 사용하여 구성을 호출하여 쿼리 캐시 기능을 서버에서 완전히 제외할 수 있습니다.

http://dev.mysql.com/doc/refman/5.1/en/query-cache.html 를 참조해 주세요.

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

RESET QUERY CACHE

에 관한 한 가지 문제

SELECT SQL_NO_CACHE * FROM TABLE

방법은 쿼리 결과만 캐시되지 않도록 하는 것입니다.그러나 테스트할 쿼리와 함께 사용 중인 데이터베이스를 쿼리하는 경우, 다른 클라이언트가 쿼리를 캐시하여 결과에 영향을 줄 수 있습니다.저는 이 문제를 해결하기 위해 계속 연구하고 있으며, 만약 문제가 생기면 이 게시물을 편집할 것입니다.

다음을 사용합니다.

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

쿼리 내에서 사용자 정의 변수를 사용하면 쿼리 재캐시를 수행할 수 없게 됩니다.나는 그것을 사용하는 것보다 훨씬 더 좋은 지표라는 것을 알았다.SQL_NO_CACHE단, 변수 설정은 퍼포먼스에 큰 영향을 주지 않는 장소에 배치해야 합니다.

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

Query 캐시를 비활성화하려면 mysql 구성 파일에서 'query_cache_size'를 0으로 설정합니다.설정된 0 mysql일 경우 쿼리 캐시를 사용하지 않습니다.

좋은 답변도 있지만, 중요한 경고가 있습니다.

mysql 쿼리는 캐시되지 않을 수 있지만 기본 O는 차단되지 않습니다.디스크에 대한 액세스를 메모리에 캐싱합니다.이는 일부 쿼리의 경우 특히 회전 디스크에서 데이터를 가져와야 하는 경우 크게 느려질 수 있습니다.

따라서 위의 방법을 사용하는 것이 좋지만, 디스크에서 디스크/메모리 캐시로 풀리지 않는 데이터/범위 세트를 매번 사용하여 테스트합니다.

SQL 문자열을 변경해야 합니다.SQL 문자열은 캐시 키이기 때문입니다.예를 들어 SQL 설명에 타임스탬프를 추가합니다.

PHP의 기능:

function db_RunSQL($SQL, $NoCacheMode=false)
{
$SQL = (($NoCacheMode) ? '/*'.time().'*/ ' : '') . $SQL;
return mysqli_query(db_SavedConnect(), $SQL);
}

언급URL : https://stackoverflow.com/questions/181894/mysql-force-not-to-use-cache-for-testing-speed-of-query

반응형