sql >> Database >  >> RDS >> Database

Top 10 methoden om ETL-prestaties te verbeteren met behulp van SSIS

Extraction Transformation Load (ETL) is de ruggengraat van elk datawarehouse. In de datawarehouse-wereld worden gegevens beheerd door het ETL-proces, dat uit drie processen bestaat:Extraction-Pull/Acquire-gegevens uit bronnen, Transformation-change-gegevens in het vereiste formaat en Load-push-gegevens naar de bestemming in het algemeen in een datawarehouse of een datamart.

Leer SSIS en start vandaag nog uw gratis proefperiode!

SQL Server Integration Services (SSIS) is de tool in de ETL-familie die handig is voor het ontwikkelen en beheren van een enterprise datawarehouse. Een datawarehouse werkt door zijn eigen karakterisering op een enorme hoeveelheid gegevens en prestaties zijn een grote uitdaging bij het beheren van een enorme hoeveelheid gegevens voor elke architect of DBA.

Overwegingen voor ETL-verbetering

Vandaag bespreek ik hoe gemakkelijk u de ETL-prestaties kunt verbeteren of een goed presterend ETL-systeem kunt ontwerpen met behulp van SSIS. Voor een beter begrip zal ik tien methoden in twee verschillende categorieën verdelen; ten eerste, overwegingen met betrekking tot de ontwerptijd van het SSIS-pakket en ten tweede het configureren van verschillende eigenschapswaarden van componenten die beschikbaar zijn in het SSIS-pakket.

Overwegingen bij het ontwerpen van een SSIS-pakket

#1 Gegevens parallel extraheren:SSIS biedt de manier om gegevens parallel te trekken met behulp van Sequence-containers in control flow. U kunt een pakket zo ontwerpen dat het parallel gegevens uit niet-afhankelijke tabellen of bestanden kan halen, wat de algehele ETL-uitvoeringstijd zal helpen verkorten.

#2 Vereiste gegevens extraheren:haal alleen de vereiste gegevensset uit een tabel of bestand. Je moet de neiging vermijden om alles wat beschikbaar is op de bron te trekken voor nu dat je in de toekomst zult gebruiken; het vreet netwerkbandbreedte op, verbruikt systeembronnen (I/O en CPU), vereist extra opslagruimte en het verslechtert de algehele prestaties van het ETL-systeem.

Als uw ETL-systeem echt dynamisch van aard is en uw vereisten vaak veranderen, is het beter om andere ontwerpbenaderingen te overwegen, zoals metadata-gestuurde ETL, enz. in plaats van een ontwerp om alles in één keer in te voeren.

#3 Vermijd het gebruik van asynchrone transformatiecomponenten:SSIS is een rijke tool met een set transformatiecomponenten om complexe taken uit te voeren tijdens ETL-uitvoering, maar tegelijkertijd kost het u veel als deze componenten niet correct worden gebruikt.

Er zijn twee categorieën transformatiecomponenten beschikbaar in SSIS:Synchroon en Asynchroon .

Synchrone transformaties zijn die componenten die elke rij verwerken en naar de volgende component/bestemming duwen, het gebruikt toegewezen buffergeheugen en vereist geen extra geheugen omdat het een directe relatie is tussen invoer/uitvoergegevensrij die volledig in het toegewezen geheugen past. Componenten zoals opzoeken, afgeleide kolommen en gegevensconversie enz. vallen in deze categorie.

Asynchrone transformaties zijn die componenten die eerst gegevens opslaan in het buffergeheugen en vervolgens bewerkingen zoals sorteren en aggregeren verwerken. Er is extra buffergeheugen nodig om de taak te voltooien en totdat het buffergeheugen beschikbaar is, worden alle gegevens in het geheugen bewaard en wordt de transactie geblokkeerd, ook wel blokkeertransformatie genoemd. Om de taak te voltooien, zal de SSIS-engine (dataflow-pipeline-engine) extra buffergeheugen toewijzen, wat opnieuw een overhead is voor het ETL-systeem. Componenten zoals Sorteren, Samenvoegen, Samenvoegen, Samenvoegen, etc. vallen in deze categorie.

