데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

지금 우리에게 필요한 것은 데이터베이스 성능 (1부)

데이터 이야기
작성자
dataonair
작성일
2014-11-14 00:00
조회
6413


지금도 성능 저하로 서비스를 개시하지 못하는 시스템이 있을 것이다. 또 어떤 사이트에서는 성능 저하로 많은 업무들이 원래의 기능을 수행하지 못하고 있을 것이다. 그렇다면 이러한 성능 저하는 어떤 부분에서 주로 발생하게 되는가 문제를 발생시키는 원인을 이해하지 못한다면 우리는 그 해결 방법을 찾을 수 없을 것이다. 많은 사이트에서 성능 저하를 발생시키는 원인은 데이터를 엑세스하는 SQL에 있다. 이제 우리는 데이터를 엑세스하는 부분에 성능 저하의 초점을 집중시켜야 할 것이다.

시스템의 성능 저하를 발생시키는 원인은 여러 가지가 존재할 것이다. 네트웍의 속도, 운영 체제의 설정 및 소프트웨어의 설정 등 많은 부분에 의해 성능 저하를 발생시킬 수 있을 것이다. 이와 같은 문제에 의해 발생하는 성능 저하 또한 해당 시스템에는 큰 영향을 미치게 된다. 하지만, 이와 같은 성능 저하의 문제는 앞으로 언급할 데이터 엑세스 성능 최적화 방법 보다는 좀더 수월하다. 또한, 이와 같은 항목들에 대해 한번 최적화한 후에 해당 항목들에 큰 변화가 발생하지 않는다면 추후 문제를 발생시키지 않을 가능성이 높다. 그렇다면 성능 저하를 발생시키는 가장 주된 원인은 무엇인가 데이터베이스를 이용하는 시스템이라면 데이터를 엑세스하는 부분에 의해 발생하는 성능 저하가 해당 시스템의 전체 성능 저하를 발생시키는 주범이라는 것을 이해하겠는가 데이터베이스에 저장되어 있는 데이터를 액세스하는 부분이 전체 시스템의 성능을 저하시키는 주범이라는 것을 명심하길 바란다. 성능 저하의 문제를 발생시키는 주범인 데이터의 엑세스에 대해 확인해보자.

현실을 이해해야 성능 최적화에 성공할 수 있다.

시스템의 성능을 최적화하기 위해 우리는 지금 무엇을 하고 있는가 지금 우리는 성능을 최적화하기 위해 어느 부분에 초점을 맞추고 있는가 이와 같은 현실을 제대로 파악하지 못한다면 성능 문제가 발생한 시스템 또는 구축 중인 시스템의 성능을 최적화할 수 없을 것이다.

어떤 시스템에 성능 저하가 발생했다면 가장 먼저 무엇을 하는가 필자가 지원했던 사이트에서는 성능 저하가 발생하자 네트웍 담당자, 운영체제 담당자, 소프트웨어 담당자 및 개발 담당자를 모아놓고 회의를 했었다. 하지만, 이러한 일련의 절차를 통해 해당 시스템의 문제를 해결하지는 못했다. 왜 성능 저하의 문제를 최적화할 수 없었을까 그것은 해당 시스템에서 발생하는 문제점을 정확히 이해하지 못 했기 때문은 아닐까 해당 시스템의 문제는 데이터를 엑세스하는 부분에서의 성능 저하가 문제였음에도 불구하고 이와 같은 고려를 하지 못했기 때문에 성능 최적화에 실패한 것이다. 데이터 엑세스의 문제에 운영체제 담당자 및 네트웍 담당자가 무엇을 할 수 있겠는가 더욱 중요한 것은 많은 사이트에서 데이터 엑세스의 성능 저하가 발생함에도 불구하고 전혀 다른 곳에서 원인을 찾으려고 한다는 것이 시스템의 성능 저하를 해결하지 못하는 이유인 것 같다.

이와 같이 언급하면 많은 사람들은 데이터를 엑세스하는 부분에서만 성능 저하가 발생하는가 하고 의아해 할지도 모른다 성능 저하가 데이터를 엑세스하는 부분에서만 발생하는 것은 아니지만 중요한 것은 성능 문제를 발생시키는 많은 사이트들에서 데이터 엑세스를 수행하는 부분에서 성능 저하가 발생한다는 것이다. 이를 증명하는 것은 여러 곳에서 확인이 가능하다. 운영 체제를 최적화하는 업무만을 하는 회사가 존재하는가 아니면 네트웍 성능만을 최적화해 주는 회사가 존재하는가 필자가 모든 회사를 알고 있는 것은 아니지만 필자가 아는 한에서는 이와 같은 회사는 존재하지 않는다. 네트웍을 하는 회사는 네트웍 성능뿐만 아니라 장비 판매, 구축 및 운영 업무까지 수행하게 될 것이다. 시스템을 구성하는 요소 별로 성능 최적화만을 지원하면서 유지되는 회사는 거의 없을 것이다. 하지만, 데이터의 엑세스 부분만을 최적화해 주는 회사는 어떠한가 데이터 엑세스를 최적화해 주고 회사를 유지하는 회사는 여러 곳이 존재한다. 아마 많은 사람들은 이와 같이 데이터 엑세스를 최적화해 주는 회사로부터 기술 지원을 받은 적이 있을 것이다. 데이터 엑세스를 최적화해주고 회사를 유지할 수 있다는 것은 이와 같은 현상이 많이 발생한다는 것을 의미할 것이다.

