sql - 与 Powershell 一起使用时,带有 Delete 语句的 SQL Server 存储过程会超时
问题描述
当我使用 PowerShell 执行存储过程时,我会超时。
powershell -NoProfile -NonInteractive -Command "Invoke-DbaQuery -Query 'EXEC [bas].[sp_xxx_Delete]' -SqlInstance xxxx\PROD\ -Database RLBCAM -verbose -QueryTimeout 1200"
SQL:
BEGIN TRY
WHILE @FETCH_STATUS <= @ID
BEGIN
SET @Tab = (SELET Tabelle FROM @Basis WHERE ID = @FETCH_STATUS)
SET @Quelle = (SELET P2 FROM @Basis WHERE ID = @FETCH_STATUS)
SET @Wert = (SELECT Wert FROM @Basis WHERE ID = @FETCH_STATUS)
SET @Zieldate = (SELET Basisdate FROM @Basis WHERE ID = @FETCH_STATUS)
IF @Tab <> ''
BEGIN
WHILE 1 = 1
BEGIN
SET @x = CONCAT('DELETE TOP(50000) FROM ',@Tab,' WHERE ',@Quelle ,' = ', nchar(39), @Zieldate, nchar(39))
EXEC (@x)
IF @@ROWCOUNT = 0
BREAK
WAITFOR DELAY '00:00:01'
END
SET @x = REPLACE(@x, 'TOP(50000)', '*')
EXECUTE bas.proc_WriteLog 'bas.SP.xxxxx_Delete', 0, 'I', @x, 0, '', @Date1, @VDate, 'Delete ...'
END
ELSE
BEGIN
PRINT CONCAT('Dead ID:', @FETCH_STATUS)
END
SET @FETCH_STATUS = @FETCH_STATUS + 1
END
END TRY
它最终因超时而失败
详细:从 bas.tbl_xxxx 中删除 Top(50000),其中 source = '2020-08-11' 详细
:从 bas.tbl_xxxx 中删除 Top(50000),其中 source = '2020-08-11'
警告:[11:38:03 ][Invoke-DbaQuery] [] 执行失败 | 等待操作超时
在 SQL Server Management Studio 中启动时,存储过程不会因超时而失败。
执行此存储过程时没有其他作业正在运行。使用 shell 时,它总是在大约 5 分钟后失败。
DELETE 语句在每个数据日删除 50000 个包中的大约 2 个 mio 记录。完整的作业将从几个表中删除大约 50 条 mio 记录,没有连接,总是相同的语句,其他日期和表名。Packagesize 50000 对所有语句都有效。
使用较小的大小(例如 10000 或更长的超时时间)时没有区别。最大超时为 20 小时,效果相同。
内存峰值为 350 MB。系统提供 128 GB 内存。磁盘存储空间 > 1 TB。
SQL Server 2019
MMC 2018,对服务器版本有效
解决方案
推荐阅读
- python - pyqt5中的多个窗口
- javascript - API 给出错误 (net::ERR_EMPTY_RESPONSE)
- libvirt - 虚拟接口 (veth) 在 libvirtd/virt-manager 中无法用于桥接
- android - mySQL 安卓工作室。java.sql.SQLNonTransientConnectionException:无法创建到数据库服务器的连接
- javascript - 当我将“scrollIntoView”函数与“pointer-events:none”一起使用时,元素的行为很奇怪
- python - 将变量传递给 websocket 函数 - Alpaca API Python Websocket
- python - 如何在 python 中使用 matplotlib.ticker 舍入 yaxis
- reactjs - 不能使用带有打字稿的反应钩子
- python - 在Python中按多列分组时如何为组设置条件?
- python - 如何使用 selenium 和 python 抓取谷歌地图查询?