gpt4 book ai didi

sql - 如何跟踪 SQL 更新的进度?

转载 作者:行者123 更新时间:2023-12-02 14:17:05 25 4
gpt4 key购买 nike

假设我有一个更新,例如:

  UPDATE [db1].[sc1].[tb1] 
SET c1 = LEFT(c1, LEN(c1)-1)
WHERE c1 like '%:'

此更新基本上将遍历数百万行并修剪冒号(如果 c1 列中有冒号)。

如何跟踪表中的进展情况?

谢谢

这是 SQL Server 2008

最佳答案

您可以使用 sysindexes 表,它跟踪索引的更改量。因为这是在原子更新中完成的,所以它没有机会重新计算统计信息,因此 rowmodctr 将继续增长。有时,这在小表中并不明显,但对于数百万人来说,它会显示出来。

-- create a test table
create table testtbl (id bigint identity primary key clustered, nv nvarchar(max))

-- fill it up with dummy data. 1/3 will have a trailing ':'
insert testtbl
select
convert(nvarchar(max), right(a.number*b.number+c.number,30)) +
case when a.number %3=1 then ':' else '' end
from master..spt_values a
inner join master..spt_values b on b.type='P'
inner join master..spt_values c on c.type='P'
where a.type='P' and a.number between 1 and 5
-- (20971520 row(s) affected)

update testtbl
set nv = left(nv, len(nv)-1)
where nv like '%:'

现在在另一个查询窗口中,连续运行下面的代码并观察 rowmodctr 的不断上升。如果您知道 rowmodctr 需要最终到达的位置,则 rowmodctrrows 可以让您了解自己的进度。在我们的例子中,这一比例刚刚超过 200 万,占 67%。

select rows, rowmodctr
from sysindexes with (nolock)
where id = object_id('testtbl')

在更新表本身时,请不要运行(nolock)计数查询。

关于sql - 如何跟踪 SQL 更新的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754502/

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