2008-09-11 6 views
2

SQL Server 인덱스 된 뷰 (또는 Oracle Materialized Views)에 익숙하며 OLAP 응용 프로그램에서 사용합니다. 그들은 실행 계획을 강탈하고 기존 코드를 변경해야하는 인덱스 된 뷰로 다시 맵핑 할 수 있다는 점에서 정말 멋진 기능을 가지고 있습니다.OLTP의 인덱싱 된 뷰?

IE. SPROC가 정말 비싼 조인이라고 가정 해 봅시다.

SELECT [일부 열] 표 INNER FROM
는 표 2는 [세부 사항]
INNER 표 3 가입 가입 [BUNCH 더 JOINS] 나는 개최 인덱싱 된 뷰를 작성하는 경우 ...

비슷한 결과 집합을 설정하면 쿼리 최적화 프로그램이 기본 테이블과 달리 SPROC를 내 인덱싱 된 뷰에 보내고 성능이 크게 향상됩니다.

지금은 OLTP!에서 인덱싱 된보기를 사용하고 싶다고 말합니다. 나는이 사이트와 같은 대부분의 OLTP가 상대적으로 무겁다는 것을 의미합니다. 값 비싼 조인이 있으면 톤을 빠르게 할 수 있고 잠재적으로 잠금 경합 (http://www.codinghorror.com/blog/archives/001166.html)을 줄일 수 있습니다. 더 나은 것은 코드를 변경하지 않고 색인 된보기를 작성하는 것입니다.

그러나이 또한 데이터베이스가 우리가 인덱싱 된 뷰에 이러한 데이터의 사본을 보관해야하기 때문에 커짐에 의미 ...

사람이 이제까지 OLTP에서 경합 또는 속도 문제를 해결하기 위해 인덱싱 된 뷰를 사용 했습니까? 나는 어떻게 이것을 사용하는 것을 보지 못했을 까?

답변

5

구체화 된 뷰는 OLTP에 대한보고에 유용 할 수 있습니다. 특히 많은 수의 행을 집계하여 결과를 얻습니다. 공간 요구 사항은 저장할 데이터의 양에 따라 다릅니다. 캐시로 생각하십시오.

까다로운 균형은 보고서의 최근 데이터가 얼마나 필요한지와 OLTP 성능에 어느 정도 영향을 미칠 수 있는지에 있습니다. 다소 오래된 데이터가 OK 인 경우, 시스템 활동이 적은 시간 동안 뷰에 대한 갱신을 스케줄 할 수 있습니다.

한 번만 내가 현재의 데이터를 필요로하지 못했고 맞춤형 개발이 필요했습니다. 기본 테이블에 대한 각 갱신은 트랜잭션 테이블에 레코드를 기록한 트리거를 시작했습니다. 이 뷰는 캐싱 된 집계와 트랜잭션 테이블에 저장된 델타를 보았습니다. 시스템 리소스가 허용되면 트랜잭션이 델타 트랜잭션으로 집계 테이블에 적용됩니다. 이것은 두 번째 데이터,보고에 대한 좋은 성능 (최근 트랜잭션 만 발생하는 유일한 집계)과 데이터베이스에 대한 부하가 거의 없음 (모든 글의 크기가 두 배가되고 매회 거대한 집계를 다시 계산하지 않음)까지 가능했습니다.

불행히도 유지 관리가 복잡하고 간단한 내장 도구를 사용하지 않았습니다. 보고 데이터를 기다릴 수 있다면 내장 된 구체화 된보기를 사용하고 새로 고침을 지연하는 것이 가장 좋습니다.

+0

이러한 구체화 된보기가 OLTP에서 작성되었거나 다른 곳에 저장 되었습니까? OLTP에서 생성 된 경우 데이터베이스 크기 및 성능에 어떤 영향을 미쳤습니까? 구체화 된 견해가 내려지기 전에 ** 이러한 OLTP가 과부하 상태였습니까? – Tyler

+0

그들은 OLTP에있었습니다. 대부분 DBLink를 통해 네트워크를 통해 모든 것을 밀어내는 것이 OLTP를 사용하는 것보다 훨씬 더 어려웠 기 때문입니다. 사용법이 점점 추해지고 있었고, 그 때문에 우리는 그들을 만들었습니다. 그들이 자리를 잡은 후에는 훨씬 나아졌습니다. –

2

우리는 작업 속도를 높이기 위해 구체화 된보기를 사용합니다. 대부분 OLTP 시스템에 대한 보고서 용입니다. 많은 보고서는 데이터웨어 하우스에서 실행되지만 밤새 창고를 새로 고침하기 때문에 OLTP 테이블에서 데이터를 가져와야합니다.

관련 문제