我们有一个 SSIS 作业,它将数据从位于其他服务器 B 中的表中的数据插入到服务器 A 中的表中。
为此,我们正在使用 dblinks 连接到其他数据库。但是,这会导致很多性能问题并且作业失败,因为执行查询需要大量时间。
所以,我想知道,Dblinks 的替代品是什么。我得到的一件事是,使用Materialistic views
.
但是我不确定,它是如何工作的?请建议..
我们有一个 SSIS 作业,它将数据从位于其他服务器 B 中的表中的数据插入到服务器 A 中的表中。
为此,我们正在使用 dblinks 连接到其他数据库。但是,这会导致很多性能问题并且作业失败,因为执行查询需要大量时间。
所以,我想知道,Dblinks 的替代品是什么。我得到的一件事是,使用Materialistic views
.
但是我不确定,它是如何工作的?请建议..
物化视图不能替代数据库链接。它可能会使用跨数据库链接提取的数据创建本地物化视图。您需要做的是调整您用于物化视图的查询。
在 sqlplus 中运行查询并打开计时和自动跟踪。寻找笛卡尔连接、全表扫描和排序。您可能可以对索引进行一些额外的索引或更改,这将使查询运行起来更便宜。您希望所有过滤和排序都发生在链接的源端,以便您带来尽可能少的数据。
使用数据库链接的替代方法是在 SSIS 包中为每个数据库创建不同的连接,并使用这些连接将数据从远程数据库拉到 SSIS 服务器,然后将该数据推送到目标数据库。然而,这极不可能导致性能改进。最有可能的是,这意味着您的数据将花费更多时间通过其他网络链接。
物化视图不会替代数据库链接。物化视图将使用数据库链接。它们将替换您的部分或全部 SSIS 包。
为什么您认为数据库链接是您的性能问题的根源?您的 SSIS 包是否导致 Oracle 执行基于集合的操作以将数据从远程服务器拉到本地服务器?或者 SSIS 是否在执行基于行的操作,其中从远程数据库中提取单个行并将其加载到本地数据库中。基于行的操作本质上比基于集合的操作慢得多,尤其是在通过网络发送数据时。SSIS 通常使构建漂亮的逐行 ETL 过程变得非常容易。这种组合似乎比数据库链接更有可能解释您的性能问题。
“花费很长时间”如何转化为“失败”?如果 SSIS 作业失败,则意味着引发错误。那是什么错误?或者您是说这项工作在技术上是成功的,但它需要很长时间以至于它违反了您的 SLA,因此业务部门认为该工作是失败的?
如果您实际上是在您的 SSIS 包中执行基于集合的操作,并且您的包没有抛出错误,那么运行时间太长,那么您可能需要开始考虑调整您的代码的单个基于集合的操作通过查看数据库中的查询计划等内容来执行。您可能缺少索引或确保连接发生在正确的服务器上,或者您的负载需要重构以确保仅从远程服务器获取数据一次而不是多次。然而,我们需要更多地了解哪些语句需要很长时间才能帮助您调整它们。