데이터이야기

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

생각의 전환이 데이터베이스를 최적화 시킨다. - 5부

데이터 이야기
작성자
dataonair
작성일
2016-02-11 00:00
조회
3302


생각의 전환이 데이터베이스를 최적화 시킨다. - 5부



아직도 많은 곳에서는 클러스터 팩터를 고려하지 않는 사이트가 존재한다. 대용량 데이터베이스에서 우리가 원하는 데이터를 빠른 속도로 추출하기 위해서 SQL 최적화도 중요하지만 추출하고자 하는 데이터의 클러스터 팩터야 말로 진정 성능을 최적화할 수 있는 데이터베이스 아키텍쳐이다. 데이터베이스를 구축하는 프로젝트를 수행하거나 또는 운영 중인 시스템에 대해 클러스터 팩터 최적화에 관심을 가져야 할 시대이다.

클러스터 팩터를 최적화화는 방법에는 테이블 재구성 방법부터 파티션 테이블을 이용하는 방법까지 여러 방법이 존재하며 이에 대한 방법은 결코 쉽지 만은 않다. 어려움이 있는 만큼 효과적으로 구성된다면 우리의 노력에 비해 더 큰 효과를 기대할 수 있는 것이 클러스터 팩터 최적화이다. 이와 같은 클러스터 팩터 최적화를 이제는 간과할 수는 없을 것이다. 데이터베이스가 대용량으로 변화면 변할수록 클러스터 팩터 최적화는 절실히 요구될 것이다. 클러스터 팩터를 최적화할 수 있는 방법은 다양하게 존재한다. 클러스터 팩터 최적화의 방법은 여러 가지가 존재하지만 모든 방법들이 엑세스하고자 하는 데이터가 최소한의 블록에 저장되어야 한다는 것이다. 이제부터 여러 방법을 이용하여 클러스터 팩터를 최적화하는 방법에 대해 확인해 보자.

정렬을 통해 클러스터 팩터 최적화를 구성하자.

클러스터 팩터 최적화를 위해서는 어떻게 해야 하는가 우리가 거래내역 테이블에서 카드번호 컬럼의 값으로 클러스터 팩터를 최적화하기 위해서는 어떻게 해야 하는가 거래내역 테이블에서 카드번호 컬럼의 값으로 클러스터 팩터를 최적화한다는 의미는 하나의 블록에 동일한 카드번호 값이 저장되어야 한다는 의미이다. 서로 다른 블록에 저장되어 있는 동일 카드번호 값의 데이터를 하나의 블록에 저장하기 위해서 우리가 사용할 수 있는 방법은 정렬이다. 정렬만이 우리는 원하는 컬럼으로 클러스터 팩터를 최적화할 수 있다.

결국, 클러스터 팩터 최적화를 수행하기 위해서는 기존 데이터에 대해 클러스터 팩터를 최적화하기 위한 컬럼으로 정렬을 수행하여 다시 저장해야 한다는 의미이다. 물론, 클러스터 팩터를 최적화하기 위해서는 정렬에 대한 부하가 발생할 수 있다. 그렇다면 어떤 방법을 이용하여 우리는 원하는 컬럼으로 정렬을 수행하여 데이터를 다시 저장할 수 있을까 아래와 같은 방법을 통해 우리는 원하는 컬럼으로 정렬을 수행할 수 있게 된다.



■ 테이블 재구성을 통한 클러스터 팩터 최적화
■ 파티션 테이블의 파티션 키(KEY) 컬럼으로 클러스터 팩터 최적화
■ 파티션 테이블을 이용한 클러스터 팩터 최적화
■ IOT를 이용한 PRIMARY KEY 인덱스의 값으로 클러스터 팩터 최적화
■ 클러스터 테이블을 이용한 클러스터 팩터 최적화



위와 같은 방법을 통해 우리는 테이블에 저장되어 있는 데이터의 클러스터 팩터를 최적화할 수 있다. 그렇다면 각각의 방법은 어떠한 특징을 가지게 되는지 확인해 보자.

첫 번째로 테이블 재구성을 통한 클러스터 팩터 최적화를 확인해 보자. 테이블 재구성 방법은 테이블에 존재하는 데이터의 클러스터 팩터를 최적화하기 위해 실제로 정렬을 수행하여 다시 저장하는 것을 의미한다. 해당 테이블과 동일한 구조의 테이블을 생성한 후 해당 테이블에서 클러스터 팩터를 최적화하기 위한 컬럼으로 정렬을 수행한 후 새로 생성한 테이블에 데이터를 저장한다. 위와 같이 수행한다면 새로 생성한 테이블의 데이터는 클러스터 팩터를 최적화하고자 하는 컬럼으로 정렬되어 저장될 것이다.

