데이터이야기

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

데이터 마이그레이션(Migration)에 숨겨진 1분을 감소시켜라 - 6부

데이터 이야기
작성자
dataonair
작성일
2014-09-15 00:00
조회
4659


병렬 프로세싱(Parallel Processing) 아키텍쳐를 이용하자.

대용량 테이블에 대한 최적의 엑세스를 위해서는 여러 가지 아키텍쳐가 필요하다. 데이터 마이그레이션 또한 테이블의 데이터를 엑세스하는 것이며 그렇기 때문에 이러한 대용량 테이블에 대한 최적의 엑세스는 반드시 필요하다. 이와 같은 대용량 테이블에 대한 엑세스 최적화의 중심에는 파티션 아키텍쳐와 함께 병렬 프로세싱 아키텍쳐가 존재한다. 그렇다면 병렬 프로세싱 아키텍쳐는 무엇인가

병렬 프로세싱 아키텍쳐는 매우 간단한 아키텍쳐이다. 농촌에서 곡물에 대한 수확기가 되면 서로 돌아가며 수확을 돕는 것을 많이 보았을 것이다. 그렇다면 자신의 논에 대한 수확을 혼자서 하면 되지 왜 다른 사람의 도움을 받아 같이 수확을 하는 것일까 이러한 질문을 한다면 누구나 일을 나누어 하게 되면 더 빠르게 수확을 마칠 수 있기 때문이라고 할 것이다. 병렬 프로세싱도 이와 별반 다르지 않다.

테이블을 엑세스하는 경우 기본적으로 하나의 프로세스에 의해 해당 테이블을 엑세스하게 된다. 엑세스하는 테이블이 대용량 테이블이라면 파티션 아키텍쳐를 사용했음에도 불구하고 전체 테이블 엑세스에 대해서는 빠른 속도를 기대하기 힘들 것이다. 만약, 대용량 테이블을 여러 개의 프로세스가 엑세스를 나누어 작업을 수행한다면 어떻게 되겠는가 당연히 하나의 프로세스가 작업하는 것보다 빠른 속도를 보장받게 될 것이다. 이와 같이 하나의 프로세스로 테이블을 엑세스하는 것이 아니라 여러 개의 프로세스로 테이블을 엑세스하는 아키텍쳐를 병렬 프로세싱 아키텍쳐라고 한다.

결국, 여러 개의 프로세스를 이용하여 대용량 테이블을 엑세스하게 함으로써 수행 속도의 향상을 기대할 수 있게 하는 아키텍쳐가 병렬 프로세싱이 된다. 이와 같이만 결론을 짖는다면 모든 작업에 병렬 프로세싱을 이용하려고 할 수 도 있다. 이득을 얻는 사람이 있으면 어디에선가는 손해를 보는 사람이 있는 것이 세상 이치일 것이다. 병렬 프로세싱도 여러 프로세스로 작업을 수행하게 함으로써 수행 속도 향상의 장점을 가지지만 다른 부분에서는 불이익을 당할 수 있게 된다. 그렇다면 병렬 프로세싱을 잘못 사용하여 당할 수 있는 불이익에는 어떤 것이 있겠는가

첫 번째로 CPU 등의 과다한 자원 사용이다. 여러 프로세스로 대용량의 테이블을 엑세스하는 것이 병렬 프로세싱이라고 말했다. 그렇기 때문에 작업을 수행하기 위해 여러 개의 프로세스를 기동시키게 된다. 프로세스를 기동시키는 것은 비용을 발생시키는 작업이다. 따라서, 병렬 프로세싱을 사용하게 되면 하나의 프로세스로 작업하는 기존 방식에 비해 자원을 많이 사용하게 되는 것은 당연한 사실일 것이다.

