2013-07-30 2 views
4

Oracle Database를 사용하여 트랜잭션을 중심으로하는 회사의 데이터 집계 및보고 목적으로 Materialized View를 사용하여 연구했습니다. 현재의보고 시스템은 애플리케이션의 복잡한 데이터 로직을 모호하게 만드는 일련의 뷰에 의존합니다. 이러한 견해는 호출 될 때 시스템에 많은 부담을줍니다.트랜잭션 성능 Materialized View 로그의 영향

보고에 사용하기 전에 복잡한 쿼리 로직을 수행하기 위해 증분 업데이트에 "빠른 새로 고침"을 사용하는 데 관심이 있습니다. 그러나 조직에서 구체화 된보기 로그 (이 빠른 새로 고침에 필요한)가 데이터베이스의 현재 트랜잭션 성능에 영향을 미칠 수 있다는 우려가 있습니다. 이 성과는 우리 조직에 매우 필수적이므로 어떠한 변화에 대한 큰 두려움이 있습니다. 여기

우리가 구현해야 실현보기 로그 유형의 예입니다 :

create materialized view log on transaction 
    with rowid, sequence(transaction_id,account_id,order_id,currency_id,price,transaction_date,payment_processor_id) 
    including new values; 

것은 우리는이 "커밋"업데이트 절 있지만 사용하지 않는 것이 오히려 "요구에"절에 뷰 생성은 성능에 영향을 미친다는 것을 이해합니다.

이러한 유형의 로깅을 구현하면 데이터베이스 트랜잭션 성능에 영향을 줍니까? 나는 약간의 성능에 영향을 미쳐야한다고 생각한다. (로그에) 커밋에 싸인 추가 쓰기 절차가 있기는하지만 오라클 문서에서 이에 대한 참조를 찾을 수 없다. 이 주제에 관한 어떤 문헌이나 조언도 크게 감사 할 것입니다.

도움 주셔서 감사합니다.

답변

7

예, 영향을 미칩니다. 구체화 된 로그를 동 기적으로 유지해야 트랜잭션이 기본 테이블에서 수정 된 모든 행에 대해 구체화 된 뷰 로그에 새 행을 삽입해야합니다. 영향은 시스템에 얼마나 큰 영향을 미치는지 시스템이 I/O 경계에 있고 기본 테이블에 변경 사항을 물리적으로 기록하는 것이 대기 시간의 상당 부분을 차지하도록 최적화 한 경우 시스템이 CPU에 바인딩 된 경우보다 영향이 훨씬 더 커집니다. 대기 시간은 데이터를 읽거나 계산을 수행하는 데 소비됩니다.

OLTP 시스템의 성능에 대해 정말로 우려하는 경우보고를 다른 서버의 다른 데이터베이스로 오프로드하는 것이 좋습니다. 재실행 정보를 비동기식으로 읽을 수 있으므로 Streams (또는 추가 라이센스를 구매할 수있는 경우 GoldenGate)를 사용하여보고 서버에 데이터를 복제 할 수 있습니다.이 정보는 구체화 된보기보다 소스에 미치는 영향이 적습니다. 작업 서버를 프로덕션 서버에 배치하는 대신보고 서버). 그런 다음 OLTP 서버에 영향을 미치지 않는보고 서버에서 구체화 된보기를 정의 할 수 있습니다. 또는보고 서버로 논리적 스탠바이 데이터베이스를 생성하고 거기에 구체화 된 뷰를 생성 할 수 있습니다. 어쨌든 프로덕션 서버에서보고 워크로드를 이동하고 리두 데이터를 비동기 적으로 읽으면 프로덕션 서버의 성능이 보호됩니다.

+0

답장을 보내 주셔서 감사합니다. 보고 작업량을 생산 현장으로 옮기는 것이이 문제를 해결하는 최상의 방법입니다. 재실행 로그의 비동기 읽기를 기반으로 구체화 된보기 만 새로 고칠 수있는 경우. –