결국, 데이터를 엑세스하는 부분에 대한 최적화가 성능 최적화의 중심에 있게 된다. 이와 같음에도 불구하고 아직도 많은 사람들은 이러한 사실을 모른다. 단지, 성능 저하가 발생하면 성능이 향상된 하드웨어를 추가 구매하려고만 한다. 이러한 것이 과연 최선의 선택인가 성능 최적화에 대한 여러 가지 항목을 시도해 보고 하드웨어를 교체 또는 추가하는 것은 어떨 수 없는 상황일 수도 있겠지만 그 것이 아니라면 하드웨어 교체 또는 추가는 비용을 낭비하는 것은 아닐까

이제라도 성능 저하의 중심에 데이터 엑세스의 비효율이 있다는 사실을 이해하고 성능 저하가 발생했을 경우 이러한 점에 초점을 맞추어야 할 것이다. 더 이상 성능 저하의 원인을 잘못 파악하는 이와 같은 오류를 발생시키지 않길 바란다.

데이터를 엑세스하는 중심에는 SQL이 있다.

앞서 성능 저하의 문제를 발생시키는 많은 부분이 데이터의 엑세스에 있다고 언급했다. 그렇다면 데이터의 엑세스는 무엇을 의미하는가 우리가 원하는 데이터를 고객에게 보여주기 위해 우리는 데이터베이스에 존재하는 데이터를 엑세스하게 된다. 그렇다면 데이터를 엑세스하기 위해서는 툴이나 언어 같은 무엇인가를 이용해야 할 것이다. 이와 같기 때문에 데이터 엑세스를 위해서 우리는 SQL을 사용해야 한다. SQL은 데이터베이스에 존재하는 데이터를 엑세스할 수 있게끔 데이터베이스에서 제공하는 언어이다. 따라서, 우리가 원하는 데이터는 SQL을 통해 추출할 수 있다. SQL은 이와 같이 원하는 데이터를 추출하는 것 뿐만이 아니라 아래와 같은 기능을 추가로 제공하게 된다.

n 데이터 저장

n 데이터 변경

n 데이터 삭제

위와 같이 SQL은 데이터베이스에 존재하는 데이터를 관리할 수 있게끔 여러 가지 기능을 제공하게 된다. SQL은 우리가 원하는 데이터를 조회하거나 삭제, 변경, 저장하기 위해서 사용하게 된다. 결국, 데이터베이스에 존재하는 데이터를 엑세스한다는 것은 SQL을 통해 엑세스하는 것을 의하게 된다.

그렇다면 SQL에 무슨 문제가 존재하기 때문에 데이터를 엑세스하는 부분에서 가장 많은 성능 저하가 발생하게 되는 것일까 SQL 자체에 문제를 가지고 있는 것일까 그렇다면 데이터를 엑세스하는 경우 반드시 사용해야 하는 SQL 언어가 인류가 만든 실패작인 것인가 SQL 자체는 어떠한 문제도 가지고 있지 않다. SQL은 우리가 필요로 하는 대부분의 기능을 지원하고 있으며 SQL은 모든 데이터베이스에서 공통으로 사용하게 된다. 또한, SQL을 사용해본 사람이라면 알 수 있겠지만 SQL 만큼 간단한 언어도 없다. 누구나 쉽게 사용할 수 있고 누구나 쉽게 다른 사람이 작성해 놓은 SQL을 분석할 수 있다. 그렇다는 이야기는 SQL은 인류가 만든 실패작이 아니라는 것이다.

그렇다면 왜 SQL을 사용하는 데이터 엑세스 부분에서 성능 저하가 주로 발생하는 것일까 그것은 우리가 최적화된 데이터 엑세스를 수행하지 못하기 때문이다. 예를 들어, 1,000만 건의 데이터 중 필요한 데이터는 10건이라고 가정하자. 이와 같은 경우 10건의 데이터를 추출하는 방법은 여러 가지가 존재하며 이는 반드시 SQL을 이용하여 데이터를 추출하게 된다. 10건의 데이터를 추출하기 위해 1,000만 건의 데이터를 모두 엑세스한 후 10건의 데이터를 추출할 수 도 있고 1,000만 건의 데이터 중 10건의 데이터만을 엑세스하여 해당 데이터를 결과로 추출할 수 도 있다. 이와 같이 수행하기 위해서 전혀 다른 SQL을 이용하는 것은 아니다. 물론, SQL을 최적화하기 위해 SQL을 변경할 수 도 있지만 이는 우리가 원하는 방향으로 SQL이 수행되도록 하기 위해서 일 뿐이다. 그렇다면=EN-US> 1,000만건의 데이터를 엑세스하여 10건의 데이터를 엑세스하는 경우와 10건의 데이터만을 엑세스하여 10건을 모두 결과로 추출하는 방법 중 어느 경우가 성능을 보장할 수 있겠는가 이는 당연히 10건의 데이터만을 엑세스하는 것이 성능을 보장할 수 있는 방법이 될 것이다. 동일한 SQL을 사용할 경우에도 이와 같은 현상이 발생할 수 있으며 1,000만 건의 데이터를 모두 엑세스하여 10건의 데이터만을 결과로 추출한다면 우리가 원하는 성능을 보장받을 수는 없게 된다. 이와 같은 현상은 데이터를 엑세스하는 과정에서 매우 흔하게 발생하기 때문에 시스템의 성능은 많은 부분이 데이터를 엑세스하는 부분에 의해 발생한다고 말해도 과언은 아닐 것이다.

결국, SQL을 통해 데이터를 엑세스하게 되며 SQL 자체에 의해서는 성능 저하가 발생하지 않지만 해당 SQL이 수행되는 과정에서 데이터를 어떻게 엑세스되는지에 따라 엄청난 성능 저하가 발생할 수 있다는 것이다.