반응형

들어가며

SQL_CACHE란?

  • SELECT 쿼리에 SQL_CACHE라는 키워드(힌트)를 붙여 쿼리 결과를 캐싱해주는 기능을 말한다.
  • 동일 조건으로 조회할 경우 첫 조회에서만 Parsing, Optimizing, Executing 과정을 거치게 되므로 시간이 조금 걸리지만, 두 번째 조회시부터는 빠르게 조회를 할 수 있게 해준다.
  • MySQL 5.x 버전까지만 지원하고 8.x 버전부터는 사용되지 않는다.
  • 데이터 변경이 일어나는 쿼리를 수행한 경우 해당 테이블의 캐시는 제거된다.
    • ex) INSERT, UPDATE, DELETE, TRUNCATE, ALTER, DROP TABLE or DROP DATABASE

테스트

MySQL 설정

MySQL 설정 확인

  • query_cache_type이 OFF면 캐시 기능을 사용할 수 없으므로 확인 필요
  • 다른 설정들도 확인 후 변경이 필요하면 적절하게 변경 후 재확인
mysql> SHOW VARIABLES LIKE '%query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| have_query_cache             | YES      |
| query_cache_limit            | 16777216 |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33554432 |
| query_cache_type             | DEMAND   |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+

테스트 테이블 추가

CREATE TABLE User
(
    userSeq INTEGER UNSIGNED AUTO_INCREMENT,
    name    VARCHAR(100),
    PRIMARY KEY (userSeq)
);

테스트 데이터 추가

  • 편의상 자바 코드로 테스트 데이터 추가
IntStream
    .range(0, 100000)
    .forEach(value -> {
        jdbcTemplate.update("INSERT INTO User (name) VALUES (?)", UUID.randomUUID().toString());
    });

데이터 조회 - NO CACHE

  • 매 조회시마다 0.01초의 시간이 소요된다.
mysql> select count(*) from User;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.01 sec)

mysql> select count(*) from User;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.01 sec)

데이터 조회 - SQL_CACHE

  • 첫 조회시에만 0.01초의 시간이 소요되고, 두 번째부터는 시간이 소요되지 않는다.
mysql> select SQL_CACHE count(*) from User;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set, 1 warning (0.01 sec)

mysql> select SQL_CACHE count(*) from User;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set, 1 warning (0.00 sec)

참고

반응형

'Development > MySQL' 카테고리의 다른 글

[MySQL] Replication  (0) 2021.11.15
[MySQL] MATCH AGAINST  (0) 2021.10.31
[MySQL] Lock  (0) 2021.02.26
[MySQL] JOIN  (0) 2021.02.25
[MySQL] Storage Engine  (0) 2020.12.29

+ Recent posts