我有一個龐大的數據庫,包含200GB記錄(22億個數據)和強大的硬件(16個CPU 32 GB RAM)Oracle。我需要在這些維度上查詢這些龐大的數據。每小時200.000新記錄添加到我的事實表具有20億數據的物化視圖刷新
時間 - >年,月,日,小時
業務1 - > 4級
業務2 - > 3級
用戶 - >一百萬個
業務1和業務2中相同的最低水平的匹配稱爲ad_variation
1 service_record表(2個十億數據)
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)(500萬data)
|
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全部級別(business1_hour group by trunc(time,day),business1_levels,subscriber) (3000萬-5千萬個數據)
|
business2_day_all level(business2_hour group by trunc(time,day),business2_levels,subscriber) (3000萬-5千萬個數據)
|
time_levels
有沒有人可以爲我提供如何改進或解決刷新問題?
Oracle版本:10g中
service_Record表:
創建表SERVICE_RECORD並行16存儲(初始1M下10M) 分區由範圍(servicetime) ( 每日分區 )作爲 從tap_prod.service_Record中選擇s.id,s.servicetime,s.advariationId,s.blindId,s.action 其中s。服務時間> to_date('01/01/2012','dd/MM/yyyy');
我的主要組由數據:
CREATE物化視圖tap_cube
並行16存儲(初始1M下10M)
分區由範圍(service_time)
(每日分區)
構建立即刷新快速上要求
AS
SELECT TRUNC(sr.servicetime, 'HH')作爲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,計數(sr.action)爲COL1,
COUNT(*)作爲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
)
build immediate新鮮的快速需求
爲
選擇
CAST(mycube.service_time AS TIMESTAMP)AS service_time,
ADV.broker_id爲ENTITY_ID,
blind_id,
SUM(total_impr)作爲total_impr,計數(total_impr)COL3,
SUM(total_action)作爲total_action,計數(total_action)如COL1,COUNT(*)作爲COL2
FROM tap_cube mycube,dim_advertisement進階
WHERE mycube.ad_variation_id = adv.ad_variation_id
組由CAST(mycub e.service_time AS TIMESTAMP),ADV.broker_id,blind_id;
業務1個維度級別:
CREATE表
dim_advertisement
AS
選擇bro.id AS broker_id,
adver.id AS ADVERTISER_ID,
camp.id AS CAMPAIGN_ID,
進階.id AS advertisement_id,
ad.id AS ad_variation_id
FROM
tap_prod.advertisement進階,
tap_prod.ad_variation廣告,
tap_prod.campaign陣營,
tap_prod。廣告客戶adver,
tap_prod.broker BRO
WHERE
bro.id = adver.brokerid
和camp.advertiserid = adver.id
AND camp.id = adv.campaignid
和ad.advertisementid =進階。 ID;
什麼類型的MV?什麼版本的Oracle?舉一個MV的例子。 –
我以爲你有一張有20億記錄的桌子......這應該是可行的。我想我們需要更多關於正在發生的事情的信息。什麼代碼是有問題的MV,以及當你遇到問題時的變化速度等等。 – Ben
Oracle版本是10g。此應用程序是一個廣告管理系統。用戶每小時都會查看200.000條新標語。我們的目標是根據多少用戶和唯一用戶在時間空間(年,月,日,小時)水平上看到橫幅來報告結果。 – user1893727