Over het algemeen moet u asynchrone transformaties vermijden, maar toch, als u in een situatie komt waarin u geen andere keuze hebt, moet u weten hoe u omgaat met de beschikbare eigenschapswaarden van deze componenten. Ik zal ze later in dit artikel bespreken.

#4 Optimaal gebruik van event in event handlers:om de voortgang van de pakketuitvoering te volgen of een andere passende actie te ondernemen op een specifieke event, biedt SSIS een set events. Evenementen zijn erg handig, maar overmatig gebruik van evenementen kost extra overhead bij de uitvoering van ETL.

Hier moet je alle eigenschappen valideren voordat je een gebeurtenis in het SSIS-pakket inschakelt.

#5 Je moet op de hoogte zijn van het doeltabelschema wanneer je aan een enorme hoeveelheid gegevens werkt. U moet twee keer nadenken wanneer u een enorme hoeveelheid gegevens uit de bron moet halen en naar een datawarehouse of datamart moet pushen. U kunt prestatieproblemen tegenkomen wanneer u enorme gegevens naar de bestemming probeert te pushen met een combinatie van invoeg-, update- en verwijderbewerkingen (DML), omdat de kans bestaat dat de doeltabel geclusterde of niet-geclusterde indexen heeft, wat kan leiden tot veel gegevens die in het geheugen worden verplaatst vanwege DML-bewerkingen.

Als ETL prestatieproblemen heeft vanwege een groot aantal DML-bewerkingen op een tabel met een index, moet u de nodige wijzigingen aanbrengen in het ETL-ontwerp, zoals het verwijderen van bestaande geclusterde indexen in de pre-uitvoeringsfase en alle indexen opnieuw maken in de fase na de uitvoering. Mogelijk vindt u andere, betere alternatieven om het probleem op te lossen op basis van uw situatie.

Eigenschappen voor componenten configureren

#6 Beheer parallelle uitvoering van een taak door de MaxConcurrentExecutables . te configureren en EngineThreads eigendom. SSIS-pakket- en gegevensstroomtaken hebben een eigenschap om parallelle uitvoering van een taak te besturen:MaxConcurrentExecutables is de eigenschap op pakketniveau en heeft een standaardwaarde van -1 , wat betekent dat het maximale aantal taken dat kan worden uitgevoerd gelijk is aan het totale aantal processors op de machine plus twee;


Pakket

EngineThreads is een eigenschap op gegevensstroomtaakniveau en heeft een standaardwaarde van 10, waarmee het totale aantal threads wordt gespecificeerd dat kan worden gemaakt voor het uitvoeren van de gegevensstroomtaak.


Gegevensstroomtaak

U kunt de standaardwaarden van deze eigenschappen wijzigen volgens de ETL-behoeften en de beschikbaarheid van bronnen.

#7 Configureer de optie Gegevenstoegangsmodus in OLEDB-bestemming. In de SSIS-gegevensstroomtaak kunnen we de OLEDB-bestemming vinden, die een aantal opties biedt om gegevens naar de bestemmingstabel te duwen, onder de gegevenstoegangsmodus; eerst de optie "Tabel of weergave", die één rij tegelijk invoegt; ten tweede de optie "Table or view fast load", die intern de bulk insert-instructie gebruikt om gegevens naar de doeltabel te verzenden, wat altijd betere prestaties biedt in vergelijking met andere opties. Zodra u de optie "snel laden" kiest, krijgt u meer controle over het gedrag van de bestemmingstabel tijdens een data push-bewerking, zoals Identiteit behouden, Nulls behouden, Tabelvergrendeling en Beperkingen controleren.


OLE DB-bestemmingseditor

