2012-10-20 27 views
5

Yaklaşık 1 milyon maddeden oluşan, gerçekçi bir görünüme sahip bir sisteme sahibim. İki saatlik bir aralıkta, 200 milyonu (kayıtların% 20'si) güncellemem gerekiyor. Sorum şu, materyalleşmiş görüşümün yenileme stratejisi ne olmalı? Şu an itibariyle bir aralık ile yenileniyor. Aralıklı bir yenilemeden önce yenilemenin performans üzerindeki etkilerini merak ediyorum ve eski maddileşmiş görünümü yeni olanla yeniden adlandırın/değiştirin. Altta yatan sorun, Oracle tarafından kullanılan ve çok miktarda yineleme yaratan endekslerdir. Herhangi bir öneri takdir edilir.Bir veri ambarında gerçekleşen görünümler için yenileme stratejisi

GÜNCELLEME
bazı kişiler bu benim şimdiki bakış açısı aşağıdaki yapmaktır konu dışı olduğunu düşünüyor beri:

PL/SQL (programlama dili I bir dizi çağırır Oracle Zamanlama Zinciri Oluşturma söz) paralel bir şekilde materyalize görünümü yenilemek için işlevler. Bununla birlikte, bir tür DBA'nın pozisyonuna düşmüş olmama rağmen, bir algoritma ve/veya bir kod ile bir veri problemini çözmeyi düşünüyorum.

+1

sorunu konu dba.se olan sorularınıza yanıt alma açısından esasen faydasız kapalı olarak:

İşte sizin için yaratacak bir PL/SQL fonksiyonudur. – Woot4Moo

+0

Yine de bu bir programlama sorusu değildir. – APC

+0

Ayrıca, merakınızı ne motive eder? Veri ambarında çözülmesi gereken gerçek bir probleminiz var mı? – APC

cevap

1

Tamam, işte ortaya koyduğum çözüm budur, kilometreniz değişebilir ve geri bildirimler gerçeğinden sonra takdir edilir.

1) zincirlerinin paralel yürütme Oracle Zamanlayıcı hale kullanımı yararlanmak (iş)
2) veritabanı
içine uygulamadan arabirim olarak incelemeler (normal tür) kullanılması: Genel Strateji aşağıdaki yapmak oldu

create index baz on foo(bar) nologging 

advantag: 3) aşağıdaki şu şekilde gerekli kullanımı

create materialized view foo 
    parallel 
    nologging 
    never refresh 
    as 
    select statement 

inşa edilecek materialized görünümlerde güvenin Bunun bir sonucu olarak, adım 2'de anlatıldığı gibi görünümü + yeniden oluşturmadan önce arka plandaki materyalize görünümü oluşturabiliriz. Artık avantaj, görünümü aynı isimle tutarken dinamik olarak adlandırılmış materyalize görünümler oluşturuyor. Anahtar, orijinal olana kadar yeni görünümü bitirinceye kadar uzaklaştırmaz. Bu, aynı zamanda, dikkat edilmesi gereken en az yineleme olduğu için hızlı düşüşlere de izin verir. Bu, her 30 dakikada bir "yenilenir" gereksinimimizi karşılayan 5 dakika içinde yaklaşık 1 milyar kayıt üzerinde gerçekleşmiş görünüm oluşturmayı etkinleştirdi. Dahası bu, tek bir veritabanı düğümünde ele alınabilir, bu yüzden kısıtlı donanım ile bile, mümkündür. kapanış ile

CREATE OR REPLACE procedure foo_bar as 
foo_view varchar2(500) := 'foo_'|| to_char(sysdate,'dd_MON_yyyy_hh_mi_ss'); 
BEGIN 
execute immediate 
'Create materialized view '|| foo_view || ' 
    parallel 
    nologging 
    never refresh 
    as 
    select * from cats'; 
END foo_bar; 
+0

Bunu Oracle RAC veya Exadata üzerinde mi çalıştırıyorsunuz? Bunu her yaptığınızda 1 bi parça yüklüyorsanız, oldukça güçlü bir donanıma sahip olmanız gerekir. –

+0

@NWest Kesin olarak bildiğim tek şey 16 cpus ve ~ 128gb ram. – Woot4Moo