MySQL 5.7.20 버전부터 deprecate 되었고 8.0 에서는 사라졌다.
쿼리를 Query Cache 에서 조회해보고 Query Cache에 있다면 Parsing, Optimizing, Executing 을 거치지 않고 결과를 반환한다.
좋지 않은가?
근데 왜 없어졌을까?
Query Cache 에서는 아래의 두 쿼리가 다르다고 판단한다.
SELECT * FROM TABLE
select * from table
Query Cache 에서 쿼리가 동일한 것으로 인식되기 위해서는 대소문자, 바이트 까지 동일해야한다.
쿼리 스트링이 같다고 해도 데이터베이스, 프로토콜버전, 디폴트 문자셋 등이 다른 경우도 다른 쿼리로 판단한다.
Query Cache 에 저장되어 있는 쿼리 결과의 대상 테이블의 변경 (INSERT, UPDATE, DELETE, ALTER TABLE, TRUNCATE 등등)이 발생할 경우 캐시에서 제거한다. 이때 다른 쓰레드에서 이 데이터를 참조하지 못하도록 Lock을 건다.
(Query Cache는 여러 세션이 공유하는 부분으로 동기화를 위해 Query Cache Lock을 건다.)
Query Cache Lock 이 풀릴때까지 Query Cache에 접근하는 쓰레드들은 "Waiting for query cache lock" 대기가 걸린다.
테이블 변경이 자주 발생하는 경우 Query Cache 를 사용하는 쿼리들의 대기 시간이 많아진다.
이런 문제 때문에 사라진듯하다.
'MySQL' 카테고리의 다른 글
lock session 찾기 (0) | 2022.10.01 |
---|---|
auto_increment 값 모니터링 (0) | 2022.09.28 |
Index Hint (0) | 2022.09.22 |
Metadata Lock 조회 (0) | 2022.09.22 |
MySQL JSON 사용시 주의사항 (0) | 2022.09.16 |