在企业中优化您的 SSIS 包数据流(SQL Server 视频)
适用于:Microsoft SQL Server Integration Services |
作者:David Noor,Microsoft Corporation |
长度:00:15:50 大小:68.1 Mb 类型:WMV 文件 |
视频摘要
本视频演示如何改进 Integration Services 包中数据流的性能。在这个视频中,您将学习如何优化数据流的以下阶段:
- 提取
- 转换
- 加载
您可以在设计、开发和运行数据流时应用这些性能优化技巧。
视频致谢
感谢 Thomas Kejser 对 SSIS:性能设计和优化 - SQL Server 视频系列材料所做的贡献。本视频是该系列的第二部分。
感谢 Carla Sabotta 和 Douglas Laudenschlager 的指导和宝贵反馈。
视频脚本
视频时间戳 | 音频 |
---|---|
00:00 |
您好,我是 David Noor,Microsoft 的 SQL Server Integration Services 的高级开发负责人。欢迎观看本视频,它介绍如何在企业中优化您的 SSIS 包数据流。 本视频是名为 SSIS:性能的设计和优化系列的第二部分,这个系列共四个部分。在这个系列的第一部分中,Denny 介绍了如何最好地测量和理解 SSIS 包的性能。在本单元中,我们将以第一部分为基础,看看如何改进您的 SSIS 包数据流的性能。开始时,我们将标识每个数据流中的共同主题,以及在尝试改进性能时如何选择应首先处理的数据流部分。一旦您理解了性能问题所在,就可以对您的数据流执行多种处理,从而加快运行速度、提高运行效率。我们将观看您在设计、开发、甚至执行数据流时可以应用的一系列具体技巧。 现在就开始吧! 大多数包数据流都以提取、转换和加载关键数据为中心,这三个过程有时候统称为 ETL。优化您的数据流意味着优化数据流的上述每个阶段:提取、转换和加载。 对于提取,我们将讨论如何优化 SSIS 源组件以及可提供最佳性能且对您的源系统影响最小的查询。 在您的数据流中优化转换意味着考察您需要完成的工作,通过消除不需要的步骤选择用来完成该工作的最佳方法,以及有时候更改为您执行转换的原始源查询。 最后,优化数据流的加载环节意味着优化 SSIS 目标组件、网络、锁定以及在尝试将数据加载到目标时可能会阻碍数据流行进的其他因素。 在这个视频中,我们将介绍一些实践技巧,您可以使用它们在数据流的所有这三个阶段中发现优化机会。 在我们开始观看这些技巧前需要牢记的是,在处理性能问题时通常没有所谓的“万灵丹”。这里没有一个技巧可以解决您的数据流可能遇到的所有性能问题。我们将展示的这些技巧在一些常见情形下可以大展身手,但不要认为只应用了这些技巧后您的问题就会迎刃而解。您最好始终理解您的数据流的用途,确保在设计上很好地满足这些目标,测量其当前性能,对您的数据流反复进行更改并且衡量所做更改是否改进了性能。 此外,当您斟酌某一性能问题时,很容易被局限在特定的技术或组件上,有时候只是因为您熟悉该技术或代码。但无论原因如何,都应该尽量在整个生态系统环境中考虑您的数据流 — 整个生态系统最可能由多个关系数据库、一个网络、多种操作系统、多种文件系统以及许多片断构成。您对整个生态系统了解的越多,在其中任何一个环节面临真正的性能挑战时,您就能够更好地把握全局,并且将能够作出效率更高而风险更小的改变。 |
03:38 |
我们将从数据流处理提取开始。在将 SQL Server 或具有大容量接口的任何其他数据库作为您的源时,您应该试验逐步增加包大小。通常,SQL Server 默认的 4096 字节大小就很合适了,但因为您的提取将要移动大量数据,所以提高该值应该会有所帮助。为使值的提高生效,您需要请求您的网络管理员对您的网络也启用“Jumbo 帧”。而您要测试这一更改对您的包的影响。如果您将同一个连接管理器既用于 OLE DB 源之类的大容量操作,也用于 OLE DB 命令之类的单行操作,则要考虑为 OLE DB 命令操作创建第二个连接管理器,并在那里使用更低的包大小。 如上所述,如果您的 ETL 正在 Windows 2008 上运行并且处于具有多个 NIC 的多核计算机上,则可以通过向单独的核心增加网卡而稍微改善网络性能。有关详细信息,请参阅 MSDN 网站上发布的博客主题 Scaling Heavy Network Traffic with Windows(使用 Windows 调控高网络通信量)。 用于优化提取的最容易的手段之一就是优化您正在使用的查询。有时候只选择您要从中提取的表并允许检索所有列颇具吸引力,但如果您只选择真正需要的列,结果将会好得多。这不仅会导致更少的网络通信流量和内存使用量,而且数据库服务器可能执行少得多的 I/O 即可满足您的查询。 如这里所示,对于 SQL Server,您还可以使用提示来指示在执行选择时没有应发出的共享锁,因此您的查询将读取可能未提交的数据或脏数据。只有在您必须具备最佳性能且确保读取脏数据对于您的 ETL 作业始终没有问题的情况下,才保留上述设置。 查找可被视作提取或转换。但无论是哪一种,您都应该贯彻我们在前一幻灯片中介绍的一些思路。在这里,只选择您需要的列甚至更为重要,这不仅对于网络优化很重要,对于内存中缓存的优化也十分重要。 如果您在使用 SQL Server 2008,它在性能方面的最佳特性之一就是添加了新的、共享的查找缓存。通过共享查找缓存,您可以一次就提取您的引用数据,然后在包内的多个查找操作中重复使用这些数据,甚至可以通过将缓存保存到某一文件来跨包重复使用它们。如果您具有引用相同表的多个查找组件,则要核查这个新的选择,确定它是否可作为大幅提高包的速度。使用它可能相当简单。在您的包中创建缓存连接管理器,使用新的缓存转换填充缓存,然后更改您的查找以便为其引用数据引用此缓存连接。 |
06:29 |
现在我们来进入 ETL 的第二个阶段:转换。在转换中,您处理已加载到数据流中的数据并尝试数据在加载前即获得适当的格式。在 SSIS 中,每个转换都表现为您可以拖入设计中的对象,但并非所有转换都是一样的。让我们看一下在 SSIS 中存在的三种转换:
在介绍了基本知识后,让我们看一下几个具体的技巧:
|
11:59 |
让我们继续介绍加载阶段。 在加载到 SQL Server 中时,您有两个很好的选择:
对于所有上述选择,使用 0 提交大小将导致最快的加载。 在进行大量加载时删除您的目标系统中的索引也是相当常见的行为,但您应该使用某些指导原则来知晓何时要这样做。一个常见的指导原则是基于加载预期导致的百分比增幅以及您在表上具有的索引类型来选择是否删除索引:
如果您在加载到还要执行其他活动的表中,就需要设计一个策略。大容量加载很可能会锁定大多数目标表,即使不是所有的目标表。因此,您需要确保这样做没问题或使用分区。如果您需要对运行数据库进行加载,最好设置一个要加载到的分区,以便当前运行数据可以保持活动状态。如果您的加载速度放慢,则要确保查清对该表或分区正在发生哪些其他活动,并且确保没有其他活动与加载操作争用。 有关提高大容量加载和分区性能的很有帮助的指南,请查看 MSDN 上的 SQLCAT 文章 The Data Loading Performance Guide(数据加载性能指南)。 此外,在进行重新加载时,请确保使用 TRUNCATE 而非 DELETE 来清除数据,以便删除将不是事务性的。 使用网络连接的目标也受到我在前面描述的相同网络问题的困扰。考虑增加包大小和对您的网络启用“Jumbo 帧”以便得到最佳的加载性能。 |
15:02 |
好啦,上面的内容就是这个性能系列的第二部分。特别感谢 Thomas 提供的所有帮助性信息,这些信息构成了这个视频系列的基础;同时还要感谢 Carla 和 Douglas,他们也对这个系列的创建帮助很大。有关这些主题的详细信息,请参考 Top 10 SQL Server Integration Services Best Practices(前 10 位的 SQL Server Integration Services 最佳实践)。 感谢您观看这个视频。请确保查看 SSIS:性能的设计和优化这个视频系列的其他三个部分。希望其内容会对您有所帮助,并且我们真诚欢迎您的反馈。在视频主页上的右上角中,有一个链接可供您进行评级和提供反馈。 |