이와 같다는 의미는 새로 생성된 테이블은 정렬을 수행한 컬럼으로 클러스터 팩터가 최적화될 것이다. 그리고 기존 테이블과 새로운 테이블을 교체하면 우리가 원하는 방향대로 클러스터 팩터를 최적화할 수 있게 된다. 물론, 이와 같은 작업은 서비스 정지 시간이 많이 필요할 수 도 있다. 그러므로 많은 고려를 통해 작업 절차를 수립해야 할 것이다.

두 번째로 파티션 테이블의 파티션 키(KEY) 컬럼으로 클러스터 팩터 최적화를 확인해 보자. 우리가 거래내역 테이블에 대해 거래일자 컬럼으로 파티션 테이블을 구성한다면 어떻게 되는가 거래내역 테이블에 대해 거래일자 컬럼으로 월별 파티션 테이블을 구성한다면 2008년 5월 파티션, 2008년 6월 파티션 등 우리가 필요한 월 파티션이 구성될 것이다. 파티션은 무엇을 의미하는가 거래일자 컬럼으로 월별 파티션 테이블을 구성했다면 거래일자 컬럼의 값 중 년 월이 동일한 데이터를 동일한 파티션에 구성하게 될 것이다.

그렇다면 거래일자 컬럼의 동일 년 월이면 해당 데이터는 동일 블록들에 저장될 것이다. 결국, 파티션 테이블은 파티션 키 컬럼으로 클러스터 팩터 최적화를 구성할 수 있게 된다. 이는 사실 우리가 의도한 것은 아니지만 파티션 테이블을 사용함으로써 우리가 얻을 수 있는 혜택이다.

세 번째로 파티션 테이블을 이용한 클러스터 팩터 최적화는 다음에서 확인해 보기로 하고 네 번째 IOT를 이용한 PRIMARY KEY 인덱스의 컬럼 값으로 클러스터 팩터를 최적화하는 방법에 대해 확인해 보자. IOT는 인덱스와 구조가 동일한 테이블을 의미하며 IOT는 PRIMARY KEY 컬럼으로 테이블을 구성하는 것이다. 따라서 PRIMARY KEY 인덱스의 컬럼에 의해 클러스터 팩터가 최적화될 것이다.

예를 들어, TAB 테이블에서 COL1+COL2+COL3 컬럼이 PRIMARY KEY 인덱스라고 가정하자. 해당 테이블을 IOT 테이블로 구성한다면 PRIMARY KEY 인덱스가 테이블이 되므로 해당 테이블은 COL1 컬럼이 동일한 값에 의해 정렬이 될 것이다. 따라서, COL1 컬럼에 의해 해당 테이블은 클러스터 팩터가 최적화될 것이다. 또한, COL1 컬럼의 값이 동일한 데이터에 대해서는 COL2 컬럼에 의해 정렬되어 데이터가 저장되므로 COL1+COL2에 의해서도 클러스터 팩터가 최적화될 것이다.

하지만, COL1+COL2+COL3에 의해 클러스터 팩터가 최적화된다고 이야기하지는 않는다. 이는 COL1, COL2 및 COL3 까지 동일한 데이터는 PRIMARY KEY 인덱스의 모든 컬럼이므로 해당 테이블에는 하나의 데이터만이 존재하기 때문이다.

다섯 번째로 클러스터 테이블을 이용한 클러스터 팩터 최적화를 확인해 보자. 클러스터 테이블은 파티션 테이블과 유사하다. 클러스터 키 컬럼을 기준으로 동일한 값을 가지는 데이터를 동일 블록에 모아서 저장하기 때문에 해당 컬럼으로 클러스터 팩터가 최적화 된다. 하지만, 클러스터 테이블은 많이 사용되는 테이블은 아니다. 이는 파티션 테이블이 클러스터 테이블의 역할을 대신해 줄 수 있기 때문이다.

이와 같이 여러 가지 방법으로 클러스터 팩터를 최적화할 수 있다. 클러스터 팩터 최적화는 클러스터 팩터 최적화가 된 컬럼으로 조회를 수행하는 순간 클러스터 팩터 최적화를 수행하지 않은 테이블에 비해 10배 이상 성능이 향상될 수 있다. 이와 같은 이유에서 우리는 조회의 중심에 있는 컬럼으로 클러스터 팩터를 최적화하는 것은 매우 중요한 사항이다. 하지만, 아직도 많은 곳에서 클러스터 팩터를 이해하지 못한다는 것이 필자를 슬프게 만들기도 한다. 이와 같은 클러스터 팩터에 대해 많은 고려가 필요할 것이다.