반응형
들어가며
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 설정
- 설정 관련 상세 내용은 아래 링크에서 확인 가능
- my.cnf
[mysqld] query_cache_limit=16M query_cache_size=32M query_cache_type=DEMAND
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 |