SQLSERVER处理CPU密集逻辑效率低
今天改一处效率问题,对一个临时表进行分段累加计算,累加方式为累积(Cumulative Aggregations),大约9万条记录的表,时间超过三分钟。执行环境: SQL SERVER 2005 ENTERPRISE EDITION 8 CPU CORES 16G MAXSERVERMEMORY累加算法如下:BEGIN TRAN UPDATE #JCCMX SET [JC] = (SELECT SUM(MT_0.ZC) AS MT_0_ZC_SUM FROM #JCCMX AS MT_0 WHERE (MT_0.CLID = #JCCMX.CLID) AND (MT_0.ID <= #JCCMX.ID))ROLLBACK 执行计划可以想象,内连接驱动假脱机(Inner Join Drived Eager Spool)。其中假脱机运算符占据了多数的CPU时
减少锁持有时间,增大并发处理能力一例
今天修改一处并发问题,小记如下。 程序的核心代码包括以下存储过程(示例代码,未包含索引及TRY..CATCH逻辑)。CREATE PROC GenerateLSH @BizTypeID INT, @Prefix VARCHAR(255), @Result INT OUTASBEGIN DECLARE @ID INT SELECT @ID = SegmentTable.SegmentTableID FROM SegmentTable WHERE (SegmentTable.BizTypeID = @BizTypeID) AND (SegmentTable.Prefix = @Prefix); UPDATE SegmentTable SET [MaxNo] = SegmentTable.MaxNo + 1 WHERE SegmentTable.SegmentTableID = @ID; SELECT @Result = SegmentTable.MaxNo F