Delen via


Prestatiefuncties voor gegevensstromen

van toepassing op:SQL Server SSIS Integration Runtime in Azure Data Factory

Dit onderwerp bevat suggesties voor het ontwerpen van Integration Services-pakketten om veelvoorkomende prestatieproblemen te voorkomen. Dit onderwerp bevat ook informatie over functies en hulpprogramma's die u kunt gebruiken om problemen met de prestaties van pakketten op te lossen.

De gegevensstroom configureren

Als u de gegevensstroomtaak wilt configureren voor betere prestaties, kunt u de eigenschappen van de taak configureren, de buffergrootte aanpassen en het pakket configureren voor parallelle uitvoering.

De eigenschappen van de gegevensstroomtaak configureren

Notitie

De eigenschappen die in deze sectie worden besproken, moeten afzonderlijk worden ingesteld voor elke gegevensstroomtaak in een pakket.

U kunt de volgende eigenschappen van de gegevensstroomtaak configureren, die allemaal van invloed zijn op de prestaties:

  • Geef de locaties op voor tijdelijke opslag van buffergegevens (eigenschap BufferTempStoragePath) en kolommen die binaire grote objectgegevens (BLOB) bevatten (blobTempStoragePath). Deze eigenschappen bevatten standaard de waarden van de omgevingsvariabelen TEMP en TMP. Mogelijk wilt u andere mappen opgeven om de tijdelijke bestanden op een andere of snellere harde schijf te plaatsen of om ze over meerdere stations te verdelen. U kunt meerdere mappen opgeven door de mapnamen te scheiden met puntkomma's.

  • Definieer de standaardgrootte van de buffer die door de taak wordt gebruikt, door de eigenschap DefaultBufferSize in te stellen en het maximum aantal rijen in elke buffer te definiëren door de eigenschap DefaultBufferMaxRows in te stellen. Stel de eigenschap AutoAdjustBufferSize in om aan te geven of de standaardgrootte van de buffer automatisch wordt berekend op basis van de waarde van de eigenschap DefaultBufferMaxRows. De standaardbuffergrootte is 10 megabytes, met een maximale buffergrootte van 2^31-1 bytes. Het standaard maximum aantal rijen is 10.000.

  • Stel het aantal threads in dat de taak tijdens de uitvoering kan gebruiken door de eigenschap EngineThreads in te stellen. Deze eigenschap biedt een suggestie voor de gegevensstroomengine over het aantal threads dat moet worden gebruikt. De standaardwaarde is 10, met een minimumwaarde van 3. De engine zal toch niet meer threads gebruiken dan nodig is, ongeacht de waarde van deze eigenschap. De engine kan ook meer threads gebruiken dan is opgegeven in deze eigenschap, indien nodig om gelijktijdigheidsproblemen te voorkomen.

  • Geef aan of de gegevensstroomtaak wordt uitgevoerd in de geoptimaliseerde modus (eigenschap RunInOptimizedMode). De geoptimaliseerde modus verbetert de prestaties door ongebruikte kolommen, uitvoer en onderdelen uit de gegevensstroom te verwijderen.

    Notitie

    Een eigenschap met dezelfde naam, RunInOptimizedMode, kan worden ingesteld op projectniveau in SQL Server Data Tools (SSDT) om aan te geven dat de gegevensstroomtaak wordt uitgevoerd in de geoptimaliseerde modus tijdens foutopsporing. Deze projecteigenschap overschrijft tijdens het ontwerp de eigenschap RunInOptimizedMode van gegevensstroomtaken.

De grootte van buffers aanpassen