과다한 자원 사용은 해당 작업을 수행하는 부분에서는 손해 볼게 없을 것이다. 자신이 수행한 작업이 많은 자원을 사용하여 빠르게 작업을 종료할 수 있다면 이보다 더 좋은 것은 없을 것이다. 하지만 데이터베이스 시스템은 한명의 사용자가 사용하는 시스템이 아니다. 우리가 공동체 생활을 하면서 자신이 하고 싶은 일을 모두다 할 수 있는가 아마 그렇지 못할 것이다. 마찬가지로 수행하는 작업의 빠른 수행 시간을 보장 받기 위해 다른 작업을 고려하지 않으면 안될 것이다. 하지만 보통의 경우 데이터 마이그레이션 작업은 서비스 정지 후 수행하거나 또는 작업이 거의 없는 시점에 수행하므로 많은 경우에는 병렬 프로세싱을 최대한 사용할 수 있을 것이다.

두 번째로 과다한 디스크 I/O의 발생이다. 하나의 프로세스로 데이터를 엑세스하는 경우에는 하나의 프로세스에 의해 디스크 I/O가 발생하게 된다. 하지만 여러 개의 프로세스가 동일한 작업을 수행한다고 가정하자. 그렇다면 동일 시간에 디스크 I/O를 계산해 보면 당연히 병렬 프로세싱을 수행하는 작업이 많은 디스크 I/O를 발생시킬 것이다. 그렇기 때문에 디스크의 성능을 넘어선 프로세스 개수로 작업을 수행한다면 성능은 저하될 것이다. 그렇기 때문에 어떤 시스템에서는 8개의 프로세스로 병렬 프로세싱을 수행하는 것보다 4개의 프로세스로 병렬 프로세싱을 수행하는 것이 더 유리한 경우도 많다.

이는 해당 시스템이 8개의 프로세스로 작업하는 경우 동시에 발생하는 디스크 I/O가 증가하고 그 증가된 디스크 I/O을 디스크가 감당할 수 없기 때문이다.

병렬 프로세싱을 이용하게 되면 위와 같은 단점이 발생하게 된다. 데이터 마이그레이션을 수행하는 중에는 이 2가지 단점이 발생하지 않을 수 도 있다. 그 이유는 앞서 언급했듯이 데이터 마이그레이션을 수행하는 시점이 보통의 경우 서비스를 중지하고 수행하거나 또는 다른 작업이 거의 없는 시점에 수행하기 때문이다. 이러한 경우가 아니라 모든 업무가 수행되는 시점이라면 병렬 프로세싱을 적용한 데이터 마이그레이션시 위의 2가지 문제점을 항상 고려해야 할 것이다.

분명한 것은 이러한 단점이 있음에도 불구하고 대용량 데이터를 엑세스하는 작업에는 항상 병렬 프로세싱을 고려해야 한다. 병렬 프로세싱이야 말로 대용량 데이터를 엑세스함에 있어 획기적인 응답 속도를 보장할 수 있기 때문이다.

디스크 I/O 분산 아키텍쳐를 적용해라.

우리가 사용하는 데이터를 해당 시스템에 연결되어 있는 디스크로 분산시킨다는 것은 매우 중요한 성능 향상 항목이다. 그래서 인지 최근에는 많은 곳에서 디스크 I/O 분산에 많은 신경을 쓰고 있는 것이 사실이다. 시스템을 구축하는 경우 이제는 대부분 디스큰 분산을 고려하여 데이터베이스 시스템을 구성하고 있다.

여기서는 디스크 I/O 분산 방법에 대해서는 워낙 많은 분량에 해당하므로 생략하겠다. 어떤 전략을 가지고 디스크 I/O 분산을 수행해야 할지 확인해 보자.

