翻到以前老大的老古董,看看吧!关于行锁的问题,紧急对应,解决给分
http://topic.csdn.net/t/20050317/15/3859017.html

解决方案 »

  1.   

    begin tran update T with(ROWLOCK)set number=number+1 where ID=1
      

  2.   

    但我的条件是? 
    select * from gb_Maxm where Code='120' and Kj=2008 and ckcode=''
      

  3.   

    请问题如果没有加:with(ROWLOCK)行锁,在多用下会出现什么问题???
    update bb with(ROWLOCK) set dd=0990 where id=1098
      

  4.   

    SELECT au_lname FROM authors WITH (NOLOCK)锁定提示                                 描述  
    HOLDLOCK        将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。HOLDLOCK        等同于        SERIALIZABLE。        
    NOLOCK        不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅应用于        SELECT        语句。        
    PAGLOCK        在通常使用单个表锁的地方采用页锁。        
    READCOMMITTED        用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL        Server        2000        在此隔离级别上操作。        
    READPAST        跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。READPAST        锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于        SELECT        语句。        
    READUNCOMMITTED        等同于        NOLOCK。        
    REPEATABLEREAD        用与运行在可重复读隔离级别的事务相同的锁语义执行扫描。        
    ROWLOCK        使用行级锁,而不使用粒度更粗的页级锁和表级锁。        
    SERIALIZABLE        用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于        HOLDLOCK。        
    TABLOCK        使用表锁代替粒度更细的行级锁或页级锁。在语句结束前,SQL        Server        一直持有该锁。但是,如果同时指定        HOLDLOCK,那么在事务结束之前,锁将被一直持有。        
    TABLOCKX        使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。        
    UPDLOCK        读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK        的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。        
    XLOCK  select * from ta WITH (UPDLOCK,READPAST)
      

  5.   

    如何能看出来,我的表是被那一条SQL语句,锁死了?我用的是2005??
      

  6.   

    --查看锁信息
    create table #t(req_spid int,obj_name sysname)declare @s nvarchar(4000)
        ,@rid int,@dbname sysname,@id int,@objname sysnamedeclare tb cursor for 
        select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
        from master..syslockinfo where rsc_type in(4,5)
    open tb
    fetch next from tb into @rid,@dbname,@id
    while @@fetch_status=0
    begin
        set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
        exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
        insert into #t values(@rid,@objname)
        fetch next from tb into @rid,@dbname,@id
    end
    close tb
    deallocate tbselect 进程id=a.req_spid
        ,数据库=db_name(rsc_dbid)
        ,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
            when 2 then '数据库'
            when 3 then '文件'
            when 4 then '索引'
            when 5 then '表'
            when 6 then '页'
            when 7 then '键'
            when 8 then '扩展盘区'
            when 9 then 'RID(行 ID)'
            when 10 then '应用程序'
        end
        ,对象id=rsc_objid
        ,对象名=b.obj_name
        ,rsc_indid
     from master..syslockinfo a left join #t b on a.req_spid=b.req_spidgo
    drop table #t
      

  7.   

    大体上说说1 使用事务时,处理尽量简单时间尽量短,保证非人为干预因素;
    2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂;下例将锁超时期限设置为 1,800 毫秒。
    SET LOCK_TIMEOUT 1800 3 优化程序,检查并避免死锁现象出现;
    4 一般不要修改SQL SERVER事务的默认级别。不推荐强行加锁 
    5 设置事务隔离级别。 
    6 配置索引的锁定粒度
        可以使用 sp_indexoption 系统存储过程来设置用于索引的锁定粒度 
    7 可以使用SET DEADLOCK_PRIORITY控制在发生死锁情况时会话的反应方式
    8 查询分析器  CLTR  +  2  看看哪个锁
      

  8.   

    SET DEADLOCK_PRIORITY
    控制在发生死锁情况时会话的反应方式。如果两个进程都锁定数据,并且直到其它进程释放自己的锁时,每个进程才能释放自己的锁,即发生死锁情况。语法
    SET DEADLOCK_PRIORITY { LOW | NORMAL | @deadlock_var }参数
    LOW指定当前会话为首选死锁牺牲品。Microsoft® SQL Server™ 自动回滚死锁牺牲品的事务,并给客户端应用程序返回 1205 号死锁错误信息。NORMAL指定会话返回到默认的死锁处理方法。@deadlock_var是指定死锁处理方法的字符变量。如果指定 LOW,则 @deadlock_var 为 3;如果指定 NORMAL,则 @deadlock_var 为 6。
      

  9.   

    记录最大号的,就是插入表时update此表.
    减少冲突可按以下方法来避免.
    1.因为是一条记录对应一个表,查询时就加上where
      那个表对应那条记录就where那条记录.
    2.事务执行要快速,在插入操作时再启动事务.
      对客户端的添加记录,可先录入数据,最大号码在保存操作时再自动生成加上.
      如果确实要在录入时显示最大号,可查询最大号显示(注意在录数据时不要启动事务)
      到数据录入完成,保存记录时,启动事务,再重新查询获得最大号,插入保存数据,结束事务.
      如新的最大号与原不同,再指示.
    3.几十个人不应该会死锁.
      估计是在客户端录数据时,事务一直启动而导致死锁.
     
      

  10.   

    我经常遇到此问题,就是我的SQL的内存不断增大,如何让其降下来。有没什么好的方法。
      

  11.   

    --设置 min server memory 配置项
    EXEC sp_configure N'min server memory (MB)', 0--设置 max server memory 配置项
    EXEC sp_configure N'max server memory (MB)', 256--使更新生效
    RECONFIGURE WITH OVERRIDE
      

  12.   

    我的服务器是WIN2003+SQL2005,内存一般在1G左右,一但很多人,会上升到2G左右。这样会很烦。我如果设置了限制,SQL2005的性能会不会下降