De gegevensstroomengine begint met het aanpassen van de grootte van de buffers door de geschatte grootte van één rij gegevens te berekenen. Vervolgens wordt de geschatte grootte van een rij vermenigvuldigd met de waarde van DefaultBufferMaxRows om een voorlopige werkwaarde voor de buffergrootte te verkrijgen.

  • Als AutoAdjustBufferSize is ingesteld op true, gebruikt de enginegegevensstroomengine de berekende waarde als buffergrootte en wordt de waarde van DefaultBufferSize genegeerd.

  • Als AutoAdjustBufferSize is ingesteld op false, gebruikt de gegevensstroomengine de volgende regels om de buffergrootte te bepalen.

    • Als het resultaat groter is dan de waarde van DefaultBufferSize, vermindert de engine het aantal rijen.

    • Als het resultaat kleiner is dan de intern berekende minimale buffergrootte, verhoogt de engine het aantal rijen.

    • Als het resultaat tussen de minimale buffergrootte en de waarde van DefaultBufferSize valt, past de engine de buffergrootte zo nauwkeurig mogelijk aan op de geschatte rijgrootte vermenigvuldigd met de waarde van DefaultBufferMaxRows.

Wanneer u de prestaties van uw gegevensstroomtaken gaat testen, gebruikt u de standaardwaarden voor DefaultBufferSize en DefaultBufferMaxRows. Schakel logboekregistratie in voor de gegevensstroomtaak en selecteer de gebeurtenis BufferSizeTuning om te zien hoeveel rijen er in elke buffer zijn opgenomen.

Voordat u begint met het aanpassen van de grootte van de buffers, is de belangrijkste verbetering die u kunt aanbrengen de grootte van elke rij met gegevens te verkleinen door overbodige kolommen te verwijderen en door gegevenstypen op de juiste manier te configureren.

Als u het optimale aantal buffers en hun grootte wilt bepalen, experimenteert u met de waarden van DefaultBufferSize en DefaultBufferMaxRows tijdens het bewaken van de prestaties en de informatie die door de BufferSizeTuning-gebeurtenis is gerapporteerd.

Vergroot de buffergrootte niet tot het punt waar paging naar de schijf plaatsvindt. Paging naar schijf belemmert de prestaties meer dan een buffergrootte die niet is geoptimaliseerd. Als u wilt bepalen of paging plaatsvindt, controleert u de prestatie-indicator 'Buffers spooled' in de prestatiemodule van de Microsoft Management Console (MMC).

Het pakket configureren voor parallelle uitvoering

Parallelle uitvoering verbetert de prestaties op computers met meerdere fysieke of logische processors. Integration Services gebruikt twee eigenschappen om parallelle uitvoering van verschillende taken in het pakket te ondersteunen: MaxConcurrentExecutables en EngineThreads.

De eigenschap MaxConcurrentExecutables

De eigenschap MaxConcurrentExecutables is een eigenschap van het pakket zelf. Met deze eigenschap wordt gedefinieerd hoeveel taken tegelijkertijd kunnen worden uitgevoerd. De standaardwaarde is -1. Dit betekent het aantal fysieke of logische processors plus 2.

Als u wilt weten hoe deze eigenschap werkt, kunt u een voorbeeldpakket met drie gegevensstroomtaken overwegen. Als u MaxConcurrentExecutables instelt op 3, kunnen alle drie de gegevensstroomtaken tegelijkertijd worden uitgevoerd. Stel echter dat elke gegevensstroomtaak 10 uitvoeringsstructuren voor bron-naar-bestemming heeft. Het instellen van MaxConcurrentExecutables op 3 zorgt er niet voor dat de uitvoeringsstructuren binnen elke gegevensstroomtaak parallel worden uitgevoerd.

De eigenschap EngineThreads

De eigenschap EngineThreads is een eigenschap van elke gegevensstroomtaak. Met deze eigenschap wordt gedefinieerd hoeveel threads de gegevensstroomengine parallel kan maken en uitvoeren. De eigenschap EngineThreads geldt evenzeer voor de bronthreads die de gegevensstroomengine maakt voor bronnen en de werkrolthreads die door de engine worden gemaakt voor transformaties en bestemmingen. Daarom betekent het instellen van EngineThreads op 10 dat de engine maximaal tien bronthreads en maximaal tien werkthreads kan maken.

