gpt4 book ai didi

sql-server - 获取有关运行更新查询的信息

转载 作者:行者123 更新时间:2023-12-03 09:39:37 27 4
gpt4 key购买 nike

在 Sql Server 2008 上,我有一个运行缓慢的更新查询,它已经运行了 3 个小时。有什么方法可以获取有关此执行(当然,在执行时)的任何统计信息(例如,到目前为止更改了多少行或其他内容)?这样我就可以在取消查询和优化它或让它完成之间做出决定。

否则,我应该在执行前做些什么吗?如果是这样,在执行之前可以做什么来获取有关运行时更新查询的信息。 (当然,在很大程度上不影响性能)

澄清的更新:
问题中提到的更新语句是(例如):
更新 myTable SET col_A = 'value1' WHERE col_B = 'value2'
换句话说,它是更新整个表的单个查询

最佳答案

你现在可以做什么?

您可以尝试使用 WITH(NOLOCK) table hint 运行单独的查询查看更新了多少行。例如如果更新语句是:

UPDATE MyTable
SET MyField = 'UPDATEDVALUE'
WHERE ID BETWEEN 1 AND 10000000

你可以运行这个:

SELECT COUNT(*)
FROM MyTable WITH (NOLOCK)
WHERE ID BETWEEN 1 AND 10000000
AND MyField = 'UPDATEDVALUE'


你以后能做什么?

您可以分批进行更新,并在进行时输出进度。例如使用循环以 1000(解释点的任意值)为单位更新记录。每个更新 block 完成后,打印出进度(假设您从 SSMS 运行它)例如

DECLARE @RowCount INTEGER
SET @RowCount = 1
DECLARE @Message VARCHAR(500)
DECLARE @TotalRowsUpdated INTEGER
SET @TotalRowsUpdated = 0

WHILE (@RowCount > 0)
BEGIN
UPDATE TOP (1000) MyTable
SET MyField = 'UPDATEDVALUE'
WHERE ID BETWEEN 1 AND 10000000
AND MyField <> 'UPDATEDVALUE'

SELECT @RowCount = @@ROWCOUNT
SET @TotalRowsUpdated = @TotalRowsUpdated + @RowCount
SELECT @Message = CAST(GETDATE() AS VARCHAR) + ' : ' + CAST(@TotalRowsUpdated AS VARCHAR) + ' records updated in total'
RAISERROR (@Message, 0, 1) WITH NOWAIT
END

像这样使用 RAISERROR 可确保立即打印出进度消息。如果您改为使用 PRINT,消息将被假脱机而不是立即输出,因此您将看不到实时进度。

关于sql-server - 获取有关运行更新查询的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180908/

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