我在 OLTP 数据库中有一个巨大的表,每天大约有 2000 万个新行。 我想从该表导入数据并尽可能接近实时。 我想在表上创建一些逻辑分区,并使用 SSIS 包中的多个 DFT 导入它们。我认为这些 DFT 应该并行运行,以便我可以使用尽可能多的资源。 我尝试在网上查找文章或类似的案例研究,但找不到。 也许我错过了,最糟糕的是我走错了方向,并且没有人使用此解决方案在这种情况下导入数据。 你会怎么办?如果您认为我的解决方案不错,我应该如何创建分区?在 key 上?日期?
最佳答案
我认为您应该考虑在 SSIS 和 DB Engine 之间共享处理。因此,仅使用 SSIS 进行 ETL 过程,在 SQL Server 上创建多个表,并且仅重定向数据包中的数据。对于其余部分,即组合所有表中的数据并创建分区,您可以利用 SQL Server 的强大功能。在某些情况下,SSIS确实是资源密集型的,但通过数据库引擎用更少的资源也可以实现相同的目标(如果可能的话)。
有时它还取决于您使用的源/目标组件。 This这篇文章非常好,作者通过在不同类型的源和目的地上设置一些基准来进行一些测试。
以下是一些资源,您可以快速查看以获取想法。
- MSDN - We Loaded 1TB in 30 Minutes with SSIS, and So Can You
- Speeding Up SSIS Bulk Inserts into SQL Server
- Speeding up Reading from a SQL OLE DB or ADO.Net Data Source
- Reading as fast as possible from a table with SSIS
- Top 10 Methods to Improve ETL Performance
- MSDN - Data Flow Performance Features
- 8 Ways to Optimize and Improve Performance of your SSIS Package
- The SSIS tuning tip that everyone misses
- SSIS – Non-blocking, Semi-blocking and Fully-blocking components
- SSIS blocking, non blocking, and partially blocking transformations
- FASTEST DATA FLOW TASK ITEM FOR TRANSFERRING DATA
关于sql-server - 通过SSIS分区导入海量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24502753/