Als u wilt weten hoe deze eigenschap werkt, kunt u het voorbeeldpakket overwegen met drie gegevensstroomtaken. Elke gegevensstroomtaak bevat tien bron-naar-bestemming uitvoeringsstructuren. Als u EngineThreads instelt op 10 voor elke gegevensstroomtaak, kunnen alle 30 uitvoeringsstructuren mogelijk tegelijkertijd worden uitgevoerd.

Notitie

Een discussie over threading valt buiten het bereik van dit onderwerp. De algemene regel is echter niet om meer threads parallel uit te voeren dan het aantal beschikbare processors. Het uitvoeren van meer threads dan het aantal beschikbare processors kan de prestaties belemmeren vanwege de frequente contextwisseling tussen threads.

Afzonderlijke gegevensstroomonderdelen configureren

Als u afzonderlijke gegevensstroomonderdelen wilt configureren voor betere prestaties, zijn er enkele algemene richtlijnen die u kunt volgen. Er zijn ook specifieke richtlijnen voor elk type gegevensstroomonderdeel: bron, transformatie en bestemming.

Algemene richtlijnen

Ongeacht het gegevensstroomonderdeel zijn er twee algemene richtlijnen die u moet volgen om de prestaties te verbeteren: query's optimaliseren en onnodige tekenreeksen voorkomen.

Query's optimaliseren

Een aantal onderdelen van een gegevensstroom maken gebruik van query's wanneer ze gegevens uit bronnen extraheren of in opzoekbewerkingen om referentietabellen te maken. De standaardquery maakt gebruik van de syntaxis SELECT * FROM <tableName>. Dit soort query retourneert alle kolommen in de brontabel. Als alle kolommen beschikbaar zijn tijdens het ontwerp, kunt u elke kolom kiezen als opzoek-, passthrough- of bronkolom. Nadat u echter de kolommen hebt geselecteerd die moeten worden gebruikt, moet u de query aanpassen zodat alleen de geselecteerde kolommen worden opgenomen. Als u overbodige kolommen verwijdert, wordt de gegevensstroom in een pakket efficiënter omdat minder kolommen een kleinere rij maken. Een kleinere rij betekent dat er meer rijen in één buffer passen, en hoe minder werk het is om alle rijen in de dataset te verwerken.

Als u een query wilt maken, kunt u de query typen of de opbouwfunctie voor query's gebruiken.

Notitie

Wanneer u een pakket uitvoert in SQL Server Data Tools (SSDT), geeft het tabblad Voortgang van SSIS Designer waarschuwingen weer. Deze waarschuwingen omvatten het identificeren van gegevenskolommen die een bron beschikbaar maakt voor de gegevensstroom, maar die vervolgens niet worden gebruikt door onderdelen van de gegevensstroom stroomafwaarts. U kunt de eigenschap RunInOptimizedMode gebruiken om deze kolommen automatisch te verwijderen.

Onnodig sorteren voorkomen

Sorteren is inherent een trage bewerking en het voorkomen van onnodig sorteren kan de prestaties van de pakketgegevensstroom verbeteren.

Soms zijn de brongegevens al gesorteerd voordat ze worden gebruikt door een downstreamonderdeel. Een dergelijke voorsortering kan optreden wanneer de SELECT-query een ORDER BY-component heeft gebruikt of wanneer de gegevens in de bron in gesorteerde volgorde zijn ingevoegd. Voor dergelijke vooraf gesorteerde brongegevens kunt u een hint geven dat de gegevens worden gesorteerd en zo het gebruik van een sorteertransformatie voorkomen om te voldoen aan de sorteervereisten van bepaalde downstreamtransformaties. (Bijvoorbeeld, voor de transformaties "Merge" en "Merge Join" is gesorteerde invoer vereist.) Om aan te geven dat de gegevens gesorteerd zijn, moet u de volgende taken uitvoeren:

  • Stel de eigenschap IsSorted in op de uitvoer van een upstream-gegevensstroomonderdeel op True.

  • Geef de sorteersleutelkolommen op waarop de gegevens worden gesorteerd.

