2012-10-20 50 views
5

Tôi có một hệ thống có chế độ xem vật chất chứa khoảng 1 tỷ mục, trên cơ sở nhất quán hai giờ tôi cần cập nhật khoảng 200 triệu (20% hồ sơ). Câu hỏi của tôi là chiến lược làm mới trên quan điểm vật chất của tôi là gì? Kể từ bây giờ, nó sẽ được làm mới với một khoảng thời gian. Tôi tò mò về các tác động hiệu suất giữa làm mới trên một khoảng thời gian làm mới phó không bao giờ và đổi tên/thay thế khung nhìn vật chất cũ với chế độ xem mới. Vấn đề cơ bản là các chỉ số được sử dụng bởi Oracle, tạo ra một số lượng lớn redo. Mọi đề xuất đều được đánh giá cao.Làm mới chiến lược cho lượt xem vật lý trong kho dữ liệu

CẬP NHẬT
Kể từ khi một số người dường như nghĩ rằng đây là off topic điểm nhìn hiện tại của tôi là phải làm như sau:

Tạo một Schedule Chain Oracle dùng để gọi một loạt các PL/SQL (ngôn ngữ lập trình tôi lời hứa) chức năng để làm mới xem vật hoá trong một thời trang giả song song. Tuy nhiên, như thể tôi rơi vào vị trí của một DBA các loại, tôi đang tìm cách giải quyết một vấn đề dữ liệu với một thuật toán và/hoặc một số mã.

+1

Vấn đề với đóng cửa như off topic là dba.se là về cơ bản vô dụng về mặt nhận được câu hỏi của bạn đã trả lời. – Woot4Moo

+0

Tuy nhiên đây không phải là một câu hỏi lập trình. – APC

+0

Ngoài ra, điều gì thúc đẩy sự tò mò của bạn? Bạn có vấn đề thực sự trong kho dữ liệu cần giải quyết không? – APC

Trả lời

1

Ok đây là giải pháp tôi đã đưa ra, số dặm của bạn có thể thay đổi và bất kỳ phản hồi nào được đánh giá cao sau sự kiện. Chiến lược tổng thể là để làm những điều sau đây:

1) Sử dụng các Oracle Scheduler cách sử dụng thực hiện song song của chuỗi (công việc)
2) Sử dụng views (loại thường) như giao diện từ các ứng dụng vào cơ sở dữ liệu
3) Dựa vào quan điểm cụ thể hóa được xây dựng theo cách sau đây

create materialized view foo 
    parallel 
    nologging 
    never refresh 
    as 
    select statement 

như sử dụng cần thiết như sau:

create index baz on foo(bar) nologging 

các advantag e của điều này là chúng ta có thể xây dựng khung nhìn vật chất trong nền trước khi thả + tạo lại khung nhìn như được mô tả trong bước 2. Bây giờ, lợi thế là tạo ra các khung nhìn vật chất được đặt tên động, trong khi vẫn giữ quan điểm có cùng tên. Điều quan trọng là không thổi đi cái nhìn vật chất ban đầu cho đến khi cái mới được hoàn thành. Điều này cũng cho phép giảm nhanh, vì có tối thiểu làm lại để quan tâm. Điều này cho phép tạo ra lượt xem vật hoá trên ~ 1 tỷ bản ghi trong 5 phút đáp ứng yêu cầu của chúng tôi về "làm mới" sau mỗi ba mươi phút. Hơn nữa điều này có thể được xử lý trên một nút cơ sở dữ liệu duy nhất, do đó, ngay cả với phần cứng bị hạn chế, nó là có thể.

Dưới đây là một hàm PL/SQL sẽ tạo nó cho bạn:

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

Bạn có đang chạy trên Oracle RAC hoặc Exadata không? Nếu bạn thực sự đang tải 1 tỷ mục mỗi khi bạn làm điều này, bạn phải có phần cứng khá mạnh. –

+0

@NWest Điều duy nhất tôi biết chắc chắn là nó là 16 cpus và ~ 128gb ram. – Woot4Moo