共用方式為


疑難排解 OLAP Cube

 

發行︰ 2016年7月

適用於: System Center 2012 SP1 - Service Manager、System Center 2012 R2 Service Manager、System Center 2012 - Service Manager

下列各節說明您可能需要疑難排解 System Center 2012 – Service Manager 資料倉儲中的線上分析處理 (OLAP) 資料 Cube 的常見問題。

處理失敗

雖然 DWRepository 資料庫中存在保護機制來確保資料完整性,但這些機制無法完全防止發生處理錯誤的可能性。 最常見的處理錯誤是 DimensionKeyNotFound 例外狀況。 由於 SQL Server Analysis Server (SSAS) 維度預設每 60 分鐘執行一次,因此在處理事實的量值群組時,維度索引鍵可能還不存在。 在這種情況下,處理邏輯預設會使用 ProcessUpdate 工作重新處理 SSAS 維度,然後再重新處理事實最多兩次來解決索引鍵錯誤。

在一些不常見的情況下,重新處理可能會失敗。 此失敗的可能原因如下:

  • 只有資料倉儲存放庫才會強制使用外部索引鍵來確保資料的完整性。 資料超市為了效能考量,沒有任何外部索引鍵。 由於載入程序會使用 ActiveX Data Objects 方法將資料從存放庫大量移動至資料超市,基於時間點的問題,事實資料可能在維度索引鍵之前就已載入。 若要解決此問題,必須再次執行載入程序來移動現有的維度索引鍵。

  • 在有多個資料超市的情況中,每個資料超市的所有維度均以主要資料倉儲資料超市為目標。 這是為了減少 OLAP Cube 的大小和處理時間。 不過,Operations Manager 或 Configuration Manager 資料超市中的事實可能會以主要資料倉儲資料超市中尚不存在的維度索引鍵為目標。 在這種情況下,您必須在主要資料超市上執行載入作業,解決以 Operations Manager 或 Configuration Manager 資料超市為目標的 Cube 發生處理失敗問題。

疑難排解 MDX 自訂

由於許多 Cube 自訂都需要具備多維度運算式 (MDX) 的工作知識,因此在用於 OLAP Cube 自訂的初始 MDX 運算式中常會出現語法錯誤。 您可能需要多試幾次,運算式才能符合您的需求。 在使用 CubeExtension 或在 SystemCenterCube 元素中定義 MDX 運算式將其新增到 OLAP Cube 之前,應使用 Business Intelligence Development Studio (BIDS) 或 SSAS 在 OLAP Cube 上測試 MDX 運算式,而不儲存變更。

不過,如果使用 CubeExtension 將 MDX 運算式新增到管理組件中時,運算式發生錯誤,您可以解除安裝 Cube 延伸,還原對 OLAP Cube 進行的任何變更。 如果運算式是使用 SystemCenterCube 元素定義的,則必須解除安裝管理組件,然後從 SSAS 手動刪除 OLAP Cube,才能進行任何修正並重新部署 OLAP Cube 管理組件。 因此,您應使用 CubeExtension 元素定義 Cube 自訂。

OLAP Cube 管理組件部署失敗

在某些情況下,您可能會希望瀏覽 WorkItems Assigned To User 量值群組,然後針對特定部門中的所有使用者進行交叉分析篩選。 當您嘗試在 UserDim上執行篩選時,系統沒有任何反應或未傳回任何資料。 這可能會很令人困惑,因為 UserDim 與該量值群組具有關聯性。

在這種情況下,請記得相同的資料庫維度在多維度模型中可有多個角色。 這些維度稱為角色扮演維度。 例如,您可以在描述航班資訊的 OLAP Cube 中使用時間維度多次。 在這種情況下,不同的角色扮演維度可能是 Departure TimeArrival Time,兩者都是以 Time 維度為目標。

WorkItems Assigned To User 範例中,使用者維度的指定角色扮演名稱實際上為 AssignedToUser。 如果使用這個特定維度篩選使用者,而非 “UserDim”,就會傳回正確的資訊。