어떤 사이트에서는 테이블이 저장되는 디스크와 인덱스가 저장되는 디스크 공간을 분리하여 저장하는 경우가 있다. 하지만, 이와 같은 디스크 구성은 디스크 I/O에 의해 성능 저하가 발생하며 그렇기 때문에 디스크 I/O 분산을 제대로 수행하지 못한 경우에 해당하게 된다. 테이블 또는 인덱스 별로 저장될 디스크를 분리하는 것이 유리하다고 언급하는 문서들도 간혹 존재한다. 하지만, 데이터와 인덱스를 분리하여 디스크 I/O를 분산해서는 안 된다. 그렇다면 디스크 I/O 분산은 무엇을 기준으로 해야 하는가

디스크 I/O 분산은 인덱스 또는 테이블에 상관 없이 모든 테이블 또는 인덱스가 모든 디스크에 균등하게 펼쳐져 있어야만 우리가 원하는 디스크 I/O 속도를 보장 받을 수 있게 된다. 이와 같이 구성한다면 하나의 테이블을 엑세스하는 경우에 우리는 전체 디스크를 엑세스할 수 있게 된다. 물론, 하나의 인덱스를 엑세스하는 경우 또한 모든 디스크를 엑세스하게 된다. 그렇다면 테이블을 엑세스하는 경우와 인덱스를 엑세스하는 경우 중복된 디스크를 엑세스할 수 도 있게 된다. 하지만, 하나의 테이블을 엑세스하여도 해당 시스템의 모든 디스크를 엑세스하게 되므로 인덱스와 중복되는 디스크가 존재하더라도 테이블 엑세스시에 모든 디스크를 엑세스한다는 것이 더 큰 성능 향상 효과를 기대할 수 있다.

디스크 I/O 분산에 대한 아키텍쳐를 구성하는 경우 반드시 테이블과 인덱스가 저장될 디스크를 구분하는 것이 아니라 모든 인덱스와 모든 테이블이 해당 시스템에 연결된 모든 디스크에 펼쳐져서 저장될 수 있도록 구성해야 한다. 이와 같이 디스크를 구성해야만 디스크 I/O 분산을 통해 우리가 얻을 수 있는 효과를 극대화할 수 있는 방법이다.

데이터 마이그레이션을 수행하기 위한 아키텍쳐와 전략을 연결해라.

위에서 데이터 마이그레이션을 위한 많은 아키텍쳐를 확인해 보았다. 위에서 언급한 아키텍쳐는 데이터 마 틀림 없다. 물론, 툴을 이용하여 데이터 마이그레이션을 수행한다면 위의 아키텍쳐 중 사용하지 못하는 아키텍쳐도 존재한다. 또한, 데이터 마이그레이션을 그대로 수행하는 경우가 아니라 업무가 변경되어 또는 재개발을 수행하여 데이터의 기반이 변경되어 데이터 마이그레이션을 수행하는 경우에도 위의 아키텍쳐를 사용하지 못하는 경우가 발생할 수 는 있다.

이와 같은 아키텍쳐의 적용보다도 더 중요한 것은 필요한 아키텍쳐와 데이터 마이그레이션의 전략을 연결하는 것이다. 그렇다면 데이터 마이그레이션의 전략은 무엇인가 데이터 마이그레이션의 전략은 언제, 어디서, 누가를 의미하는 것이 아니다. 데이터 마이그레이션의 전략은 무엇을, 어떻게에 해당하는 내용을 의미한다.

과연 어떤 데이터를 어떤 방식을 통해 효과적으로 데이터 마이그레이션을 수행할 것인가가 바로 데이터 마이그레이션의 전략이 된다. 어떤 데이터는 우리가 데이터 마이그레이션을 수행하고자 하는 대상 테이블이 되며 또한 대상 테이블의 데이터가 어떻게 변경되어 데이터 마이그레이션이 수행될지를 의미한다. 어떤 방식이 바로 데이터 마이그레이션을 수행하는 아키텍쳐를 의미하게 된다. 결국, 최적의 데이터 마이그레이션의 아키텍쳐가 포함된 데이터 마이그레이션의 전략을 수립해야만 최적의 데이터 마이그레이션이 가능하게 된다.