Extraction Transformation Load (ETL) är ryggraden för alla datalager. I datalagervärlden hanteras data av ETL-processen, som består av tre processer, Extraction-Pull/Acquire data från källor, Transformation-change data i det format som krävs och Load-push data till destinationen i allmänhet till ett datalager eller en datamarknad.
Lär dig SSIS och starta din gratis provperiod idag!
SQL Server Integration Services (SSIS) är verktyget i ETL-familjen som är användbart för att utveckla och hantera ett företagsdatalager. Ett datalager genom sin egen karaktärisering arbetar på en enorm mängd data och prestanda är en stor utmaning när man hanterar en enorm mängd data för vilken arkitekt eller DBA som helst.
Överväganden om ETL-förbättring
Idag kommer jag att diskutera hur enkelt du kan förbättra ETL-prestandan eller designa ett högpresterande ETL-system med hjälp av SSIS. För en bättre förståelse kommer jag att dela upp tio metoder i två olika kategorier; För det första, SSIS-paketdesigntidsöverväganden och för det andra konfigurering av olika egenskapsvärden för komponenter som är tillgängliga i SSIS-paketet.
SSIS-paketdesign-tidsöverväganden
#1 Extrahera data parallellt:SSIS tillhandahåller sättet att dra data parallellt med hjälp av sekvensbehållare i kontrollflödet. Du kan designa ett paket på ett sådant sätt att det kan hämta data från icke-beroende tabeller eller filer parallellt, vilket kommer att bidra till att minska den totala ETL-exekveringstiden.
#2 Extrahera nödvändig data:dra bara den nödvändiga uppsättningen data från någon tabell eller fil. Du måste undvika tendensen att dra allt tillgängligt på källan för nu som du kommer att använda i framtiden; det äter upp nätverkets bandbredd, förbrukar systemresurser (I/O och CPU), kräver extra lagring och det försämrar ETL-systemets övergripande prestanda.
Om ditt ETL-system är verkligen dynamiskt till sin natur och dina krav ofta ändras, skulle det vara bättre att överväga andra designmetoder, som Meta Data-driven ETL, etc. snarare än design för att dra in allt på en gång.
#3 Undvik användningen av asynkrona transformationskomponenter:SSIS är ett rikt verktyg med en uppsättning transformationskomponenter för att uppnå komplexa uppgifter under ETL-körning men samtidigt kostar det dig mycket om dessa komponenter inte används på rätt sätt.
Två kategorier av transformationskomponenter är tillgängliga i SSIS:Synchronous och Asynkron .
Synkrona transformationer är de komponenter som bearbetar varje rad och trycker ner till nästa komponent/destination, den använder tilldelat buffertminne och kräver inget extra minne eftersom det är en direkt relation mellan in-/utdatarad som passar helt in i det allokerade minnet. Komponenter som Lookup, Derived Columns och Data Conversion etc. tillhör denna kategori.
Asynkrona transformationer är de komponenter som först lagrar data i buffertminnet och sedan bearbetar operationer som Sortering och Aggregate. Ytterligare buffertminne krävs för att slutföra uppgiften och tills buffertminnet är tillgängligt håller det upp hela data i minnet och blockerar transaktionen, även känd som blockerande transformation. För att slutföra uppgiften kommer SSIS-motorn (dataflödespipeline-motor) att allokera extra buffertminne, vilket återigen är en overhead till ETL-systemet. Komponenter som Sortera, Aggregera, Sammanfoga, Gå med, etc. faller i denna kategori.
Sammantaget bör du undvika asynkrona transformationer men ändå, om du hamnar i en situation där du inte har något annat val måste du vara medveten om hur du hanterar de tillgängliga egenskapsvärdena för dessa komponenter. Jag kommer att diskutera dem senare i den här artikeln.
#4 Optimal användning av händelse i händelsehanterare:för att spåra paketexekveringsförlopp eller vidta andra lämpliga åtgärder på en specifik händelse, tillhandahåller SSIS en uppsättning händelser. Händelser är mycket användbara men överdriven användning av händelser kommer att kosta extra omkostnader vid ETL-exekvering.
Här måste du validera alla egenskaper innan du aktiverar en händelse i SSIS-paketet.
#5 Behöver vara medveten om måltabellsschemat när du arbetar med en enorm mängd data. Du måste tänka två gånger när du behöver hämta en enorm mängd data från källan och skjuta in den i ett datalager eller datamart. Du kan se prestandaproblem när du försöker skjuta in enorma data till destinationen med en kombination av infogning, uppdatering och borttagning (DML), eftersom det kan finnas en chans att destinationstabellen kommer att ha klustrade eller icke-klustrade index, vilket kan orsaka mycket data blandas i minnet på grund av DML-operationer.
Om ETL har prestandaproblem på grund av en enorm mängd DML-operationer på en tabell som har ett index, måste du göra lämpliga ändringar i ETL-designen, som att ta bort befintliga klustrade index i förexekveringsfasen och återskapa alla index i efterexekveringsfasen. Du kanske hittar andra bättre alternativ för att lösa problemet baserat på din situation.
Konfigurera komponenters egenskaper
#6 Styr parallellkörning av en uppgift genom att konfigurera MaxConcurrentExecutables och EngineThreads fast egendom. SSIS-paket och dataflödesuppgifter har en egenskap för att kontrollera parallell exekvering av en uppgift:MaxConcurrentExecutables är paketnivåegenskapen och har ett standardvärde på -1 , vilket innebär att det maximala antalet uppgifter som kan utföras är lika med det totala antalet processorer på maskinen plus två;
Paket
EngineThreads är en dataflödesaktivitetsnivåegenskap och har ett standardvärde på 10, vilket anger det totala antalet trådar som kan skapas för att utföra dataflödesuppgiften.
Dataflödesuppgift
Du kan ändra standardvärdena för dessa egenskaper i enlighet med ETL-behov och tillgång på resurser.
#7 Konfigurera alternativ för dataåtkomstläge i OLEDB-destination. I SSIS-dataflödesuppgiften kan vi hitta OLEDB-destinationen, som ger ett par alternativ för att skjuta in data till destinationstabellen, under dataåtkomstläget; först alternativet "Tabell eller vy", som infogar en rad i taget; för det andra alternativet "Tabell or view fast load", som internt använder bulk insert-satsen för att skicka data till destinationstabellen, vilket alltid ger bättre prestanda jämfört med andra alternativ. När du väl väljer alternativet "snabbladdning" ger det dig mer kontroll över att hantera destinationstabellens beteende under en data-push-operation, som Behåll identitet, Behåll null, Tabelllås och Kontrollera begränsningar.
OLE DB Destination Editor
Det rekommenderas starkt att du använder snabbladdningsalternativet för att skicka data till destinationstabellen för att förbättra ETL-prestandan.
#8, Konfigurera rader per batch och maximal infogningsstorlek i OLEDB-destination. Dessa två inställningar är viktiga för att kontrollera prestandan för tempdb och transaktionslogg eftersom de med de givna standardvärdena för dessa egenskaper kommer att skicka data till destinationstabellen under en batch och en transaktion. Det kommer att kräva överdriven användning av tembdb och transaktionslogg, vilket förvandlas till ett ETL-prestandaproblem på grund av överdriven förbrukning av minne och disklagring.
OLE DB Destination Editor
För att förbättra ETL-prestandan kan du sätta ett positivt heltalsvärde i båda egenskaperna baserat på förväntad datavolym, vilket kommer att hjälpa till att dela upp en hel massa data i flera batcher, och data i en batch kan återigen läggas in i destinationstabellen beroende på angivet värde. Det kommer att undvika överdriven användning av tempdb och transaktionslogg, vilket kommer att bidra till att förbättra ETL-prestandan.
#9 Användning av SQL Server Destination i en dataflödesuppgift. När du vill överföra data till en lokal SQL Server-databas, rekommenderas det starkt att använda SQL Server Destination, eftersom det ger många fördelar för att övervinna andra alternativs begränsningar, vilket hjälper dig att förbättra ETL-prestandan. Till exempel använder den funktionen för bulkinfogning som är inbyggd i SQL Server, men den ger dig möjlighet att tillämpa transformation innan data laddas in i måltabellen. Bortsett från det ger det dig möjlighet att aktivera/inaktivera triggern som ska aktiveras när data laddas, vilket också hjälper till att minska ETL-overhead.
SQL-serverns destinationsdataflödeskomponent
#10 Undvik implicit typcast. När data kommer från en platt fil, behandlar anslutningshanteraren för platt fil alla kolumner som en sträng (DS_STR) datatyp, inklusive numeriska kolumner. Som du vet använder SSIS buffertminne för att lagra hela datauppsättningen och tillämpar den nödvändiga transformationen innan data skjuts in i destinationstabellen. Nu, när alla kolumner är strängdatatyper, kommer det att kräva mer utrymme i bufferten, vilket kommer att minska ETL-prestandan.
För att förbättra ETL-prestandan bör du konvertera alla numeriska kolumner till lämplig datatyp och undvika implicit konvertering, vilket kommer att hjälpa SSIS-motorn att rymma fler rader i en enda buffert.
Sammanfattning av ETL-prestandaförbättringar
I den här artikeln undersökte vi hur enkelt ETL-prestanda kan kontrolleras när som helst. Det här är 10 vanliga sätt att förbättra ETL-prestandan. Det kan finnas fler metoder baserade på olika scenarier genom vilka prestandan kan förbättras.
Sammantaget kan du med hjälp av kategorisering identifiera hur du ska hantera situationen. Om du befinner dig i designfasen av ett datalager kan du behöva koncentrera dig på båda kategorierna, men om du stöder något äldre system, arbeta först noga med den andra kategorin.