gpt4 book ai didi

sql-server - SQL Server 停止发送记录

转载 作者:行者123 更新时间:2023-12-01 06:30:48 26 4
gpt4 key购买 nike

我们有一个非常复杂的分析过程,其中包含多个变量和数千条记录,通常会在 tempdb 中生成数万亿条排列记录。 .通过预处理和动态 SQL,我们能够在几秒钟内完成分析,而且 tempdb 中只有几千条记录。 (而不是万亿)。

该代码已使用多年。今天,其中一个变量输入增长到其传统大小的两倍,并且 SQL Server 无法完成代码的运行。它只会停止为预处理步骤之一发送数据。此处包含的完整代码非常冗长和复杂,但为了说明正在发生的事情:

/* Lots of SQL code */

print 'debug 1'

select distinct field
from #table

print 'debug 2'

select several..fields
from many..tables..joined..with..temp..tables
where multiple..conditions
group by several..fields

print 'debug 3'

如果我们在 SSMS 中执行代码(在 DB 服务器上运行),我们可以简单地将代码运行到 print 'debug 2'行并且是从 select distinct field 返回的 330 条记录立即声明。

如果我们运行所有代码,从 select distinct field 只返回 290-325(左右)条记录。语句,然后数据库服务器的 CPU 开始抖动。它永远不会返回其余的 330 条记录和 debug 2永远不会打印到消息选项卡/窗口。即使我们在运行数小时后中止查询,结果选项卡/窗口中的记录也少于 330 条, debug 2不打印。

就像第二个 select语句使 SQL Server 无法完成返回第一个 select 的所有行陈述。

我比较了两者的查询计划(有和没有最后一条语句),它们与 print 'debug 2' 相同。线。我尝试向#temp 表添加索引,更新数据库中的统计信息,并移动最后一个 select存储过程的语句以帮助隔离代码。没有任何帮助。

有没有人看到 Microsoft SQL Server 2008 R2 (SP1) 在执行 SQL 语句的过程中停止发送记录?你做了什么来修复它?

最佳答案

听起来数据被困在我某处的缓冲区中。
更换 PRINT s 与 RaisError('Debug n', 0, 0) WITH NOWAIT看看这是否会改变事情。

PS:你的介绍让我对实际代码真的非常非常好奇=P

关于sql-server - SQL Server 停止发送记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22107544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com