DB&SQL

나쁜 SQL이란 무엇인가

초롱불 2024. 5. 19. 12:14

개요

이번 글에서는 나쁜 SQL이 무엇인지 그리고 이를 발견했을 때 어떤 조치를 취해야하는지에 대해 다룬다. SQL은 다양한 방식으로 작성될 수 있지만 같은 결과를 반환하면서도 성능에는 큰 차이가 날 수 있다. 이때 성능이 저하된 쿼리를 '나쁜 SQL'로 간주한다. 이러한 쿼리는 자원을 비효율적으로 사용하며 전체 시스템 성능을 저하시킨다.

 

나쁜 SQL 정의

나쁜 SQL은 비효율적으로 자원을 사용하는 SQL 문장을 의미한다. 같은 결과를 반환하는 여러 SQL 문장이 있을 수 있지만 이들 중 일부는 성능이 현저히 떨어질 수 있다. 주요 성능 저하 요인은 다음과 같다:

 

  1. 파싱 시간(Parsing Time)
  2. 입출력(I/O)
  3. CPU 시간
  4. 대기 시간(Wait Time)

성능 저하 요인

1. 파싱시간

쿼리가 실행될 떄 데이터베이스 서버는 먼저 쿼리를 파싱한다. 파싱 과정에서는 쿼리가 유효한지 확인하고 해당 문장을 위한 SQL 영역을 할당하며 실행 계획을 생성한다. 이 과정에서 과도한 파싱이 발생하면 성능이 저하된다. 이를 해결하기 위해서는 쿼리 튜닝이 필요하다.

2. 입출력(I/O) 작업

I/O 작업은 디스크에서 데이터를 읽는 과정을 의미한다. 동일한 결과를 얻기 위해 어떤 쿼리는 1000개의 블록을 읽어야 할 수도 있고 다른 쿼리는 1개의 블록만 읽으면 될 수 있다. 쿼리가 과도한 I/O 작업을 요구할 경우 이를 나쁜 SQL로 간주한다. 인덱스를 활용하거나 쿼리 구조를 최적화하여 I/O 작업을 줄일 수 있다.

3. CPU 시간

조인, 정렬, 계산 등의 작업은 CPU와 메모리를 사용한다. 불필요한 조인이나 정렬, 비효율적인 방법으로 이러한 과정을 수행하면 과도한 CPU 시간을 소비하게 된다. 이를 쿼리 튜닝으로 개선할 수 있다.

4. 대기 시간

쿼리가 실행될 때 결과를 받기까지 많은 대기시간이 발생할 수 있다. 이는 CPU에서 대기하거나 네트워크에서 대기하는 등 여러 요인에 의해 발생할 수 있다. 다수의 사용자가 데이터베이스를 동시에 사용하므로 쿼리는 다른 사용자의 쿼리를 기다려야 할 수도 있다. 대기 시간이 길면 쿼리나 시스템, 네트워크 튜닝이 필요하다.

 

결론

나쁜 SQL의 정의와 주요 성능 저하 요인에 대해서 정리해보았다. 파싱 시간, I/O, CPU 시간, 대기 시간이 주요 원인이다. 이러한 요인을 분석하여 SQL의 성능을 튜닝하는 방법을 알아갈 수 있어야 한다.

 

감상

이번 강의는 본격적인 SQL 튜닝에 앞서서 어떤 부분에서 성능 문제가 있어야하는지 짚어보는 시간이었던 것으로 보인다. 성능 문제가 발생했을 시에 어떤 측면에서 접근할 수 있을지 분류하여 생각하는데에 도움이 될 수 있는 지식으로 느껴진다.