엑시엄이 보는 DB 세상
데이터베이스 성능 최적화는 필수 0 1 99,999+

by axiom 성능최적화 [2013.01.21]


많은 사이트에서 시스템 오픈 시 경험하는 것은 무엇일까?

시대가 변해 데이터베이스를 업그레이드하는 시점에서 경험하는시행착오는 무엇일까?

아마도 대부분의 사이트에서는 성능 저하라는'아픔'을 경험하고 있을 것이다. 그렇다면 이와 같은 성능 저하는 무엇 때문에 발생하는 것인가?

과거에는 데이터의 크기가 작았기 때문에 성능에 대한 문제는 하드웨어, 네트워크 등의 문제로 간주되는 경우가 많았다. 하지만 시대가 크게 변해서 하드웨어 또는 네트워크만으로는 해결할 수 없거나 또는 고비용이 소요되는 상황에 이르게 되었다.

그렇다면 무엇이 문제인가?

문제를 이해해야만 정확히 해결 방안을찾을 수 있다. 지금부터 이와 같은 성능 저하의 문제는 무엇인지에 대해 확인해 보자.

성능 저하의 중심에는 데이터가 존재한다

왜 성능 저하의 중심에는 데이터가 있는 것일까?

그것은 우리 주변을 둘러보면 쉽게 이해할 수 있다. 우리 주변에 하드웨어만을 최적화는 일을 수행하는 사람이 있는가? 아니면 네트워크만최적화하는 사람이 있는가?

아마도 대부분의 경우에 하드웨어 최적화는 하드웨어 전체를 운영, 판매하는 곳에서 동시에 수행한다. 네트워크도 이와 별반 다르지 않다.

하지만 데이터베이스는 어떠한가? 데이터베이스는 하드웨어나 네트워크와는 달리, 데이터베이스 최적화만으로 회사의 명맥을 유지하는 경우도 많다. 이는 아마도 데이터베이스 최적화가 어렵고 이것만으로도 대부분 시스템의 성능 최적화를 수행할 수 있다는 반증이 될 것이다.

과거에는 데이터가 적었기 때문에 데이터를 액세스하는 부분에 대한 비효율이 존재하더라도 성능에는 큰 문제가 없었다. 하지만 지금은 어떠한가?

우리 주변에 1TB 이상의 데이터베이스는 다수 존재하고 있다. 이것이 바로 성능 저하의 주범이 되는 것이다. 성능 저하의 주범이 데이터이기 때문에 성능 최적화의 주범도 데이터가 된다.

데이터를 액세스하는 부분에서 조금의 비효율이라도 존재한다면 이는 성능 저하로 이어지게 된다.

예를 들어 보자. 테이블에 1,000만 건의 데이터가 존재하고 이중 추출하고자 하는 데이터는 100건이라고 가정하자. 이와 같다면 조건을 만족하는 데이터를 추출하기 위해서는 여러 가지 방법이 존재할 것이다.

1,000만 건의 데이터를 모두 액세스한 후 조건을 만족하는 100건의 데이터를 제외하고 다른 모든 데이터를 버려서 원하는 데이터를 추출할 수 있을 것이다. 또 하나의 방법은 인덱스를 이용해 조건을 만족하는 100건의 데이터만을 액세스하는 것이다.

누가 보더라도 이와 같은 경우라면 인덱스를 이용해 100건의 데이터만을 결과로 추출하는 경우가 효과적이며 성능을 보장할 수 있다는 것을 이해할 것이다.

이와 같이 이야기한다면 대부분의 사람들은 자신의 사이트에서는 이와 같이 데이터를 액세스하지 않는다고 말할 것이다. 하지만 현실에서는 1,000만 건을 액세스해 대부분의 데이터를 버리고 조건을 만족하는 100건의 데이터만을 결과로 추출하게 하는 경우가 다반사로 발생하고 있다.

아니 거의 대부분 사이트에서 이와 같은 현상이 발생하고 있다. 물론, 현실에서는 앞서 언급한 예제처럼 간단하지만은 않다. 이와 같다면 성능을 보장받을수 있겠는가?

당연히 이와 같은 SQL이 1초만에 결과를 추출할수는 없을 것이다. 오히려 시스템의 CPU는 대부분 사용하며 수행 시간은 몇 분 이상 소요될 것이다.

이렇듯 데이터의 증가는 여러 가지 비효율이 존재할 수 있으므로 성능 저하를 면하지 못할것이다.

결국, 성능 저하의 주범은 데이터이며 성능 저하를 제거할 수있는 주범도 데이터이다. 이런 사항을 명심한다면 프로젝트를 오픈하면서 또는 시스템을 운영하면서 성능 저하를 보다 효과적으로 제거할 수 있다.

담당자의 인식 변화가 필요하다

시대의 변화와 동시에 많은 고객들은 화려함과 편리함을 원하고 있는 것이 현실이다. 또한, 빠른 속도를 원하는 것이 대부분의 고객들이다.

하지만 이와 같은 고객 요구에도 일부 담당자들은 현실을 이해하지 못하는 것 같다. 어떻게 하면 화려하고 편리하고 빠른 성능을 보장할지에 대한 담당자의 인식이 필요한 시대이다. 이 중에서 빠른 속도를 의미하는 성능에 대한 담당자의 인식이 어떠한지 알아보자.

많은 담당자들은 다음과 같이 성능을 인식하고 있는 것 같다.

  • - 성능이 나쁘면 하드웨어를 증설한다.
  • - 데이터베이스 튜닝은 짧은 시간에 끝낼 수 있다.
  • - 파라미터만으로 시스템은 최적화될 수 있다.
  • - 성능 최적화는 오픈 직전에 수행한다.

