I've created an ETL that has grown to populate about 250 tables (Staging Tables, Dimension Tables and Fact Tables).
I got the ETL design pattern from Stacia Meisner, her ETL design pattern was based upon creating a template package for loading a staging table, loading a dimension table and then for loading a fact table. The idea is to use variables that you set in a specific package which then call the appropriate stored procedures, create lineage and auditing data, populate the correct tables etc using expressions, so that you just copy and paste the template package in your solution, edit the variable and as long as you have the stored procedures in place to source the data and the correct table names, everything works perfectly.
That is... up until I reached 250 tables. When I run the ETL in BIDS, it consumes RAM like crazy. When I deploy the ETL and execute it in SQL, it doesn't. One ETL Run on my laptop is probably going to consume about 3 to 4 gigabytes of RAM as it opens every child package of mine from a parent package. There are now 250 packages in my solution.
I can up the RAM in my laptop, (currently sitting at 8GB or RAM), but there are definitely warning alarms sounding in my head making me think that perhaps 250 data flow tasks would have been a better choice.
Understanding the flaw in this design pattern now, I suppose then my questions are as follows
- Was BIDS ever meant to have so many packages executing within an ETL?
- Is there any way I can reduce the consumption of RAM when I run the ETL within the IDE?
- Is the consumption of RAM to be expected, and if so how do developers normally deal with it. I could easily get around it by never running the entire ETL within my IDE, but test it in it's parts and then deploy it in it's entirety
- Should I step away from the 1 package per table design pattern and implement data flow tasks in 3 packages (1 for loading the staging tables, 1 for loading the dimensions and 1 for loading my fact tables)
Thanks for your time, I'd appreciate input you have.
Regards,
Jesse