SQLServer本身查询阻塞,如何解决?



我有这个查询

;WITH --first CTE is your data set example
CTE
AS
(
SELECT *
FROM (VALUES
('2023-04-06', 0029, 'D', 'ABCD', 1, 100),
('2023-04-06', 0027, 'D', 'ABCD', 1, 200),
('2023-04-06', 0044, 'D', 'ABCD', 1, 300),
('2023-04-06', 0042, 'D', 'ABCD', 1, 400),
('2023-04-06', 0029, 'C', 'ABCD', 1, 500),
('2023-04-06', 0069, 'C', 'ABCD', 1, 600),
('2023-04-06', 0067, 'C', 'XXCD', 1, 700),
('2023-04-06', 0089, 'C', 'ABCD', 1, 800),
('2023-04-06', 0079, 'C', 'XXCD', 1, 900),
('2023-04-06', 0084, 'C', 'ABCD', 1, 1000)) AS T([BOOKING_DATE],[TIME_INTERVAL],[DB_CR_CODE],[CHANNEL],[NBR_OF_TXN],[AMOUNT])
),
CTE2 --aggregate data 
AS
(
SELECT
booking_date, interval, product_group1, product_group2,
SUM(nbr_of_txn) AS nbr_txn, SUM(amount) AS amount
FROM
(SELECT
BOOKING_DATE,
CASE
WHEN TIME_INTERVAL BETWEEN 0000 AND 0030 THEN 1
WHEN TIME_INTERVAL BETWEEN 0031 AND 0060 THEN 2
WHEN TIME_INTERVAL BETWEEN 0061 AND 0090 THEN 3
ELSE 99 
END AS interval,
CASE
WHEN DB_CR_CODE = 'C' THEN 'Credit'
WHEN DB_CR_CODE = 'D' THEN 'Debit'        
ELSE '' 
END AS PRODUCT_GROUP1,
CASE 
WHEN DB_CR_CODE = 'C' AND CHANNEL = 'ABCD' THEN 'Credit_ABCD'  
ELSE '' 
END AS PRODUCT_GROUP2,
NBR_OF_TXN, AMOUNT
FROM
CTE) a
GROUP BY booking_date, interval, PRODUCT_GROUP1, PRODUCT_GROUP2
)
--UNION from CTE2
SELECT booking_date, interval, product_group1, nbr_txn, amount
FROM CTE2
WHERE product_group1 !=''
UNION ALL
SELECT booking_date, interval, product_group2, nbr_txn, amount
FROM CTE2
WHERE product_group2 !=''

每天包含1000万到1500万条记录。当我运行它一天,它立即进入暂停状态。我在3.5小时后取消了它

输入图片描述

由于SELECT (STATMAN),它看起来像是阻塞了自己。

输入图片描述

SELECT(STATMAN)是什么?为什么它这样做,而我只是在阅读。如何解决这个问题?

我希望有人能帮忙。小补充:最后,该查询将嵌入到视图中。

的问候罗恩

使用SSMS v18.2.1

SELECT (STATMAN)是一个统计更新。当你从一个表中读取数据时,如果统计数据需要更新,这通常被设置为自动发生,但默认情况下将同步发生(即你需要等待它)。

您有多个选项:

  • 关闭使用SET AUTO_CREATE_STATISTICS OFF自动创建统计信息。建议您手动创建自己的统计数据。
  • 在单个统计对象上使用SET AUTO_UPDATE_STATISTICS OFFNO_RECOMPUTE关闭自动统计更新。这是不可取的,除非你知道你在做什么,你需要有一些过程来手动或定期更新它们。
  • 设置统计数据异步更新,这样您的查询就不必等待,使用SET AUTO_UPDATE_STATISTICS_ASYNC ON。请注意,默认情况下不启用此选项,但通常建议使用此选项。如果您在加载表后立即查询表,此选项可能会有问题。

最新更新