BIDS 有一個名為 [維度使用方式] 索引標籤的實用功能,可顯示維度和 OLAP Cube 之間的關聯性,讓您可以判斷可用來交叉分析 OLAP Cube 的維度。 此外,在 WorkItems Assigned To User 範例中, UserDimWorkItemAssignedToUser 量值群組無關聯性,而 UserDim(AssignedToUser) 與該量值群組有關聯性,其中的聯結屬性就是 UserDimKey。 在這種情況下,您可以看到角色扮演名稱在 [維度使用方式] 索引標籤的括號內反白顯示。

Service Manager 沒有 [維度使用方式] 索引標籤功能。 因此,您必須查看 BIDS 來判斷可在特定 Cube 上進行篩選的正確維度。

無法在遠端 SSAS 伺服器上處理 OLAP Cube

在某些情況下,在遠端 SSAS 伺服器上處理 OLAP Cube 可能會因為未正確設定防火牆而失敗。 SSAS 的預設執行個體使用 TCP/IP 連接埠 2383,而此連接埠必須在防火牆中解除鎖定才能允許存取。 若要解除鎖定連接埠,請執行下列命令列指示:

C:\Windows\system32>set port=2383   
C:\Windows\system32>netsh advfirewall firewall add rule name="Analysis Services" protocol=TCP dir=in localport=2383 action=allow  

OLAP Cube 處理停止

OLAP Cube 處理停止的原因可能很多。 您必須先確定伺服器具有足夠的 RAM,尤其是在資料倉儲和 SSAS 伺服器裝載在同一部伺服器的情況下,以便有足夠的記憶體能夠同時執行資料倉儲擷取、轉換及載入 (ETL) 和 Cube 處理作業。 可能的解決方案如下:

  1. Microsoft SQL Server 2008 Analysis Services 有已知的死結問題。 因應措施是在處理停止之前,在處理執行緒集區中增加執行緒的數目。 如果系統已停止,因應措施就是重新啟動 System Center 管理服務和 Analysis Services 服務,然後將 Cube 處理工作項目重設為狀態 3 (表示未啟動),讓 Service Manager 工作流程引擎可以重新啟動該工作項目。

    System_CAPS_ICON_note.jpg 注意


    對於 System Center 2012 R2 Service Manager,System Center Management 服務已重新命名為 Microsoft Monitoring Agent。

    若要判斷相關的 Cube 處理工作項目,您可以在 DWStagingAndConfig 資料庫上執行下列查詢。 請注意,這些查詢雖然是逐一顯示,不過您可以很容易將其聯結在一個查詢中:

    select processId from infra.process where processname like ‘Process.{CubeName}’  
    select batchid from infra.batch where processId = {ProcessId from previous query}  
    select * from infra.workitem(nolock) where BatchId = {BatchId from previous query}  
    update infra.workitem set statusid = 3 where workitemId = {workitemId from previous query)  
    
  2. 檢查 SSAS 服務上的 CoordinatorExecutionMode 內容,確定其設定正確無誤。 您可以在 SQL Server 論壇(英文) 上瞭解此問題的詳細資訊。

DWMaintenance 工作在 ManageCubePartitions/ManageCubeTranslations 步驟上停止

在這種情況下,最常見的原因是 SSAS 伺服器沒有回應。 因應措施與前一節<OLAP Cube 處理停止>中的第一個步驟相同。 若要判斷相關的 Cube 處理工作項目,您可以在 DWStagingAndConfig 資料庫上執行下列查詢。 請注意,這些查詢雖然是逐一顯示,不過您可以很容易將其聯結在一個查詢中:

select processid from infra.process where processname = 'DWMaintenance'  
select * from infra.ProcessModule where ProcessId = {ProcessId from previous query} (Note the ProcessModuleId where the VertexName is ManageCubePartitions/ManageCubeTranslaions)  
Select * from infra.batch where ProcessId = {ProcessId from previous query} (Note the BatchId from the largest batch)  
select * from infra.WorkItem where BatchId = {BatchId from previous query}  
update infra.workitem set statusid = 3 where workitemId = {workitemId for the step that is hung with the corresponding processmoduleid for ManageCubePartitions/ManageCubeTranslations)  
  

另請參閱

瞭解 OLAP Cube