有人做过并发量比较高的大系统吗?
CREATE FUNCTION f_NextNbr()
RETURNS char(8)
AS
BEGIN
RETURN(
SELECT MAX(序号)
FROM 预算表 WITH (XLOCK, PAGLOCK)
)
END
GO
我用上述存储过程找最大序号~~~数据量并发量上去后有没有影响?会不会死锁概率提高呢?
关键对(XLOCK, PAGLOCK)这个有点怀疑~~~~~是不是必须有索引之类的配合
我的预算表主键是Guid,序号是其中一列。
CREATE FUNCTION f_NextNbr()
RETURNS char(8)
AS
BEGIN
RETURN(
SELECT MAX(序号)
FROM 预算表 WITH (XLOCK, PAGLOCK)
)
END
GO
我用上述存储过程找最大序号~~~数据量并发量上去后有没有影响?会不会死锁概率提高呢?
关键对(XLOCK, PAGLOCK)这个有点怀疑~~~~~是不是必须有索引之类的配合
我的预算表主键是Guid,序号是其中一列。
只不过我的这个取max值放在存储过程中来操作的。我想应该没什么区别的,
--Declare
@TableName varchar(20), /* 要取号的表名 */
@DESCRIPT varchar (50), /* 参数说明 */
@VTYPE VARCHAR (2), /* 参数类型 */
@RESULTSTR varchar(20) OutPut, /*返回的编号*/
@ATT_DEPT_ID VARCHAR (12)
AS
BEGIN
Declare @No varchar(20),@TempValue integer
-->>>>>>>>>> Select @No = PARAM_VALUE From SYS_PARAMS
Where CATEGORY = @TableName and PARAM_NAME = 'KEY_NO' AND ATT_DEPT_ID=@ATT_DEPT_ID If @No Is NULL
begin
delete From SYS_PARAMS
Where CATEGORY = @TableName and PARAM_NAME = 'KEY_NO'
AND ATT_DEPT_ID=@ATT_DEPT_ID
Insert Into SYS_PARAMS(CATEGORY,PARAM_NAME,PARAM_VALUE,ATT_DEPT_ID)
Values(@TableName,'KEY_NO','0',@ATT_DEPT_ID)
end
Select @TempValue = CONVERT(INT,ISNULL(@NO,0))+1
Select @NO = CONVERT(VARCHAR,@TEMPVALUE) Update SYS_PARAMS Set PARAM_VALUE = @NO
Where CATEGORY = @TableName and PARAM_NAME='KEY_NO' AND ATT_DEPT_ID=@ATT_DEPT_ID
-->>>>>>>>>>>>>>>>>>>>
UPDATE SYS_PARAMS SET DESCRIPT=@DESCRIPT,
VTYPE =@VTYPE
Where CATEGORY = @TableName and PARAM_NAME = 'KEY_NO'
AND ATT_DEPT_ID=@ATT_DEPT_ID-->>>>>>>>> SELECT @RESULTSTR = @NO
ENDGO
FROM 预算表 WITH (XLOCK, PAGLOCK)
-----------------------------------------既然是高并发,建议改为WITH (ULOCK,ROWLOCK).