当前位置:  开发笔记 > 数据库 > 正文

如何避免在SQL Server上进行急切的假脱机操作

如何解决《如何避免在SQLServer上进行急切的假脱机操作》经验,为你挑选了1个好方法。

我有一个ETL过程涉及一个大量使用SELECT INTO语句的存储过程(最少记录,因此生成较少的日志流量,因此更快).在一个特定存储的存储过程中发生的一批工作中,几个最昂贵的操作是急切的线程,它们似乎只是缓冲查询结果,然后将它们复制到正在制作的表中.

热门线轴上的MSDN文档非常稀少.有没有人更深入地了解这些是否真的有必要(以及在什么情况下)?我有一些理论可能有意义,也可能没有意义,但没有成功从查询中消除这些理论.

.sqlplan文件非常大(160kb)所以我想将它们直接发布到论坛可能是不合理的.

所以,这里有一些可能适合特定答案的理论:

该查询使用一些UDF进行数据转换,例如解析格式化日期.这个数据转换是否需要使用热切片在构造它之前为表分配合理类型(例如varchar长度)?

作为上述问题的扩展,是否有人更深入地了解在查询中驱动此操作的内容是什么?

Grank.. 33

我对假脱机的理解是,它对你的执行计划来说是一个红色的鲱鱼.是的,它占了很多查询成本,但它实际上是SQL Server自动进行的优化,因此可以避免代价高昂的重新扫描.如果你要避免假脱机,它所依赖的执行树的成本会上升,几乎可以肯定整个查询的成本会增加.我没有特别深入了解特别是可能导致数据库的查询优化器以这种方式解析执行的内容,特别是在没有看到SQL代码的情况下,但您最好还是相信它的行为.

但是,这并不意味着您的执行计划无法优化,具体取决于您的具体目标以及源数据的易变性.当您执行某项操作时SELECT INTO,您通常会在执行计划中看到假脱机项目,并且它可能与读取隔离有关.如果它适合您的特定情况,您可以尝试将事务隔离级别降低到更低成本和/或使用NOLOCK提示.我发现在复杂的性能关键查询中NOLOCK,如果安全且适合您的数据,即使看起来没有任何理由,也可以大大提高查询执行的速度.

在这种情况下,如果您尝试READ UNCOMMITTEDNOLOCK提示,您可能可以消除一些线轴.(显然你不想这样做,如果它可能让你处于一个不一致的状态,但每个人的数据隔离要求都不同).在TOP运营商和OR运营商有时可能会导致假脱机,但我怀疑你是在ETL过程中做任何的那些...

你说你的UDF也可能是罪魁祸首是对的.如果您只使用一次UDF,那么尝试将它们内联以查看您是否获得了较大的性能优势将是一个有趣的实验.(如果你无法找到一种将它们与查询内联的方法,那可能就是它们可能导致假脱机的原因).

我要看的最后一件事是,如果您正在进行任何可以重新排序的连接,请尝试使用提示强制连接顺序在您知道的最具选择性的顺序中发生.这有点可以实现,但如果您已经停止优化,那么尝试它并没有什么坏处.



1> Grank..:

我对假脱机的理解是,它对你的执行计划来说是一个红色的鲱鱼.是的,它占了很多查询成本,但它实际上是SQL Server自动进行的优化,因此可以避免代价高昂的重新扫描.如果你要避免假脱机,它所依赖的执行树的成本会上升,几乎可以肯定整个查询的成本会增加.我没有特别深入了解特别是可能导致数据库的查询优化器以这种方式解析执行的内容,特别是在没有看到SQL代码的情况下,但您最好还是相信它的行为.

但是,这并不意味着您的执行计划无法优化,具体取决于您的具体目标以及源数据的易变性.当您执行某项操作时SELECT INTO,您通常会在执行计划中看到假脱机项目,并且它可能与读取隔离有关.如果它适合您的特定情况,您可以尝试将事务隔离级别降低到更低成本和/或使用NOLOCK提示.我发现在复杂的性能关键查询中NOLOCK,如果安全且适合您的数据,即使看起来没有任何理由,也可以大大提高查询执行的速度.

在这种情况下,如果您尝试READ UNCOMMITTEDNOLOCK提示,您可能可以消除一些线轴.(显然你不想这样做,如果它可能让你处于一个不一致的状态,但每个人的数据隔离要求都不同).在TOP运营商和OR运营商有时可能会导致假脱机,但我怀疑你是在ETL过程中做任何的那些...

你说你的UDF也可能是罪魁祸首是对的.如果您只使用一次UDF,那么尝试将它们内联以查看您是否获得了较大的性能优势将是一个有趣的实验.(如果你无法找到一种将它们与查询内联的方法,那可能就是它们可能导致假脱机的原因).

我要看的最后一件事是,如果您正在进行任何可以重新排序的连接,请尝试使用提示强制连接顺序在您知道的最具选择性的顺序中发生.这有点可以实现,但如果您已经停止优化,那么尝试它并没有什么坏处.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有