본문 바로가기
MySql

MySQL의 느린 쿼리 로그에서 "SELECT / *! N SQL_NO_CACHE * / * FROM`mytable`"은 무엇을 의미합니까?

by 베이스 공부 2020. 9. 27.
반응형


log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1


Reading mysql slow query log from mysql-slow.log
Count: 1  Time=199.23s (199s)  Lock=0.00s (0s)  Rows=32513.0 (32513), ...
 SELECT /*!N SQL_NO_CACHE */ * FROM `mytable`

...

원본 mysql-slow.log 를 보면 전체 쿼리는 다음과 같습니다.

SELECT /*!40001 SQL_NO_CACHE */ * FROM `mytable`;

따라서 mysqldumpslow 는 숫자를 N 으로 대체했습니다 (유사한 쿼리 집계를 지원하기 위해).

따라서 질문은 해당 쿼리의 출처와 / *! 40001 SQL_NO_CACHE * / 비트의 의미입니다.

내가 알 수있는 한, 백업을 수행하던 mysqldump 명령 (따라서 캐시 된 데이터를 원하지 않음)에서 온 것일 수 있습니다. 그렇다면 32,000 행만 읽었으므로 왜 199 초가 걸렸을까요?

100 개, 50 개, 더 합리적인 3 개까지 다른 테이블에 대해 더 유사한 쿼리가 많이 있습니다. 대부분의 행은 약 10 ~ 20,000 개이며 가장 큰 행은 450,000 개입니다.

 

해결 방법

 

클라이언트 (백업 시스템)가 테이블의 모든 행을 읽어야하기 때문에 쿼리는 아마도 '느린'것입니다. 199 초가 소요됩니다.

다음과 같은 작업을 한 경우에 유의하십시오.

SELECT * FROM table LIMIT 100;

// read 50 rows

// sleep for 5 minutes

// read last 50 rows

위의 쿼리는 느린 로그에 나타납니다. 처음 시작할 때부터 끝날 수있을 때까지 (마지막 요청 된 행을 전송하여) 5 분이 걸렸기 때문입니다.

 

참조 페이지 https://stackoverflow.com/questions/8282788

 

 

반응형

댓글