DB 데이터/인덱스 & 성능 최적화

쿼리 캐시 활용법

backend.log 2025. 5. 14. 18:00
728x90
반응형

📘 3-4. 쿼리 캐시 활용법

쿼리 캐시는 MySQL에서 자주 실행되는 쿼리 결과를 메모리에 저장하여 반복 실행 시 데이터베이스의 부담을 줄이고 응답 속도를 개선하는 중요한 성능 최적화 방법입니다. 쿼리 캐시를 사용하면 동일한 쿼리를 반복 실행할 때 디스크 I/O를 최소화하고 빠른 응답을 얻을 수 있습니다.

📌 1. 쿼리 캐시란?

쿼리 캐시는 데이터베이스에 쿼리 결과를 저장하여 같은 쿼리가 다시 실행될 때 데이터베이스가 이미 저장된 결과를 반환하도록 하는 기능입니다. 쿼리 캐시는 반복적으로 실행되는 읽기 전용 쿼리에 대해 성능을 크게 향상시킬 수 있습니다.

쿼리 캐시는 MySQL의 서버 메모리 내에 결과를 저장하며, 쿼리 결과가 변경되지 않으면 캐시된 결과를 그대로 반환합니다. 하지만 데이터베이스에 변화가 생기면 캐시가 무효화되고 새로 계산된 결과를 반환합니다.

📌 2. 쿼리 캐시 설정

MySQL에서 쿼리 캐시는 기본적으로 활성화되어 있지만, 특정 환경에서는 설정을 조정해야 할 수 있습니다. 쿼리 캐시를 사용하기 위해서는 query_cache_type, query_cache_size 등의 설정을 조정할 수 있습니다.

1. 쿼리 캐시 사용 여부 확인

쿼리 캐시가 활성화되어 있는지 확인하려면 다음과 같은 쿼리를 사용합니다:

SHOW VARIABLES LIKE 'query_cache_type';

결과가 ON이면 쿼리 캐시가 활성화된 상태입니다. 비활성화된 상태에서는 OFF로 표시됩니다.

2. 쿼리 캐시 크기 설정

쿼리 캐시의 크기를 설정하려면 query_cache_size 값을 지정합니다. 이 값을 설정하여 쿼리 캐시가 사용할 메모리의 크기를 정의할 수 있습니다. 너무 작은 크기로 설정하면 쿼리 캐시가 효과적이지 않게 될 수 있습니다.

SET GLOBAL query_cache_size = 1048576; -- 1MB로 설정

3. 쿼리 캐시 정책 설정

query_cache_type을 설정하여 쿼리 캐시가 활성화되는 정책을 지정할 수 있습니다:

  • 0 (OFF): 쿼리 캐시를 사용하지 않음
  • 1 (ON): 쿼리 캐시를 사용
  • 2 (DEMAND): 쿼리 캐시를 명시적으로 사용하는 쿼리에서만 사용
SET GLOBAL query_cache_type = 1; -- 캐시 사용

📌 3. 쿼리 캐시 사용 시 유의 사항

쿼리 캐시를 사용할 때는 몇 가지 유의해야 할 사항들이 있습니다:

1. 쓰기 작업이 많은 테이블에서 비효율적일 수 있음

쿼리 캐시는 데이터베이스에 변경 작업이 발생할 때마다 캐시를 무효화합니다. 따라서 쓰기 작업이 많은 테이블에서는 캐시가 자주 무효화되어 오히려 성능이 저하될 수 있습니다. 이런 경우, 쿼리 캐시를 비활성화하거나 제한적으로 사용하는 것이 좋습니다.

2. 동적 쿼리에서 효과적이지 않음

쿼리 캐시는 고정된 쿼리에서 더 효과적입니다. 예를 들어, 매번 다르게 조건을 변경하는 동적 쿼리에서는 캐시를 활용하기 어려운 경우가 많습니다. 이 경우에는 다른 성능 최적화 기법을 사용해야 합니다.

3. 캐시된 쿼리 결과의 크기 제한

쿼리 캐시의 크기에는 제한이 있습니다. 캐시된 쿼리 결과가 너무 크면 메모리 부족 현상이 발생할 수 있습니다. 이 경우, 캐시 크기를 조정하거나 캐시된 데이터를 주기적으로 갱신하는 방법을 고려해야 합니다.

📌 4. 쿼리 캐시 활용 예제

쿼리 캐시가 효과적인 예제를 살펴보겠습니다:

1. 캐시된 쿼리 사용

다음과 같이 동일한 SELECT 쿼리가 여러 번 실행될 때 쿼리 캐시를 활용할 수 있습니다:

SELECT * FROM products WHERE category_id = 101;

위와 같은 쿼리가 여러 번 실행되면, 첫 번째 실행 후에 결과가 쿼리 캐시에 저장되고, 그 후의 실행에서는 캐시된 결과를 반환하여 성능을 향상시킵니다.

2. 캐시 무효화

데이터가 변경될 때 캐시를 무효화하려면 FLUSH QUERY CACHE 명령을 사용하여 모든 캐시를 비울 수 있습니다:

FLUSH QUERY CACHE;

또는 테이블에 데이터가 변경될 때마다 MySQL은 자동으로 관련된 캐시를 무효화합니다.

📌 5. 쿼리 캐시 비활성화

쿼리 캐시가 성능에 부정적인 영향을 미칠 경우, 비활성화할 수 있습니다. 다음과 같이 설정하여 캐시를 끌 수 있습니다:

SET GLOBAL query_cache_type = 0;

이 명령을 사용하면 쿼리 캐시가 완전히 비활성화됩니다. 일부 경우에는 캐시를 비활성화하는 것이 더 나은 성능을 얻을 수 있습니다.

📚 다음 글 예고

다음 포스팅에서는 3-5. 데이터베이스 파티셔닝 활용법에 대해 다루겠습니다. 데이터베이스 파티셔닝을 사용하여 대용량 데이터셋의 성능을 최적화하는 방법을 알아보겠습니다.

728x90
반응형