【发布时间】:2009-10-22 12:31:26
【问题描述】:
我正在研究用于数据仓库的 SSIS 解决方案,用于提取相应应用程序键的代理键,我正在使用 SSIS 的查找任务,但此任务的问题是它将完整的查找表缓存在其内存中。而且我的查找表大小很大,即 2000 万条记录。因此,如果您可以建议一些查找任务的方法或替代方法
【问题讨论】:
标签: sql-server-2005 ssis etl
我正在研究用于数据仓库的 SSIS 解决方案,用于提取相应应用程序键的代理键,我正在使用 SSIS 的查找任务,但此任务的问题是它将完整的查找表缓存在其内存中。而且我的查找表大小很大,即 2000 万条记录。因此,如果您可以建议一些查找任务的方法或替代方法
【问题讨论】:
标签: sql-server-2005 ssis etl
我不认为包含 2000 万条记录的表太大而无法查找。您可以进行一些过滤,并通过在查找中仅选择所需的列来优化它以使用少量内存。
例如,如果您有一个 int 类型的键列和一个大小为 10 的 varchar 列进行查找,则一条记录将占用 4+10bytes 和 2000 万到 20Mx(4+10) ~= 280MB,这是不能考虑的太高了。
如果你想减少内存使用,你将不得不使用连接。
【讨论】:
当您将数据引入 SSIS 包时,对您的查找数据执行 LEFT JOIN,然后评估您需要做的事情。
如果查找表位于不同的源中,那么您可以在 SSIS 中执行 LEFT JOIN,但这也会缓存行。我认为 JOIN 可能比 Lookup 快一点。
【讨论】:
您必须扫描整个表吗? IE。您可以将查找指定为表上的数据库视图,甚至可以将其指定为 SQL 查询的结果(使用 SQL 查询的结果选项)
【讨论】:
确保在查找表中只选择需要的列,不要缓存不需要的列。花点时间看看 MS "Project "Real" 在大数据量应用程序中使用 SSIS 并讨论最佳实践。
【讨论】: