2013-05-02 5 views
0

우리는 데이터베이스 (mysql)를 amazon redshift (데이터웨어 하우스)로 이동하려고 시도하고 있으며웨어 하우스 db를 업데이트하는 중에 문제가 발생했습니다. db에 일반 로깅을 사용하도록 설정 한 다음 redshift의 일반 로그에서 이러한 모든 쿼리를 재생합니다. 모든 업데이트 쿼리는 6-7 초 정도 걸립니다. 이 업데이트를보다 빠른 속도로 실행할 수있는 방법을 찾고 있습니까? Amazon redshift는 내부적으로 postgre db를 사용합니다.이 문제를 해결 한 사람이 redshift/postgre 자체에서 해결책을 제안 할 수 있다면 좋을 것입니다. 업데이트를 빠르게하는 일반적인 방법이 도움이 될지라도. 내가 시도한 한 가지 해결책은 모든 업데이트를 삭제 및 삽입 집합으로 병합하는 것입니다. 따라서 단일 테이블의 모든 업데이트는 where 절과 단일 일괄 처리 삽입 쿼리를 결합한 단일 삭제 쿼리로 변환됩니다. 누구나 대체 솔루션을 제공하거나 내가 시도한 솔루션에 대한 의견을 제시 할 수 있습니까?데이터베이스를 더 빨리 업데이트 하시겠습니까?

+0

현재 db는 mysql에서 호스팅되며 쿼리는 단일 테이블에 대한 기본 업데이트 쿼리입니다. – user1045047

+0

mysql db의 일반 로그에서 쿼리를 캡처하고 postgre db에서 재생합니다. – user1045047

+0

각 업데이트 프로세스의 행 수는 대개 약 10k 행입니다. 우리는 redshift 콘솔 (단일 트랜잭션)에서 연결을 시작하지만 단일 트랜잭션에서 단일 쿼리를 실행하고 단일 트랜잭션에서 약 100 개의 쿼리를 실행하려고했습니다. 결과는 각 검색어에 대해 약 6 ~ 7 초, 즉 단일 거래에서 100 회의 업데이트에 대해 약 600 ~ 700 건으로 동일합니다. – user1045047

답변

1

Redshift는 '일반'데이터베이스로 사용되지 않습니다. 모든 데이터는 COPY 명령 (또는 CREATE TABLE AS 구문)을 사용하여 삽입 한 다음 SELECTS에 사용해야합니다.

삽입 또는 업데이트와 같은 단일 행에 대한 작업은이 데이터베이스가 최적화 된 작업이 아닙니다.

UPDATE 대신 제안 된 임시 해결책 (DELETE/INSERT 사용)은 속도를 증가 시키지만 VACUUM 후에 모든 추가 된 행이 데이터베이스의 UNSORTED 청크에 삽입된다는 것을 기억하십시오. 모든 데이터가 올바르게 정렬되고 사용되지 않는 공간이 재사용됩니다 .