위와 같은 인식을 가지고 있는 이상 고객이 원하는 성능을 보장할 수 없게 될 것이다.

첫 번째로 '성능이 나쁘면 하드웨어를증설한다'에 대해 알아보자.

많은 사이트에서는 CPU 사용률 등을 용량 증설의 기준으로 여기고 있다. 그렇기 때문에 데이터베이스 서버의 경우 CPU 사용률이 높다면 증설 대상으로 간주하게 된다. 이게 올바른 것인가?

한 예를 들어 보자.

필자가 현재 프로젝트를 진행 중인 시스템은 성능 최적화를 수행하기 전에 30~40% 정도의 CPU 사용률을 보이고 있었다. 금주에 성능 최적화를 수행하고 오픈한 결과 CPU 사용률은 7~10% 정도로 감소했다.이것이 과연 마술인가? 그렇지 않다. 당연한 결과일 것이다.

대용량의 데이터를 액세스하는 부분에 대한 비효율을 효율화했기 때문에 이런 결과는 당연할 것이다.

이제부터라도 시스템 증설에만 연연하지 않기를 바란다. 시스템 증설은 병에 걸린 사람의 겉만 치료하는 것이고 병의 원인이 되는 뿌리를 해결하지 않는 것과 마찬가지다.

성능 저하의 뿌리는 데이터에 대해 액세스이다. 이를 해결하지 않고 시스템의 용량만을 증설하는 것은 터무니 없는 일이다.

두 번째로 '데이터베이스 튜닝은 짧은 시간에 끝낼 수 있다'에대해 확인해 보자.

데이터베이스 튜닝은 절대 짧은 시간에 해결할 수 없다. 짧은 시간에 효과를 볼 수는 있지만 성능 저하의 뿌리를 제거하기 위해서는 많은 아픔과 시간이 소요된다.

성능 최적화에 사용되는 비용이 많은 것처럼 보이지만 이는 성능 최적화를 수행하지 않아 소요되는 용량 증설에 비하면 너무 작은 비용일 것이다. 성능 최적화는 짧은 시간에 해결할 수 없으며 장시간에 걸쳐 또한 주기적으로 관리해 줘야 한다.

세 번째로 '파라미터만으로 시스템은 최적화될 수 있다'에 대해 확인해 보자.

파라미터로만 전체 시스템을 최적화할 수 있다면 매우 편리할 것이다. 하지만 현실은 파라미터만으로 시스템을 최적화할 수는 없다.

물론, 너무 엉망으로 설정된 파라미터를 수정해 성능 향상을 기대할 수도 있을 것이다. 대부분은 파라미터만을 최적화하는 경우 기대할 수 있는 성능 향상은 5~10% 정도 수준이다.

하지만 데이터를 효과적으로 액세스하는 데이터베이스 성능 최적화로 기대할 수 있는 성능 향상은 몇 %의 정도가 아니라 몇 배 또는 몇 십 배의 성능 향상을 기대할 수 있게 된다. 이러한 사실을 이해한 담당자라면 파라미터 최적화를 고집하겠는가?

파라미터 최적화라는 그런 부질없는 일에 에너지를 소비하는 것보다는 데이터 액세스를 최적화하는 데이터베이스 성능 최적화라는 항목에 집중하는 것이 훨씬 큰 효과를 기대할 수 있다.

네 번째로 '성능 최적화는 오픈 직전에 수행한다'에 대해 따져보자.

성능 최적화는 오픈 직전에는 필수이지만 반드시 오픈 직전에만 수행하는 것은 아니다. 성능 최적화를 수행하는 인력을 프로젝트 중반부터 투입하는 것은 프로젝트 비용 때문에 힘들다고 이야기한다.

이는 하나만 알고 둘은 모르는 것은 아닐까? 성능 최적화를 담당할 수 있는 사람은 2명 아니 그 이상의 개발자몫을 충분히 수행할 수 있음을 아는가? 성능 최적화를 담당하는 인력은 SQL 작성, DBA 역할 등을 수행할 수 있게 된다.

또한 개발자들에게 효율적인 프로그램 개발에 대한 가이드 및 기술 전수 등을 제공할 수 있다.

성능 최적화를 담당하는 인력은 비록 프로그램 개발은 못하겠지만 프로그램 개발을 수행함에 있어서 엄청난 일들을 지원해 준다는 것을 명심하길 바란다.

이와 같은 방법론으로 프로젝트를 수행한다면 오픈 직전에 성능 최적 화를 많이 수행하지 않아도 성능을 보장할 수 있다는 이점을 가지게 된다. 이것이 비용 절감이 될 것이다.

지금도 늦지 않았다. 성능 저하의 주범이 데이터라는 것을 인식하고 데이터 액세스를 최적화하는 데이터베이스 최적화에 최선을 다한다면 시스템에 대한 용량 증설도 지연할 수 있게 되어 회사의 입장에서는 더 많은 비용 절감을 할 수 있다.

또한, 고객에게 최적의 서비스를 제공할 수 있는 시스템을 구현해 고객만족도도 높아질 것이다. 그렇기 때문에 실제로 성능 저하의 아픔을 경험하고 있는지의 여부와 관계없이 지금 우리에게 필요한 것은 데이터베이스 성능 최적화를 통한 시스템 최적화이다.

- 강좌 URL : http://www.gurubee.net/lecture/2248

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 아발란체 [2013.01.30 08:37:08]

요즘 클러스터 서버나 클라우드 서버 경우에도 마찬가지 같아요.
말도 안되게 프로그램 짜서 서버에 올려 몇 일 돌리다 증설해야 하나... 그러구..
S/W적인 부분에 대해서도 고민을 해야 하는데...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입