Het wordt ten zeerste aanbevolen om de optie voor snel laden te gebruiken om gegevens naar de bestemmingstabel te pushen om de ETL-prestaties te verbeteren.

#8, Configureer rijen per batch en maximale invoeggrootte in OLEDB-bestemming. Deze twee instellingen zijn belangrijk om de prestaties van tempdb en transactielogboek te regelen, omdat het met de gegeven standaardwaarden van deze eigenschappen gegevens naar de bestemmingstabel zal pushen onder één batch en één transactie. Het vereist overmatig gebruik van tembdb en transactielogboek, wat een ETL-prestatieprobleem wordt vanwege overmatig gebruik van geheugen en schijfopslag.


OLE DB-bestemmingseditor

Om de ETL-prestaties te verbeteren, kunt u een positief geheel getal in beide eigenschappen plaatsen op basis van het verwachte gegevensvolume, wat zal helpen om een ​​hele reeks gegevens in meerdere batches te verdelen, en gegevens in een batch kunnen opnieuw worden vastgelegd in de bestemmingstabel, afhankelijk van de opgegeven waarde. Het voorkomt overmatig gebruik van tempdb en transactielogboek, wat de ETL-prestaties zal helpen verbeteren.

#9 Gebruik van SQL Server Destination in een gegevensstroomtaak. Wanneer u gegevens naar een lokale SQL Server-database wilt pushen, wordt het ten zeerste aanbevolen om SQL Server Destination te gebruiken, omdat dit veel voordelen biedt om de beperkingen van andere opties te overwinnen, wat u helpt de ETL-prestaties te verbeteren. Het gebruikt bijvoorbeeld de functie voor bulksgewijs invoegen die in SQL Server is ingebouwd, maar het geeft u de mogelijkheid om transformatie toe te passen voordat gegevens in de doeltabel worden geladen. Afgezien daarvan geeft het je de mogelijkheid om de trigger in of uit te schakelen die moet worden geactiveerd bij het laden van gegevens, wat ook helpt om de ETL-overhead te verminderen.


SQL Server-doelgegevensstroomcomponent

# 10 Vermijd impliciete typecast. Wanneer gegevens uit een plat bestand komen, behandelt de verbindingsbeheerder voor platte bestanden alle kolommen als een gegevenstype string (DS_STR), inclusief numerieke kolommen. Zoals u weet, gebruikt SSIS buffergeheugen om de hele set gegevens op te slaan en past het de vereiste transformatie toe voordat gegevens naar de doeltabel worden gepusht. Als alle kolommen nu string-gegevenstypen zijn, is er meer ruimte in de buffer nodig, waardoor de ETL-prestaties afnemen.

Om de ETL-prestaties te verbeteren, moet u alle numerieke kolommen converteren naar het juiste gegevenstype en impliciete conversie vermijden, waardoor de SSIS-engine meer rijen in een enkele buffer kan opnemen.

Samenvatting van ETL-prestatieverbeteringen

In dit artikel hebben we onderzocht hoe gemakkelijk ETL-prestaties op elk moment kunnen worden gecontroleerd. Dit zijn 10 veelvoorkomende manieren om de ETL-prestaties te verbeteren. Er kunnen meer methoden zijn op basis van verschillende scenario's waarmee de prestaties kunnen worden verbeterd.

Over het algemeen kun je met behulp van categorisatie bepalen hoe je met de situatie om moet gaan. Als u zich in de ontwerpfase van een datawarehouse bevindt, moet u zich wellicht concentreren op beide categorieën, maar als u een legacy-systeem ondersteunt, werk dan eerst nauw aan de tweede categorie.


  1. Hoe MySQL-verbindingen (max_connections) vergroten?

  2. Dynamisch doorgeven van kolomnamen voor een recordvariabele in PostgreSQL

  3. PDOException SQLSTATE [HY000] [2002] Geen dergelijk bestand of map

  4. T-SQL trim   (en andere niet-alfanumerieke tekens)