有人做过并发量比较高的大系统吗? 
CREATE FUNCTION f_NextNbr()
RETURNS char(8)
AS
BEGIN
RETURN(
SELECT MAX(序号)
FROM 预算表 WITH (XLOCK, PAGLOCK)
)
END
GO 
我用上述存储过程找最大序号~~~数据量并发量上去后有没有影响?会不会死锁概率提高呢?
关键对(XLOCK, PAGLOCK)这个有点怀疑~~~~~是不是必须有索引之类的配合
我的预算表主键是Guid,序号是其中一列。

解决方案 »

  1.   

    我认为可以这样用,我目前一直这样用的,我不知道你的高并发的中的这个“高”以什么为参考的?
    只不过我的这个取max值放在存储过程中来操作的。我想应该没什么区别的,
      

  2.   

    CREATE     PROCEDURE GETMAXKEYNO
    --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
      

  3.   

    SELECT MAX(序号)
    FROM 预算表 WITH (XLOCK, PAGLOCK)
    -----------------------------------------既然是高并发,建议改为WITH (ULOCK,ROWLOCK).
      

  4.   

    SELECT MAX(序号) FROM 预算表它并发不并发有什么关系呢? 还不是找出一样的值.并发影响,在要修改删除上做文章.