참고로, 쿼리 캐시는 MySQL5.7.20부터 더이상 사용되지 않고, MySQL8.0에서 제거되었다.

 

 

* 쿼리 캐시는 SQL쿼리를 캐시하는 것이 아니라 쿼리의 결과를 메모리에 캐시해두는 기능이다. 

    - 요청된 쿼리 문장자체가 동일한지 여부를 비교할 때, 공백이나 탭과 같은 문자까지 모두 비교하며, 대소문자까지 완전히 동일해야 같은 쿼리로 인식한다.

    - 쿼리 결과가 캐시에 저장된 후 데이터가 변경되면, 캐시에 있는 데이터를 테이블 단위로 무효화(제거) 한다. 이 때문에 쿼리 결과값이 변경되는 경우가 잦아, 활용도가 낮기 때문에 제거되었다.

    - query_cache_size : 쿼리 결과를 캐싱하기 위해 할당된 메모리의 양

    - query_cache_limit : 개별 쿼리 결과의 최대 크기를 제한하여, 1개의 대용량 결과가 쿼리 캐시를 모두 소모하는 현상을 방지한다. (주로 1~2M)

    - 임시테이블, 사용자변수, UDF 를 사용하거나 Procedure, Function, Trigger 에서 사용되는 쿼리 등의 경우에는 쿼리캐시를 사용하지 못한다.

 

** 쿼리 캐시 관련 상태값 (show global variables like ‘%~%’)

    - Qcache_hits : 쿼리 캐시로 처리된 select 쿼리의 수

    - Com_select : 쿼리 캐시에서 결과를 찾지 못해 MySQL서버가 쿼리를 실행한 횟수

    - 즉, Qcache_hits + Com_select = MySQL서버로 요청된 모든 SELECT 문장의 총 합

 

** UDF란?  (User defined Function)

: c 나 c++ 로 작성되는 사용자정의함수

- 보통, 반환되는 컬럼에 대해 새로운 함수를 적용하고자 할 때 사용 (예를 들어, select col1, new_function(col2) from table)

- 테이블 형태의 결과값도 리턴할 수 있음

- 속도 향상과 코딩의 간소화로 udf를 사용함. udf를 사용하지 않는 경우에는 server가 client에 자료를 보내고, client는 보낸 자료를 처리하고, 최종 유저에게 보여지게 된다. 근데, server가 원본자료를 보내는게 아니라, client가 스스로 처리한뒤 전송하면, 불필요한 자료 전송이 없기 때문에 속도가 향상되는것!

- 함수 추가하는 과정 : c언어 등으로 함수를 구현하고, 이를 컴파일한 후 mysql에 create function으로 .so 로드해서 함수를 추가

 

 

참고 : realmysql

Print Friendly and PDF Posted by JJ*
: