sql-server - SQL Server 作业偶尔会卡住
问题描述
我发现我的 SQL Server 工作偶尔会卡住,大约每两个月一次。由于我不是 DBA 背景,我需要一些帮助来解决这个问题。
到目前为止,我已尝试通过检查活动监视器来查明问题。我发现这个问题是由我的一个存储过程引起的,它将创建一个临时表来收集数据,然后将数据插入到我的一个事务表中。该表有 4 亿条记录。
每当出现此问题时,我都会停止工作并:
- 我重新运行作业,存储过程可以完成
- 我手动执行存储过程,存储过程完成
我实现了SP_BlitzCache并执行它。DBCC FREEPROCCACHE (0x0...)
我可以在存储过程中看到它的建议。
CREATE TABLE #dtResult
(
RunningNumber INTEGER,
, AlphaID BIGINT
, BetaID BIGINT
, Content varchar(100)
, X varchar(10)
, Y varchar(10)
)
INSERT INTO #dtResult ( RunningNumber, ...)
SELECT RowId AS RunningNumber,
...
FROM
...
/*** Based on activity monitor, the highest CPU caused by this statement ***/
INSERT INTO tblTransaction ( ... )
SELECT DISTINCT
RES.AlphaID
, b.UnitId
, RES.BetaID
, CASE WHEN RES.BinData IS NULL THEN [dbo].[fnGetCode](B.Data, RES.X, RES.Y) ELSE RES.Content END
, CONVERT(DATETIME, SUBSTRING(RES.Timestamp, 1, 4) + '-' + SUBSTRING(RES.Timestamp, 5, 2) + '-' + SUBSTRING(RES.Timestamp, 7, 2) + ' ' + SUBSTRING(RES.Timestamp, 9, 2) + ':' + SUBSTRING(RES.Timestamp, 11, 2) + ':' + SUBSTRING(RES.Timestamp, 13, 2) + '.' + SUBSTRING(RES.Timestamp, 15, 3), 121)
FROM
#dtResult RES
INNER JOIN
tblA a with(nolock) ON RES.AlphaID = a.AlphaID
INNER JOIN
tblB b with(nolock) ON a.UnitId = b.UnitId AND CAST(RES.X AS INTEGER) = b.X AND CAST(RES.Y AS INTEGER) = b.Y
INNER JOIN
tblC c with(nolock) ON RES.BetaID = c.BetaID
LEFT OUTER JOIN
tblTransaction t with(nolock) ON RES.AlphaID = t.AlphaID AND RES.BetaID = t.BetaID AND t.UnitId = b.UnitId
WHERE
t.BetaID IS NULL
/* FUNCTION */
CREATE FUNCTION [dbo].[fnGetCode]
(
@Data VARCHAR(MAX),
@SearchX INT,
@SearchY INT
)
RETURNS CHAR(4)
WITH ENCRYPTION
AS
BEGIN
DECLARE @SearchResult CHAR(4)
DECLARE @Pos INT
SET @Pos = (@SearchY * @SearchX) + 1
SET @SearchResult = CONVERT(char(1),SUBSTRING(@Data,@Pos,1), 1)
RETURN @SearchResult
END
解决方案
推荐阅读
- laravel - 我创建了一个主页,它的所有代码都意味着页眉、页脚等我分布在不同的页面中
- html - 使用Bootstrap 4将具有行类的div拉伸到底部
- java - 单元测试spring-kafka消费者时如何在KafkaEmbedded中设置端口
- npm - “popper”和“popper.js”是 npm 中的两个不同的包吗?
- java - 如何在 EntityListener 类中使用@Autowired?
- sql-server - 不同数据库引擎之间的原生查询日期格式
- notepad++ - 如何在特定单词之前添加回车(并将后续文本移动到下一行)
- java - 如何从 Firebase 数据库中获取特定值并将其保存在另一个地方
- javascript - 无法从 3rd 方库中捕获未处理的 Promise 拒绝
- java - java如何实现uuid v2?