개요
이번 글에서는 옵티마이저의 필요성에 대해서 알아본다. SQL 튜닝에선 옵티마이저를 잘 이해하는 것이 중요하다. 이는 우리의 쿼리가 어떻게 실행되는지를 옵티마이저가 결정하며 옵티마이저가 잘못된 실행 계획을 생성할 때 성능이 저하된 쿼리를 얻게 될 수도 있기 때문이다. 따라서 우리는 옵티마이저가 더 나은 실행계획을 생성할 수 있도록 이해해야 한다.
옵티마이저의 필요성
데이터 볼륨의 증가
기술 발전에 따라 데이터베이스의 데이터 볼륨이 빠르게 증가하고 있다. 완벽하게 빠른 데이터베이스 서버가 있다고 해도 서버가 효율적으로 쿼리를 실행하지 않으면 우리에게 충분히 서비스를 제공할 수 없다. 또한 하드웨어 비용을 줄이기 위해 추가 서버를 구매하는 대신 쿼리 실행을 최적화 하는 것이 중요하다. 오라클은 옵티마이저라는 컴포넌트를 사용하여 자동으로 쿼리 실행을 최적화한다.
옵티마이저의 역할
옵티마이저는 가장 빠른 실행 계획을 가능한 빨리 찾기 위해 전념하는 소프트웨어이다. 더 나은 실행 계획을 통해 쿼리는 최대 100배 이상 빠르게 실행될 수 있으며 이는 하드웨어 비용을 크게 줄일 수 있다. 또한 동일한 결과를 훨씬 더 빨리 얻을 수 있어 최종 사용자 만족도가 증가한다.
다양한 실행 방식
같은 쿼리 문장도 여러 가지 방법으로 실행될 수 있으며 그 성능은 각기 다르다. 예를 들어, 어떤 방법은 1초 안에 쿼리 결과를 반환할 수 있지만 다른 방법은 몇 분 또는 몇 시간이 걸릴 수도 있다. 따라서 옵티마이저는 1초 안에 결과를 반환하는 가장 빠른 방법을 찾아야 한다.
옵티마이저의 동작 방식
스키마 정보 확인
쿼리를 실행할 때, 옵티마이저는 먼저 스키마 정보를 확인한다. 여기에는 인덱스의 존재 여부와 종류 등이 포함된다. 이 정보를 바탕으로 가능한 접근 경로를 생성한다. 예를 들어, prod_category 열에 인덱스가 있는 경우 옵티마이저는 인덱스를 사용하여 테이블을 읽는 방법을 찾는다. 그렇지 않다면 테이블 전체를 읽는 방법이 있다.
통계 정보 확인
옵티마이저는 통계를 확인하여 가장 효율적인 접근 경로를 선택한다. 오라클은 테이블 인덱스 등의 통계를 생성한다. 예를 들어, products 테이블의 prod_category 열의 선택성을 확인한다. 선택성은 쿼리 결과가 테이블의 몇 퍼센트를 차지하는지를 의미한다. 선택성이 높은 경우 인덱스를 사용하는 것이 효율적일 수 있다.
선택성에 따른 결정
- 높은 선택성: 쿼리 결과가 테이블의 1%미만인 경우, 인덱스를 사용하는 것이 효율적일 수 있다.
- 낮은 선택성: 쿼리 결과가 테이블의 25% 이상인 경우, 인덱스를 사용하는 것이 비효율적일 수 있다. 이떄는 테이블 전체를 읽는 것이 더 빠를 수 있다.
옵티마이저의 필요성 요약
쿼리는 시간이 지남에 따라 구조, 데이터 볼륨, 업그레이드 등의 변화에 따라 최적의 실행 방법이 달라질 수 있다. 따라서 매번 쿼리를 실행할 때마다 최적의 실행 방법을 찾아야 한다. 이는 개발자 대신 컴퓨터가 훨씬 빠르게 수행할 수 있기에 옵티마이저가 필요하다.
결론
이번 글에서는 옵티마이저의 필요성과 역할에 대한 알아보았다. 옵티마이저는 SQL 튜닝에서 매우 중요한 컴포넌트로 쿼리의 실행 계획을 최적화하여 성능을 크게 향상시킨다. 다음 글에서는 옵티마이저에 대해서 더 자세히 알아보겠다.
감상
비행기에 붙어있는 자동주행장치에 대해서 생각하며 강의를 들었다. 특별한 케이스를 위해서 파일럿이 운행방법은 숙지해야하지만 기본적으로 자동주행의 힘에 맡겨서 비행기를 운용한다고 알고 있다. 데이터베이스 쿼리의 경우도 이와 같다고 생각했다. 특별히 성능을 향상 시켜야하고 옵티마이저가 잘못된 길을 가는 게 보인다면 조정이 필요하겠지만 기본적으로는 옵티마이저에게 운행을 맡기는 게 옳은 쿼리 운용 방식으로 느껴졌다.
'DB&SQL' 카테고리의 다른 글
SQL 튜닝 - 선택성과 카디널리티 (0) | 2024.05.27 |
---|---|
SQL 튜닝 - Query Transformer (0) | 2024.05.26 |
SQL 튜닝 - SQL 실행 과정 (0) | 2024.05.22 |
SQL 튜닝 - 파티셔닝 (0) | 2024.05.21 |
SQL 튜닝 - 효과적인 데이터베이스 스키마 설계 (0) | 2024.05.20 |