Zie Gegevens sorteren voor de samenvoegings- en samenvoegingstransformatiesvoor meer informatie.

Als u de gegevens in de gegevensstroom moet sorteren, kunt u de prestaties verbeteren door de gegevensstroom te ontwerpen om zo weinig mogelijk sorteerbewerkingen te gebruiken. De gegevensstroom maakt bijvoorbeeld gebruik van een Multicast-transformatie om de gegevensset te kopiëren. Sorteer de gegevensset eenmaal voordat de Multicast-transformatie wordt uitgevoerd, in plaats van meerdere uitvoer na de transformatie te sorteren.

Zie voor meer informatie Sort Transformation, Merge Transformation, Merge Join Transformationen Multicast Transformation.

Bronnen

OLE DB-bron

Wanneer u een OLE DB-bron gebruikt om gegevens op te halen uit een weergave, selecteert u SQL-opdracht als de modus voor gegevenstoegang en voert u een SELECT-instructie in. Het openen van gegevens met behulp van een SELECT-instructie werkt beter dan het selecteren van 'Tabel of weergave' als de gegevenstoegangsmodus.

Transformaties

Gebruik de suggesties in deze sectie om de prestaties van de transformaties Aggregate, Fuzzy Lookup, Fuzzy Grouping, Lookup, Merge Join en Slowly Changing Dimension te verbeteren.

Samenvoegingstransformatie

De Aggregatietransformatie omvat de Keys, KeysScale, CountDistinctKeysen CountDistinctScale eigenschappen. Deze eigenschappen verbeteren de prestaties door de transformatie in staat te stellen de benodigde hoeveelheid geheugen vooraf toe te wijzen voor het cachen van de gegevens door de transformatie. Als u het exacte of geschatte aantal groepen weet dat naar verwachting het resultaat is van een groeperen op bewerking, stelt u respectievelijk de eigenschappen Sleutels en KeysScale in. Als u het exacte of geschatte aantal afzonderlijke waarden weet dat naar verwachting het resultaat is van een distinct-telling bewerking, stelt u respectievelijk de eigenschappen CountDistinctKeys en CountDistinctScale in.

Als u meerdere aggregaties in een gegevensstroom moet maken, kunt u overwegen om meerdere aggregaties te maken die één aggregatietransformatie gebruiken in plaats van meerdere transformaties te maken. Deze aanpak verbetert de prestaties wanneer één aggregatie een subset van een andere aggregatie is, omdat de transformatie interne opslag kan optimaliseren en binnenkomende gegevens slechts één keer kan scannen. Als een aggregatie bijvoorbeeld gebruikmaakt van een GROUP BY-component en een AVG-aggregatie, kunt u deze combineren tot één transformatie om de prestaties te verbeteren. Als u echter meerdere aggregaties binnen één aggregatietransformatie uitvoert, worden de aggregatiebewerkingen geserialiseerd en worden de prestaties mogelijk niet verbeterd wanneer meerdere aggregaties onafhankelijk moeten worden berekend.

Fuzzy Lookup- en Fuzzy Groeperingstransformaties

Zie het witboek Fuzzy Lookup en Fuzzy Grouping in SQL Server Integration Services 2005voor meer informatie over het optimaliseren van de prestaties van de fuzzy lookup- en fuzzy groeperingstransformaties.

Lookup-transformatie

Minimaliseer de grootte van de referentiegegevens in het geheugen door een SELECT-instructie in te voeren waarmee alleen de kolommen worden opgezoekd die u nodig hebt. Deze optie presteert beter dan het selecteren van een hele tabel of weergave, wat een grote hoeveelheid onnodige gegevens retourneert.

Samenvoegingstransformatie

