Skip to content

2011.04.09 21:32

Mysql - Query Cache

조회 수 18387 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Query Cache

MySQL 4.0.1부터 Query Cache라는 기능이 추가되었다.
이것은 최근에 실행된 select질의문과 그 결과를 메모리에 저장하는 기능이다.
자주 사용되는 질의문이라면 query cache로부터 결과값을 바로 불러들이므로 parsing, execution의 부하를 제거할 수 있다.
이때 사용되는 질의는 동일한 질의(identical queries)여야 적용된다.

query cache의 적용사례는 아주 풍부하다고 볼 수 있겠다.
뉴스의 헤드라인을 보여주거나, 게시판의 최근목록을 보여주는 메인페이지에 적용될 수 있다.
(테이블 변동이 자주 발생하지 않고 동일한 질의(identical queres)가 많은 경우)


* 동일한 질의(identical queries)
오라클의 경우가 같다고 생각하면 된다.
예를 들어, select * from test와 Select * from TEST는 대소문자가 다르므로 동일한 질의가 아니다.

1. 모든 문자(대소문자,스페이스,..)가 동일해야 한다.
2. 사용하는 데이터베이스, 통신프로토콜, 캐릭터셋이 동일해야 한다.

데이터가 변경되면, query cache내에 있는 관련된 모든 엔트리들이 flush되어지므로 항상 최신의 데이터를 가지고 있게 된다. 따라서, query cache가 잘못된 데이터(stale data:변경사항이 반영되지 않은 데이터)를 반환하는 경우는 없다.


query cache는 디폴트로 disable(query_cache_size=0)되어 있는데, query cache와 관련된 변수는 다음과 같다.
보통 query_cache_size변수값만 설정해주고, 나머지 변수들은 디폴트로 두면 된다.

query_cache_limit : 저장가능한 최대 results크기(디폴트:1M) 보통 query_cache_size의 1~10%정도 설정
query_cache_size  : results를 저장하기 위해 메모리 할당량. 0으로 지정하면 query cache를 disable함
query_cache_type  : 0(OFF)   : results를 캐쉬하거나 retrieve하지 않음.
                    1(ON)    : select sql_no_cache.. 쿼리를 제외한 모든 results를 캐쉬
                    2(DEMAND): select sql_cache... 쿼리만 캐쉬

설정파일
Unix: /etc/my.cnf
윈도: c:\winnt\my.ini(windows 2000인 경우)

설정예
query_cache_size = 0        (disable)
query_cache_size = 512K     (512 Kbytes)
query_cache_size = 10M      (10 Mbytes)


Query Cache와 관련된 명령어

flush query cache : query cache를 defragment
reset query cache : query cache를 clear
flush tables      : query cache를 flush
show status       : query cache 성능 모니터링

show status로 나온 변수중 query cache와 관련된 변수와 설명은 다음과 같다.
Qcache_queries_in_cache : 캐쉬내 등록된 쿼리수
Qcache_inserts          : 캐쉬에 추가된 쿼리수
Qcache_hits             : 캐쉬 히트수
Qcache_lowmem_prunes    : 메모리부족으로 인해 캐쉬로부터 삭제된 쿼리수
Qcache_not_cached       : 캐쉬되어지지 않은 쿼리수(query_cache_type으로 인한 경우나 캐쉬될수 없는 것일 경우)
Qcache_free_memory      : query cache의 free 메모리량
Qcache_total_blocks     : query cache가 가진 총블럭수
Qcache_free_blocks      : query cache가 가진 free 메모리 블럭수

총 쿼리수 = Qcache_inserts + Qcache_hits + Qcache_not_cached

Qcache_lowmem_prunes 변수값이 크다면 query cache 메모리가 부족하다는 의미이므로 query_cache_size를 늘여줄 필요가 있다.


query cache 되지 않는 경우

1. 질의가 다음의 함수를 포함할때
User-Defined Functions  
CONNECTION_ID  
FOUND_ROWS  
GET_LOCK  
RELEASE_LOCK  
LOAD_FILE  
MASTER_POS_WAIT  
NOW  
SYSDATE  
CURRENT_TIMESTAMP  
CURDATE  
CURRENT_DATE  
CURTIME  
CURRENT_TIME  
DATABASE  
ENCRYPT (with one parameter)  
LAST_INSERT_ID  
RAND  
UNIX_TIMESTAMP (without parameters)  
USER  
BENCHMARK  

2. mysql system database에 참조하거나 user variable을 포함할때

3. select ... in share mode이거나 select * from autoincrement_field is null 형태일때
TAG •

List of Articles
번호 제목 글쓴이 날짜 조회 수
86 mysql 설치 시 LinuxThreads 에러 ADMINPLAY 2008.10.30 6631
85 mysql 초간단 설치 ADMINPLAY 2009.10.15 6709
84 mysql 자세한 복구 방법 #1 ADMINPLAY 2008.11.11 6752
83 mysqladmin 사용하기 DB연결수 및 세부정보 알아내기 ADMINPLAY 2009.06.25 6845
82 mysql 버전 3.23.58 (4.0.X)설치 가 안되서 그러는데 ADMINPLAY 2009.07.14 6892
81 mysql 자주쓰는 명령어 정리 ADMINPLAY 2008.10.30 7170
80 mysql root에 아무권한이 없어 작업이 불가능한 경우 ADMINPLAY 2008.11.11 7188
79 MySQL 4.1 이상에서 한글 사용 ADMINPLAY 2009.09.28 7293
78 mysql 자세한 복구 방법 #2 ADMINPLAY 2008.11.11 7387
77 MySQL 테이블 복구하기 (쉴 프롬프트에서..) ADMINPLAY 2008.11.11 7456
76 MySQL 데이터베이스의 생성과 삭제 ADMINPLAY 2008.10.30 7669
75 mysql 테이블이 손상된 경우 myisamchk ADMINPLAY 2008.10.30 7671
74 MySQL Replication(복제) ADMINPLAY 2009.11.19 7794
73 Mysql 버전별 케릭터셋 지원여부 (euckr / utf-8) ADMINPLAY 2008.11.04 7836
72 InnoDB 에서 MyISAM 으로, 혹은 MyISAM 에서 InnoDB 로 DB 타입 변경 방법 ADMINPLAY 2013.11.08 7842
71 Mysql 비번 변경/비번분실시 ADMINPLAY 2009.06.29 7892
70 MySQL 최대성능 올리기 ADMINPLAY 2009.07.19 7929
69 MySQL Commercial License ADMINPLAY 2009.09.28 7991
68 MySQL Replication ADMINPLAY 2009.11.19 8092
67 Mysql max_connection 늘리기 ADMINPLAY 2008.11.11 8259
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234