2

我没有太多的 ETL 经验,但我也没有找到我的问题的答案,尽管我想如果你已经使用它可能是不费吹灰之力的。我们目前正在研究创建一个简单的数据仓库(就像“从大多数表中复制大多数列”而不是 OLAP 样式一样简单),而且出于几个原因,我们似乎倾向于 SQL Server (2008)。

当涉及到 SQL Server 时,SSIS 似乎是此类任务的工具,但我找不到任何关于它如何影响源数据库缓存的信息,如果有的话,在加载数据时。当涉及到使用风格的缓存时,我们的一些安装在性能方面非常敏感。

但是如果 SSIS 运行“select *”-ish 查询并且缓存被更改,那么用户的性能可能会降低到不可接受的水平,直到它再次从这些查询中重建。

所以我的问题是,从 SQL Server 数据库加载数据时,SSIS(或有没有办法避免)会影响数据库缓存吗?

部分问题还在于源数据库可能是 Oracle 或 SQL Server 数据库,因此如果有办法避免 Oracle 的缓存影响部分,那也是很好的输入。(我猜 Attunity 连接器是要走的路?)

(一些附加信息:我们也考虑过普通文件,但是导出导入可能比 SSIS 传输花费更长的时间?我还猜想更改数据捕获是我们也会研究的内容,所以如果这与这个问题有关,请随意包括可能的问题/好处。)

也欢迎任何其他相关建议!

谢谢!

4

2 回答 2

3

处理 SQL Server 端:

首先,SSIS 没有做任何特别的事情来避免缓冲池或计划缓存。
简单测试(在非生产实例上!):

  1. 使用单个连接管理器和包含一个 OLE DB 源的单个数据流创建一个新的 SSIS 包,指向一个表,类似于: 包裹

  2. 从 SSMS 清除缓冲池:DBCC DROPCLEANBUFFERS

  3. 使用此页面顶部的美化 dm_os_buffer_descriptors 查询验证是否已清除缓存:我明白了: 结果 1

  4. 运行包

  5. 重新运行步骤 (2) 中的查询,并注意表的数据页(在我的示例中为 BOM_PIECE)已加载到缓存中: 结果 2

请注意,大多数 SSIS 组件都允许您提供自己的查询,因此如果您有办法避免使用缓冲池(我不知道这是可能的 - 我会听从对此了解更多的人),您可以将其插入查询。因此,在上面的示例Table or view中,您可以选择SQL command,或者SQL command from variable如果您的命令需要动态文本,而不是在 OLE DB 源中进行选择。

最后,我可以想象您为什么要消除缓存负载 - 但您确定要这样做吗?SQL Server 相当擅长管理内存,而您正在做的是将内存负载换成磁盘 I/O 负载,这(取决于您的用例)可能会对其他用户产生负面影响。 这个问题讨论了 SQL Server 缓存。

于 2012-04-12T14:09:32.080 回答
0

阅读这篇关于 Attunity 的关于从 oracle 读取数据的文章

您是什么意思“从 SQL Server 数据库加载数据时影响数据库缓存”。SQL Server 不缓存数据,它缓存执行计划。您使用 SSIS 的事实不会影响您的服务器(当然除了读取数据的开销)。只需使用适当的事务隔离级别。

另外,阅读有关SSIS 组件的快速加载属性

关于变更数据捕获,我看不出它如何取代 SSIS。您可以使用 CDC 选择将要加载的行,但它不会为您执行加载。

于 2012-04-12T13:32:46.250 回答