Problemen met OLAP-kubussen oplossen
Gepubliceerd: juli 2016
Is van toepassing op: System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager
In de volgende secties worden veelvoorkomende problemen met OLAP-gegevenskubussen (Online Analytical Processing) in het System Center 2012 – Service Manager-datawarehouse beschreven.
Verwerkingsfouten
Hoewel de DWRepository-database beveiligingsmechanismen bevat om de gegevensintegriteit te waarborgen, kan hiermee een verwerkingsfout niet volledig worden voorkomen. De meest voorkomende verwerkingsfout in een DimensionKeyNotFound-uitzondering. Omdat SSAS-dimensies (SQL Server Analysis Server) standaard elke 60 minuten worden verwerkt, kan het voorkomen dat de dimensiesleutels nog niet bestaan tijdens de verwerking van de maateenheidgroep voor het feit. In dit geval worden de SSAS-dimensies standaard opnieuw verwerkt met de taak ProcessUpdate en wordt het feit vervolgens maximaal twee keer opnieuw verwerkt om de sleutelfouten op te lossen.
In zeldzame gevallen mislukt de herverwerking. Dit kan de volgende oorzaken hebben:
Alleen de datawarehouse-opslagplaats vereist externe sleutels om de integriteit van de gegevens te waarborgen. De datamart gebruikt geen externe sleutels uit prestatieoverwegingen. Omdat de gegevens bij het laadproces in een bulkbewerking worden verplaatst van de opslagplaats naar de datamart met ADO-methoden (ActiveX Data Objects), kan het voorkomen dat de feitgegevens eerder dan de dimensiesleutels zijn geladen als gevolg van een timingprobleem. U kunt dit probleem oplossen door het laadproces opnieuw uit te voeren om de bestaande dimensiesleutels te verplaatsen.
In situaties met meerdere datamarts zijn alle dimensies van elke datamart gericht op de primaire datamart van het datawarehouse. Op die manier wordt de grootte en verwerkingstijd van de OLAP-kubussen verkleind. Het kan echter voorkomen dat feiten in de datamarts van Operations Manager of Configuration Manager zijn gericht op dimensiesleutels die nog niet bestaan in de primaire datamart van het datawarehouse. In dit geval moet u de laadtaak uitvoeren op de primaire datamart om de verwerkingsfout op te lossen voor kubussen die zijn gericht op de datamarts van Operations Manager of Configuration Manager.
Problemen met MDX-aanpassingen oplossen
Omdat veel kubusaanpassingen basiskennis van MDX (Multidimensional Expressions) vereisen, worden er al snel syntaxisfouten gemaakt in de MDX-expressie die wordt gebruikt voor de aanpassing van de OLAP-kubus. U moet de expressie mogelijk een aantal keren wijzigen voordat deze voldoet aan uw behoeften. U kunt de MDX-expressie het beste testen op de OLAP-kubus met Business Intelligence Development Studio (BIDS) of SSAS, zonder de wijzigingen op te slaan, voordat u de MDX-expressie toevoegt aan de OLAP-kubus met een CubeExtension of als definitie in het element SystemCenterCube.
Als u echter een MDX-expressie met een fout toevoegt aan een management pack met een CubeExtension, kunt u de kubusextensie verwijderen om wijzigingen aan de OLAP-kubus ongedaan te maken. Als u de expressies definieert in het element SystemCenterCube, moet u het management pack verwijderen en vervolgens de OLAP-kubus handmatig verwijderen uit SSAS voordat u wijzigingen kunt aanbrengen en het management pack met de OLAP-kubus opnieuw kunt implementeren. U kunt kubusaanpassingen dus het beste definiëren met het element CubeExtension.
Fouten bij de implementatie van management packs met OLAP-kubussen
U wilt misschien de maateenheidgroep WorkItems Assigned To User bekijken en alle gebruikers in een bepaalde afdeling eruit lichten. Als u probeert te filteren op UserDim, gebeurt er niets of worden er geen gegevens geretourneerd. Dit kan verwarring veroorzaken, omdat UserDim een relatie met de maateenheidgroep heeft.
In dit geval moet u bedenken dat een databasedimensie meerdere rollen kan hebben in het multidimensionale model. Deze dimensies worden rollenspeldimensies genoemd. De tijddimensie kan bijvoorbeeld meerdere keren worden gebruikt in een OLAP-kubus waarmee vluchtgegevens worden beschreven. Hierbij kunnen Departure Time en Arrival Time de rollenspeldimensies zijn, die beide zijn gericht op de dimensie Time.
In het voorbeeld van WorkItems Assigned To User krijgt de gebruikersdimensie zelfs de rollenspelnaam AssignedToUser. Als een gebruiker filtert op deze dimensie in plaats van UserDim, worden de juiste gegevens geretourneerd.
BIDS heeft een handige functie in de vorm van het tabblad Dimensiegebruik waarop de relatie tussen dimensies en OLAP-kubussen wordt aangegeven. Hiermee kunt u bepalen welke dimensies u kunt gebruiken om de OLAP-kubusgegevens te rangschikken. In het voorbeeld van WorkItems Assigned To User heeft UserDim geen relatie met de maateenheidgroep WorkItemAssignedToUser, terwijl UserDim(AssignedToUser) wel een relatie met de maateenheidgroep heeft waarvoor het samenvoegingskenmerk UserDimKey wordt gebruikt. In dit geval wordt de rollenspelnaam gemarkeerd tussen de haakjes op het tabblad Dimensiegebruik.
Service Manager heeft voorziening die vergelijkbaar is met het tabblad Dimensiegebruik. U moet dus naar BIDS kijken om precies te bepalen met welke dimensies u een bepaalde kubus kunt filteren.
OLAP-kubussen worden niet verwerkt op een externe SSAS-Server
In sommige situaties wordt een OLAP-kubus niet verwerkt op een externe SSAS-server, omdat de firewall niet op de juiste manier is geconfigureerd. De standaardinstantie van SSAS gebruikt TCP/IP-poort 2383 en deze poort moet toegankelijk zijn in de firewall om toegang toe te staan. U kunt de poort toegankelijk maken door de volgende opdrachtregelinstructies uit te voeren:
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
Verwerking van de OLAP-kubus stopt
Er kunnen verschillende redenen zijn waarom de verwerking van een OLAP-kubus stopt. U moet eerst controleren of de server genoeg RAM heeft, met name als het datawarehouse en de SSAS-server op dezelfde server worden gehost. Er moet voldoende geheugen zijn om ETL-taken (Extraction, Transformation, and Loading) en kubusverwerkingstaken gelijktijdig uit te voeren. Hieronder vindt u een aantal mogelijke oplossingen:
Er zijn bekende impasseproblemen in Microsoft SQL Server 2008 Analysis Services. Als tijdelijke oplossing kunt u het aantal threads in de thread-pool voor de verwerkingen vergroten voordat de verwerking stopt. Als het systeem al is gestopt, kunt u zowel de System Center Management-service als de Analysis Services-service opnieuw starten en het werkitem voor kubusverwerking instellen op status 3 (niet gestart), zodat de werkstroomengine van Service Manager het werkitem opnieuw kan starten.
Notitie
Voor System Center 2012 R2 Service Manager is de System Center-beheerservice gewijzigd in Microsoft Monitoring Agent.U kunt de volgende query's uitvoeren op de DWStagingAndConfig-database om te bepalen wat het werkitem voor de kubusverwerking is. Deze query's worden afzonderlijk weergegeven, maar u kunt ze gemakkelijk samenvoegen tot één query:
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)
Controleer of de eigenschap CoordinatorExecutionMode van de SSAS-service juist is ingesteld. Raadpleeg de forums van SQL Server voor meer informatie over dit probleem.
De taak DWMaintenance stopt bij de stap ManageCubePartitions/ManageCubeTranslations
Dit probleem wordt meestal veroorzaakt door een SSAS-server die niet reageert. De tijdelijke oplossing is hetzelfde als in de eerste stap van de vorige sectie, “Verwerking van de OLAP-kubus stopt”. U kunt de volgende query's uitvoeren op de DWStagingAndConfig-database om te bepalen wat het werkitem voor de kubusverwerking is. Deze query's worden afzonderlijk weergegeven, maar u kunt ze gemakkelijk samenvoegen tot één query:
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)
Zie ook