데이터이야기

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

지금 우리에게 필요한 것은 데이터베이스 성능 최적화이다 (3부)

데이터 이야기
작성자
dataonair
작성일
2015-01-27 00:00
조회
4329


지금 우리에게 필요한 것은 데이터베이스 성능 최적화이다 (3부)



시스템의 성능을 향상시키기 위해서는 많은 부분을 검토하고 최적화 계획을 수립해야 할 것이다. 그러기 위해서 정확한 분석이 필요한 것은 두 말할 것도 없을 것이다. 정확한 분석을 수행하기 위해서는 우리 주위에 진실처럼 통하는 많은 잘못된 사실들부터 정확히 바로잡아야 할 것이다. 왜냐하면 우리 주위에 진실처럼 통하는 많은 잘못된 사실들이 성능에 큰 영향을 미치기 때문이다.

우리가 프로젝트를 수행하면서 어떤 항목에 대해서 어떻게 구성하면 성능을 보장 받을 수 있고 어떻게 구성한다면 성능은 저하된다고 말한다. 특히, 대용량의 데이터를 저장하는 데이터베이스 관련해서는 프로젝트를 수행하면서 많은 항목에 대해 성능을 최적화할 수 있는 방법과 성능을 저하시키는 방법에 대해 이야기를 하게 된다. 이와 같은 방법 중 진정으로 성능을 최적화시키는 경우도 많다.

하지만, 이와 같이 말하는 방법 중 성능을 최적화하는 방법이라고 말하지만 실제는 성능을 저하시키거나 또는 성능을 저하시키는 방법이라고 말하지만 실제는 성능을 향상시키는 방법도 존재한다. 이와 같이 성능을 저하시키는 방법을 성능을 향상시키는 방법이라고 믿고 성능을 향상시키는 방법을 성능 저하를 발생시키는 방법이라고 인식한다면 해당 프로젝트는 시스템 오픈시 많은 성능 저하를 경험하게 될 것이다. 많은 사람들이 성능 저하를 발생시키는 방법을 성능 향상을 발생시키는 방법으로 또는 성능 향상을 기대할 수 있는 방법을 성능 저하를 발생시키는 방법으로 인식할 수 있겠냐고 의문을 가질 지도 모른다. 하지만 많은 프로젝트에서는 이러한 현상이 발생하고 있다는 것이 현실이다. 성능과 관련된 진실을 왜곡시키는 사실 중 하나인 테이블과 인덱스를 서로 다른 디스크에 저장해야 한다는 디스크 구성에 대한 잘못된 사실에 대해 정확히 분석해 보자. 이를 이해하기 위해선 최적의 디스크 구성 방법부터 이해해야 할 것이다. 이제부터 언급하는 모든 경우는 대용량 데이터를 기준으로 언급하도록 하겠다.



디스크 분산에 대해 담당자의 역할을 명심해라.

프로젝트를 수행하면서 관리자 또는 실무자 모두 디스크 분산에 대해 중요성을 인식하게 된다. 하지만, 대용량 데이터에 대해 디스크 분산을 어떻게 구성해야 성능을 최적화할 수 있는지 모르는 경우가 많은 것 같다. 대용량 데이터베이스를 구축하는 어떤 사이트에서는 디스크 분산을 디스크 업체에 모두 맡기는 것을 보았다. 지금도 많은 곳에서는 디스크 업체에서 구성해 주는 대로 사용하고 있을 것이다. 이와 같이 디스크 업체에 의해서만 디스크 I/O 분산을 수행한다면 디스크 I/O 분산에 의해 성능 저하가 발생할 수도 있다.

최적의 디스크 I/O 분산 작업을 수행하기 위해서는 디스크 업체와 OS 담당자 그리고 DBA의 힘이 합쳐 졌을 경우 최적의 디스크 I/O 분산을 수행할 수 있게 된다. 이를 모르고 디스크 업체와 OS 담당자와의 협의에 의해서만 디스크 I/O 분산을 수행한다면 이는 디스크 I/O 분산에서 중요한 역할을 수행하는 DBA의 역할을 제외한 것이므로 디스크 I/O 분산은 실패할 가능성이 높아지게 된다. 물론, 디스크 업체를 제외하거나 또는 OS 담당자를 제외한다고 해도 마찬가지의 현상이 발생할 것이다. 이와 같은 현상은 왜 발생하는 것일까 그 이유는 디스크 I/O 분산을 위해 디스크 업체와 OS 담당자 및 DBA의 역할이 별도로 있기 때문에 각각의 담당자들이 자신의 역할을 수행하지 않는다면 디스크 I/O 분산에 문제가 발생할 수도 있다. 그렇다면 디스크 업체와 OS 담당자 및 DBA의 역할은 어떻게 되는가



■ 디스크 업체 - 물리적 디스크의 스트라이핑(Striping)을 구현하는 역할을 수행한다.
■ OS 담당자 - 각각의 물리적 디스크 스티라이핑(Striping) 위에 스트라이핑된 파일 시스템을 구성한다.
■ DBA - 스트라이핑된 여러 개의 파일 시스템에 모든 데이터가 분산되도록 세그먼트 스트라이핑(Segment Striping)을 구현한다.



