티스토리 뷰
1. 쿼리 캐시란 ?
" SQL 실행결과를 미리 특정 공간에 저장해 놓고, 다음번 같은 문장으로 호출시 빠르게 해당 결과를 보여주는 것 "
(브라우저의 캐시개념으로 이해하면 될까)
(쿼리 구문을 파싱하여 저장하는것이 아니라, 쿼리 결과를 저장하는 것)
--------------------------------------
2. Query Cache 설정
MySQL 콘솔에서
mysql> SHOW VARIABLES LIKE 'query_cache%';
+------------------------------+---------+
| Variable_name | Value |
+------------------------------+---------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+---------+
5 rows in set (0.00 sec)
를 치면 위와같은 결과물을 볼 수 있다.
현재 나의 DB는 쿼리캐시가 OFF 되어있는 상태.
query_cache_type : OFF
이걸.. Set Global 명령어로 ON 시킨 후 쿼리 캐시 파일 Size 등을 적절히 조절하여 이용할 수 있다.
--------------------------------------
3. Query Cache 사용시 주의점
아래 두 구문은 다르게 캐싱된다.
> SELECT * FROM a;
> select * from a;
따라서, 개발(쿼리 수행)단에서 쿼리문 대소문자를 통일하여 작업하는 것도 중요함.
(이렇게 될 경우 같은 양의 데이터가 두번 저장될 것이다. 공간 낭비?)
또, 캐싱된 쿼리 Result는 해당 table이 Update 되면 소멸된다.
(예를들어.. 5초 걸리는 쿼리문이 있다.
>SELECT id, name FROM a;
이 쿼리는 수행하는데 5초가 걸린다. 그러나, 쿼리 캐시를 이용하면 아래와 같은 결과를 볼 수 있을 것이다.
>SELECT id, name FROM a;
xxx rows in set (5.00 sec)
>SELECT id, name FROM a;
xxx rows in set (0.00 sec)
근데..여기서 테이블의 업데이트가 이루어진다.
>UPDATE a name="이영우" WHERE id=22;
업데이트 한 후 다시 SELECT 를 해보자.
>SELECT id, name FROM a;
xxx rows in set (5.00 sec)
>SELECT id, name FROM a;
xxx rows in set (0.00 sec)
그럼.. 이전과 동일하게 첫 쿼리는 역시 5초가 걸린다.
이는 해당 테이블의 쿼리 캐싱이 소멸되었다는 것을 말한다..maybe)
즉, 쿼리 캐시는 데이터의 변동이 적은 Table을 같은 구문으로 여러번 SELECT 할 필요가 있는경우 매우 좋은 기능인듯 하다!!
--------------------------------------
4. 테스트
4-1. 테스트 결과 쿼리캐시는 하나의 연결에 대해서만 지원하는 듯 하다.
쉘을 두개 열어서 각 5초 정도 걸리는 Select 쿼리문을 날렸다.
A쉘에서 쿼리를 날렸을때 5초 정도 걸렸고, 마찬가지로 A 쉘에서 두번째 쿼리를 날렸을땐 쿼리캐시가 동작하여 0초 걸렸다.
이때, B쉘에서 같은 쿼리를 날렸을때 5초가 걸리고 다시 두번째 부터 0초가 걸린다..
따라서, 쿼리캐시는 하나의 쓰레드내에서 공유하는 것으로 보인다.
<즐거운 자동차 커뮤니티 잼카>
<즐거운 축구 커뮤니티 싸커라인>
'Computer > DataBase' 카테고리의 다른 글
(ORACLE) ORA-00119, ORA-00130 (0) | 2016.11.03 |
---|---|
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) (0) | 2016.09.16 |
(MySQL) to integer (정수 변환) (0) | 2016.07.27 |
(MYSQL) 초 -> 00:00:00 형식의 시분초로 변경하기 (1) | 2016.06.21 |
(MYSQL) 문자열 자르기 substr (0) | 2016.06.21 |
- Total
- Today
- Yesterday
- 깃헙
- linux
- Asterisk
- 앵커브리핑
- 안드로이드
- 스위프트
- mysql
- nodejs
- 리눅스
- 뉴스룸
- 손석희
- Kotlin
- C
- IOS
- 서버
- Android
- node.js
- git hub
- 배열
- php
- Phaser
- 노드
- CentOS
- 점유율
- Node
- GIT
- Swift
- BBC 가쉽
- xcode
- C언어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |