200 GB のレコード (22 億のデータ) と強力なハードウェア (16 CPU 32 GB RAM) の Oracle を備えた巨大なデータベースがあります。これらの次元でこの膨大なデータを照会する必要があります。1 時間ごとに 200.000 件の新しいレコードがファクト テーブルに追加されます
時間 --> 年、月、日、時間
ビジネス 1 --> 4 レベルの
ビジネス 2 --> 3 レベルの
加入者 --> 100 万
business1 と business2 は、ad_variation
1 service_record テーブル (20 億データ)と呼ばれる同じ最下位レベルで一致します。
service_record には、タイムスタンプ、加入者 ID、ad_variation_id に時間が含まれます
これらの巨大なシステムを照会するために、62 の具体化されたビューを使用しましたが、システムは時々12008: ORA-12008: error in materialized view refresh path
.
私のシステム
service_record (20 億データ)
|
my_cube ( service_record group by time , ad_variation_id,subscriber ) (5 億データ)
|
business1_hour すべてのレベル( my_cube group by trunc(time,hour) , business1_levels ,subscriber) (2 億 - 6 億のデータ)
|
business2_hour_all level( my_cube group by trunc(time,hour) , business2_levels ,subscriber) (2 億 - 6 億のデータ)
|
business2_day all level( business1_hour group by trunc(time,day) , business1_levels ,subscriber) (3000万 - 5000万データ)
|
business2_day_all level( business2_hour グループ by trunc(time,day) , business2_levels ,subscriber) (3000 万 - 5000 万のデータ)
|
time_levels
更新の問題を改善または解決する方法を教えてくれる人はいますか?
オラクルのバージョン: 10g
service_Record テーブル:
テーブル SERVICE_RECORD を作成 並列 16 ストレージ (最初の 1M 次の 10M) 範囲 ( servicetime ) (毎日のパーティション) によるパーティション as select s.id、s.servicetime、s.advariationId、s.blindId、s.action from tap_prod.service_Record s .servicetime > to_date('01/01/2012','dd/MM/yyyy');
my main group by data :
CREATE materialized VIEW tap_cube
parallel 16 storage (initial 1M next 10M)
partition by range( service_time )
(daily partition )
build immediately refresh fast on demand
AS
SELECT TRUNC (sr.servicetime,'HH') as service_time,
sr.advariationid AS ad_variation_id、
sr.blindid AS blind_id、
COUNT (sr.blindid) AS total_impr、
SUM (sr.action) AS total_action 、count(sr.action) as col1 、
count(*) as col2
FROM service_record sr
group by TRUNC (sr.servicetime、'HH')、sr.advariationid、sr.blindid;
私のビジネス1ロジックテーブル:
ビジネスレベル 1:
具体化されたビューの作成 cube_ty_1_adv_1_time_4
並列 16 ストレージ (最初の 10M 次の 100M)
範囲
による
パーティション
(
service_time
)
(
daily_partition
) (total_impr) as total_impr,count(total_impr) col3 ,
SUM (total_action) as total_action , count(total_action) as col1 , count(*) as col2
FROM tap_cube mycube, dim_advertisement adv
WHERE mycube.ad_variation_id = adv.ad_variation_id
group by CAST ( mycube.service_time AS TIMESTAMP)、ADV.broker_id、blind_id;
ビジネス 1 次元レベル:
CREATE table
dim_advertisement
AS
SELECT bro.id AS ブローカー ID、
adver.id AS 広告主 ID、
camp.id AS キャンペーン ID、
adv.id AS 広告 ID、
ad.id AS ad_variation_id
FROM
tap_prod.advertisement adv、
tap_prod.ad_variation 広告、
tap_prod.campaign キャンプ、
tap_prod.advertiser adver、
tap_prod.broker bro
WHERE
bro.id = adver.brokerid
and camp.advertiserid = adver.id
AND camp.id = adv.campaignid
and ad.advertisementid = adv.id;