위와 같이 각각의 담당자는 자신의 역할을 가지게 된다. 이러한 역할 중 하나의 역할이라도 생략되거나 최적화되지 않는다면 디스크 I/O 분산에는 문제가 발생하게 된다.

첫 번째로 디스크 업체의 역할을 확인해 보자. 대용량의 데이터를 저장해야 하는 데이터베이스 시스템이라면 대용량의 디스크가 도입될 것이다. 그렇다는 의미는 무엇인가 도입되는 물리적 디스크의 개수가 많다는 의미가 된다. 도입되는 디스크가 많기 때문에 디스크 내부적인 물리적 디스크는 분산되어 구성되어야 할 것이다. 이러한 부분은 국내에서 서비스를 제공하는 대부분의 디스크 업체에서 물리적인 디스크 분산을 설정하여 구성하게 된다. 따라서, 이러한 부분에 대해서는 어느 시스템을 구축하여도 디스크를 도입하는 순간 어렵지 않게 구성할 수 있을 것이다. 여기서 중요한 것은 이와 같은 물리적 디스크 분산을 항상 확인해야 한다는 것이다.

두 번째로 OS 담당자의 역할을 확인해 보자. OS 담당자의 역할은 디스크 업체에서 분산하여 구성한 물리적 디스크를 이용하여 파일 시스템을 구성해야 할 것이다. 이 경우 반드시 파일 시스템을 구성하는 모든 물리적 디스크로 파일이 저장될 수 있도록 스크라이핑 설정을 수행해야 한다. 이와 같이 수행한다면 물리적인 디스크에서 한번 분산이 이루어지면 해당 디스크를 이용하여 파일 시스템을 생성하는 순간 한번 더 디스크 분산이 구현된다. 일부 OS 담당자는 물리적 디스크에서 분산이 되었기 때문에 파일 시스템에서 추가적인 분산을 필요 없다고 이야기하는 경우도 있다. 분명한 것은 데이터베이스에 따라 이러한 부분이 변할 수 있다는 것이다. DW용 사이베이스를 사용하는 경우에는 디스크 스트라이핑이 유리하지만은 않다. 하지만, 오라클 데이터베이스를 사용하는 경우에는 최대한 스트라이핑을 수행하여 데이터를 최대한 분산하는 것이 성능에 유리하다. 이와 같기 때문에 오라클 데이터베이스를 사용한다면 반드시 파일 시스템에서의 스트라이핑은 필수이므로 이를 반드시 명심하길 바란다.

세 번째로 DBA의 역할을 확인해 보자. 이 부분은 오라클 데이터베이스를 사용하는 경우에만 해당한다. 두 번째 단계까지 수행하였다면 파일 시스템까지는 분산이 모두 수행 되었을 것이다. 대용량의 데이터를 저장하는 시스템이라면 이와 같이 구성한 파일 시스템이 하나만 존재하지는 않을 것이다. 여러 개의 파일 시스템이 생성될 것이고 각각의 파일 시스템은 첫 번째와 두 번째 단계를 통해 분산을 완료할 수 있을 것이다. 하지만, 디스크 I/O의 성능을 최적화하기 위해서는 하나의 테이블이 모든 파일 시스템에 분산되어 저장되어야 한다. 예를 들어, 서로 다른 디스크로 구성된 파일 시스템이 4개이고 해당 테이블이 800MB라고 가정한다면 각각의 파일 시스템에 200MB씩의 테이블 데이터가 저장되어야만 해당 테이블은 전체 디스크에 분산되어 저장될 것이다. 이를 구현하기 위해 DBA는 세그먼트 스크라이핑(Segemnt Striping) 기법을 이용하여 데이터베이스를 구성해야만 한다. 이러한 역할은 데이터베이스의 성능을 위해 매우 중요한 역할임을 명심하길 바란다.

위에서 디스크 업체와 OS 담당자가 역할을 수행하게 되면 아래와 같은 형태의 디스크가 구성될 것이다.

disk_ksy_20150128.jpg

위와 같이 디스크가 구성된다면 4개의 파일 시스템이 구성되며 각각의 파일 시스템은 8개의 디스크로 스트라이핑된다. 이 의미는 하나의 파일을 /oradata1 파일 시스템에 저장한다면 해당 파일은 /oradata1 파일 시스템을 구성하는 8개의 디스크에 1/8씩 저장되며 해당 파일을 엑세스한다면 8개의 디스크가 동시에 작동하게 된다는 의미이다. 이와 같이 디스크가 구성되어야만 이제서야 DBA의 역할이 수행될 수 있을 것이다.

각각의 역할은 어느 하나 생략할 수 없으며 특히 DBA의 역할은 실제 프로젝트에서 제대로 실행되지 않는 경우가 많다. 위와 같은 역할들이 제대로 수행되었을 때에만 우리가 원하는 성능을 고려한 최적의 디스크 I/O 분산이 수행될 수 있을 것이다.