U hoeft de waarde van de eigenschap MaxBuffersPerInput niet meer te configureren, omdat Microsoft wijzigingen heeft aangebracht die het risico verkleinen dat de samenvoegingstransformatie overmatig geheugen verbruikt. Dit probleem is soms opgetreden wanneer de meerdere invoergegevens van de Merge Join gegevens met ongelijke tarieven hebben geproduceerd.

Langzaam veranderende dimensietransformatie

De Wizard Langzaam Veranderende Dimensie en de transformatie voor langzaam veranderende dimensies zijn algemene hulpmiddelen, die voldoen aan de behoeften van de meeste gebruikers. De gegevensstroom die door de wizard wordt gegenereerd, is echter niet geoptimaliseerd voor prestaties.

Normaal gesproken zijn de langzaamste onderdelen in de langzaam veranderende dimensietransformaties de OLE DB-opdrachttransformaties die UPDATEs uitvoeren op één rij tegelijk. Daarom is de meest effectieve manier om de prestaties van de langzaam veranderende dimensietransformatie te verbeteren door de OLE DB-opdrachttransformaties te vervangen. U kunt deze transformaties vervangen door doelonderdelen waarmee alle rijen worden opgeslagen die moeten worden bijgewerkt naar een faseringstabel. Vervolgens kunt u een Execute SQL-taak toevoegen waarmee één op set gebaseerde Transact-SQL UPDATE wordt uitgevoerd voor alle rijen tegelijk.

Geavanceerde gebruikers kunnen een aangepaste gegevensstroom ontwerpen voor langzaam veranderende dimensieverwerking die is geoptimaliseerd voor grote dimensies. Zie de sectie 'Uniek dimensiescenario' in het witboek Project REAL: Business Intelligence ETL Design Practicesvoor een discussie en voorbeeld van deze benadering.

Bestemmingen

Voor betere prestaties met bestemmingen kunt u overwegen een SQL Server-bestemming te gebruiken en de prestaties van de bestemming te testen.

SQL Server-bestemming

Wanneer een pakket gegevens laadt naar een exemplaar van SQL Server op dezelfde computer, gebruikt u een SQL Server-bestemming. Deze bestemming is geoptimaliseerd voor bulkbelastingen met hoge snelheid.

De prestaties van bestemmingen testen

Het kan zijn dat het opslaan van gegevens naar bestemmingen langer duurt dan verwacht. Als u wilt bepalen of de traagheid wordt veroorzaakt door het onvermogen van de bestemming om gegevens snel te verwerken, kunt u de bestemming tijdelijk vervangen door een transformatie voor het aantal rijen. Als de doorvoer aanzienlijk verbetert, is het waarschijnlijk dat de bestemming die de gegevens laadt de vertraging veroorzaakt.

Bekijk de informatie op het tabblad Voortgang

SSIS Designer biedt informatie over zowel de controlestroom als de gegevensstroom wanneer u een pakket uitvoert in SQL Server Data Tools (SSDT). Het tabblad Voortgang bevat taken en containers in volgorde van uitvoering en bevat begin- en eindtijden, waarschuwingen en foutberichten voor elke taak en container, inclusief het pakket zelf. Het bevat ook gegevensstroomonderdelen in volgorde van uitvoering en bevat informatie over de voortgang, weergegeven als percentage voltooid en het aantal verwerkte rijen.

Als u de weergave van berichten op het tabblad Voortgang wilt in- of uitschakelen, schakelt u de optie Foutopsporingsrapportage voor voortgangsrapportage in of uit in het menu SSIS-. Als u voortgangsrapportage uitschakelt, kunt u de prestaties verbeteren tijdens het uitvoeren van een complex pakket in SQL Server Data Tools.

artikelen en blogberichten

video's

Zie ook

Hulpprogramma's voor probleemoplossing voor pakketontwikkeling
Hulpprogramma's voor probleemoplossing voor pakketuitvoering