개요
SQL 성능 튜닝은 데이터베이스 관리에서 필수적이며 지속적으로 이루어져야 하는 작업이다. 이번 글에서는 SQL을 언제 튜닝해야하는지 쿼리 속도가 느려지는 주요 원인은 무엇인지에 대해서 다룬다. 이를 통하여 데이터베이스 성능을 최적화 하는 방법을 이해하고자 한다.
SQL 성능 튜닝의 필요성
코드 작성 시 튜닝
SQL 문장을 작성할 때 성능 튜닝을 고려해야한다. 대부분의 경우 작성된 쿼리가 높은 자원을 소비하지 않기에 처음에는 성능 문제로 인식되지 않을 수도 있다. 하지만 많은 쿼리가 짧은 시간 내에 실행되거나, 많은 사람들이 해당 쿼리를 이용할 경우 전체 시스템에 큰 부하를 줄 수 있다. 따라서 코드 작성 시에 튜닝 기법을 적용하여 시스템 전체의 성능 향상을 기대할 수 있다.
코드 작성 후 튜닝
시간이 지나면서 테이블 구조의 변경, 인덱스의 생성 또는 삭제, 데이터 양의 변화등으로 기존에 튜닝된 쿼리도 다시 튜닝이 필요할 수 있다. 데이터 양의 증가 혹은 인덱스의 생성은 비용의 증가를 불러오고 시스템에 접근하는 사용자에게 불편함을 느끼게 할 수 있다. 이 경우 쿼리 튜닝을 고려할 수 있으며 주기적으로 자주 사용되는 쿼리를 점검하여 튜닝을 수행하여야 한다.
SQL 성능 변화의 원인
작성 시 문제없던 쿼리에게서 작성 후 성능 문제가 발생하는 경우는 아래와 같이 정리할 수 있다.
- 구조적 변화: 테이블 구조 변경, 인덱스 생성 또는 삭제와 같은 구조적 변화가 쿼리의 성능을 저하시키는 경우
- 데이터 양의 변화: 테이블 데이터 양이 증가 혹은 감소하여 쿼리의 실행 계획이 변경되거나 의도하지 않은 대기 시간, CPU 시간 초래
- 애플리케이션 변경: 애플리케이션에서 문장에 문자를 대신하여 숫자를 보내거나 바인드 변수를 사용하지 않는 등의 변경 사항이 쿼리에 영향을 미치는 경우
- 통계의 노후화: Oracle 데이터베이스는 통계를 기반으로 실행 계획을 수립하는데 분석할 통계가 최신 상태가 아닐 경우
- 데이터베이스 업그레이드: 데이터베이스의 새로운 버전이 일부 쿼리의 성능 저하를 불러일으키는 경우
- 데이터베이스 파라미터 변경: DBA가 PGA, SGA 크기 등 파라미터를 변경한 경우
- 운영체제 및 하드웨어 변경: DB 서버의 운영체제 및 하드웨어의 변경이 성능의 저하를 일으킬 경우
자주 쓰이는 쿼리의 식별
오라클 데이터베이스는 다양한 통계를 지속적으로 생성하고 저장한다. 이를 통해 상위 소비 쿼리를 간단한 쿼리로 식별할 수 있으며 해당 쿼리에 대한 튜닝 작업을 수행할 수 있다. 상위 소비 쿼리는 전체 쿼리의 5% 이하를 차지하지만 총 자원의 80%를 사용한다. 이러한 상위 소비 쿼리를 식별하고 튜닝하는 것이 중요하다.
결론
SQL 성능 튜닝의 필요성과 쿼리 성능 저하의 주요 원인에 대해서 알아보았다. 쿼리 작성 시 튜닝 기법을 고려하고 주기적으로 상위 소비 쿼리를 점검하여 튜닝작업을 수행하는 것이 최적화의 핵심이다.
느낀점
개발이 SM과 SI로 나뉘듯이 쿼리도 개발할 때와 유지보수할 때로 나뉘는 듯하다. 확실히 실무 일을 하면서 공부를 하다보니 이러한 지점에서 느끼는 부분이 많다. 개발을 할 때 만들어 놓은 것은 언젠가는 변화한다는 걸 염두에 두어야 한다는 점이 SQL에서도 적용된다. 나열된 사례를 보아서는 어지간해서는 한 번 만들어놓은 쿼리를 수정할 일이 없을 것 같긴 하지만 쿼리 성능이 매우 중요한 프로그램일 경우 위의 사례들을 고려해서 그때 그때 점검을 할 필요성을 느꼈다.
'DB&SQL' 카테고리의 다른 글
SQL 튜닝 - 효과적인 데이터베이스 스키마 설계 (0) | 2024.05.20 |
---|---|
나쁜 SQL이란 무엇인가 (0) | 2024.05.19 |
오라클 아키텍처 - 논리 및 물리적 구조 (0) | 2024.05.17 |
오라클 아키텍처 - 데이터베이스 저장 관리 체계 (0) | 2024.05.16 |
오라클 아키텍쳐 - 자동 메모리 관리 (0) | 2024.05.15 |