You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Microsoft SQL Server中ETL文件加载是否停滞?

检测进度停滞的加载文件

需求分析

需要识别状态为RUNNING、进度超过30分钟未增长的文件,已知正常加载时进度会持续增长,但任务相关日期列(如启动时间)不会更新。

原查询问题说明

你提供的原始查询逻辑错误:将Progress(百分比数值)与时间戳直接比较,无法实现进度停滞的检测。


解决方案

情况1:表中存在进度最后更新时间列

如果你的ExecuteFileStatus表中有记录进度最后更新时间的列(比如LastProgressUpdate,注意不是任务启动时间),可以直接通过时间差判断:

DECLARE @CurrentTime DATETIME = CURRENT_TIMESTAMP;
-- 设置30分钟停滞阈值
DECLARE @StallThreshold DATETIME = DATEADD(MINUTE, -30, @CurrentTime);

SELECT *
FROM ExecuteFileStatus
WHERE 
    Runstate = 'RUNNING'
    AND Progress < 100 -- 排除已完成但状态未同步的文件
    AND LastProgressUpdate <= @StallThreshold;

情况2:表中仅保留当前状态(无进度历史)

如果表中只有当前进度和任务启动时间(日期列不更新),则需要先记录进度历史,再对比判断:

  1. 创建进度日志表(仅需执行一次):
CREATE TABLE FileProgressLog (
    FileName VARCHAR(255) NOT NULL,
    Progress INT NOT NULL,
    LogTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (FileName, LogTime)
);
  1. 定期记录进度(比如每5分钟执行一次,可通过SQL Agent Job自动化):
INSERT INTO FileProgressLog (FileName, Progress)
SELECT FileName, Progress
FROM ExecuteFileStatus
WHERE Runstate = 'RUNNING';
  1. 查询停滞文件:
WITH LatestProgress AS (
    SELECT 
        FileName,
        Progress,
        LogTime,
        -- 获取该文件最近一次的进度和记录时间
        LAG(Progress) OVER (PARTITION BY FileName ORDER BY LogTime DESC) AS PreviousProgress,
        LAG(LogTime) OVER (PARTITION BY FileName ORDER BY LogTime DESC) AS PreviousLogTime
    FROM FileProgressLog
    -- 仅查询最近1小时的日志,缩小范围
    WHERE LogTime >= DATEADD(MINUTE, -60, CURRENT_TIMESTAMP)
)
SELECT DISTINCT
    e.FileName,
    e.Progress AS 当前进度,
    e.ABUpdateTime AS 任务启动时间,
    DATEDIFF(MINUTE, lp.PreviousLogTime, CURRENT_TIMESTAMP) AS 停滞时长(分钟)
FROM LatestProgress lp
JOIN ExecuteFileStatus e ON lp.FileName = e.FileName
WHERE 
    e.Runstate = 'RUNNING'
    AND e.Progress < 100
    -- 最近两次记录的进度无变化
    AND lp.Progress = lp.PreviousProgress
    -- 停滞时间超过30分钟
    AND DATEDIFF(MINUTE, lp.PreviousLogTime, CURRENT_TIMESTAMP) >= 30;

内容的提问来源于stack exchange,提问作者escsavar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:27:49