我有一個應用程序收集性能指標並將它們存儲在數據集市中。然後,我使用Mondrian對數據進行分析和臨時探索。我每天收集約5e6行,METRIC表的總大小約爲300M行。Mondrian w/Degenerate Dimensions的性能不佳
我們根據與SLA的度量指標比較來「數據」我們的數據。顏色有5個不同的值。當我們進行簡單的MDX查詢以獲得特定日期範圍(例如1天)的數據的顏色分佈時,我們看到如下的查詢:
2014-06-11 23:17:08,042從「METRIC」「METRIC」組中通過「METRIC」執行sql [選擇「METRIC」。「COLOR」爲「c0」 )。 「COLOR」,以便通過 「公制」 「COLOR」 ASC NULLS LAST] 2014年6月11日23:17:58747 DEBUG [SQL] - 223:,EXEC 50704毫秒
爲了提高性能,數據集市包括第四天的聚合表小時和天的級別,並且兩個聚合表都包含COLOR列。
我知道Mondrian非常依賴底層數據庫的性能,但實際上沒有辦法調整它。我可以在COLOR上創建一個索引(因爲對索引的全面掃描比對錶的完整掃描稍快),但在300M行表上創建具有5個不同值的索引似乎很愚蠢。日聚合表大約有500K行,並且對這個表執行幾乎相同的查詢的速度要快得多,但是Mondrian似乎總是轉到基本事實表以查找這些維度查詢。
我的問題是,有沒有辦法避免這個查詢?如果我無法避免它,是否有可能讓Mondrian使用這種查詢類型的聚合表?我已在此維度/層次結構的單一級別中指定了approxRowCount,並且消除了類似查詢以獲取值的計數。我還沒有挖掘到蒙德里安的來源,但還沒有確定是否有可能使用聚合表,或者我的部分是否有一些配置阻止它。
編輯澄清:
我可能沒有做詢問我的一個很好的工作問題,讓我嘗試和澄清。我的MDX查詢看起來是這樣的:
select [Color].[Color].Members on columns,
{[Measures].[Metric Value], [Measures].[Count]} on rows
from [Metric]
where [Time].[2014].[June].[11]
我可以看看這和手工編寫回答這個查詢
select COLOR, avg(VALUE), sum(FACT_COUNT)
from AGG_DAY_METRIC
where YEAR = 2014
and MONTH = 6
and DAY_OF_MONTH = 11
group by COLOR
數據庫回答這個查詢在100ms左右掃描約4K行SQL查詢。 Mondrian需要幾分鐘的時間來回答 查詢,因爲它有幾個查詢不直接回答MDX查詢,而是獲取有關 維度的信息。在上面的情況下,數據庫必須掃描300M行,花費50秒,返回5個可能的顏色。如果顏色位於正常尺寸表中,則只有5行,但在退化維度中,可能有數百萬行爲100個。
所以我的問題是:
一)有沒有辦法告訴蒙德里安退化維度的價值和避免這些疑問?
b)有沒有辦法讓Mondrian從聚合表中回答這些查詢?
感謝您的回覆。有一個度量計數(聚合類型'計數'),所有聚合表都具有FACT_COUNT列,所有聚合表包含COLOR退化維度值。我也試圖澄清我的問題。 – sceaj