A操作更新某大型表..更新占用了大型表的独占锁...B操作联合多个表..包含大型表..这将要求大型表的共享锁...但独占锁与共享锁排拆..将会等待A操作释放独占锁才能得到共享锁..

解决方案 »

  1.   

    sp_who active  --看看哪个引起的阻塞,blk
    sp_lock  --看看锁住了那个资源id,objid ,select object_name(objid) 得到
    dbcc inputbuffer(@blk) -- 看看是那个语句
      

  2.   

    1.select 加with (nolock)
    2.update 时加where的索引
    3.不管前后台,catch加commit
    4.避免2表混合调用
    5......
      

  3.   


    先不聊MSSQL的锁机制你确定IIS的机制是默认情况下同一时间内只有一个ASP页面在运行吗?
      

  4.   


       4楼的哥们,你为什么不试试呢? 写两个asp,1.asp 2.asp1.asp 内容<%
    dim i
    i=0
    Do
    i=i+1
    loop
    %>2.asp 内容<%
    response.write "hello"
    %>你先运行在浏览器里打开 1.asp 再打开 2.asp试试,试试,试试,再发言~
      

  5.   


    你去找点IIS线程模式的资料看看/
      

  6.   

    http://msdn.microsoft.com/en-us/library/ms525977.aspx或者你可以去WEB开发版去问下看看~
      

  7.   

    事实是:多用户访问时,同一时间内各个客户端运行着多个asp页面。
    某个用户的页面运行时,iis并不是把所有的表资源一次性分配给该页面,可能按时间分配给它目前需要的一部分表;
    在运行过程中,另一用户的页面也发出请求,于是也获得一部分表;
    但是继续运行下去,前一用户需要后一用户占有的某些表,而后一用户可能也需要前一用户的某些表。
    两个用户相互等待,造成死锁。
    绕口令完毕。=_=
      

  8.   

    楼上,可是我无论怎么测试,同时的确只有一个ASP在运行,  另外,什么叫“同一时间内各个客户端运行着多个asp页面”,客户端能运行ASP吗?  只有ASP运行完成,返回HTML,浏览器才能显示ASP的执行结果。
      

  9.   

    1,数据库并发这跟代码是否单线程没有关系。
    多个用户同时访问站点时,如果同时进行相同的操作,就可能引起数据库的并发.2,asp为服务器端代码,页面不打开,不代表没有进程在执行。
    就以你写的例子,或者rs.open...
    while not rs.eof
       response.write ..
    loop写个死循环。
    然后关掉 asp页。页面是关掉了,但进程却仍存在。
      

  10.   

    我并无意说什么难听的话,不过LS有人仍然相信默认情况下,
    同一时间内只有一个ASP在运行的话,大家可以多多测试一下。为什么我始终强调“默认情况”下,因为通过修改IIS的设置,是允许多个ASP同时运行的。
    修改网站所属的“应用程序池”-“性能”-“Web 园”-“最大工作进程数”的数目就可以了。我可以接受我的观点是错误的,但是事实上,如果你在什么情况下能过做到“最大工作进程数”是1的情况下,
    同时运行多个ASP,你来告诉我,我很想学习一下。
      

  11.   

    不要偷换宾语,我是说运行着多个asp机制生成的页面
    服务器并不是完全处理完一个页面后再去处理另一个页面的。
    比如两台机器可以同时打开新浪的首页,并不是必须等前一个人网页全部提交为HTML才去处理另一个人的请求,
    否则全世界人一起访问,那速度谁能忍受?
      

  12.   

    我并无意说什么难听的话,不过LS有人仍然不相信默认情况下, 
    同一时间内只有一个ASP在运行的话,大家可以多多测试一下。 为什么我始终强调“默认情况”下,因为通过修改IIS的设置,是允许多个ASP同时运行的。 
    修改网站所属的“应用程序池”-“性能”-“Web 园”-“最大工作进程数”的数目就可以了。 我可以接受我的观点是错误的,但是事实上,如果你在什么情况下能过做到“最大工作进程数”是1的情况下, 
    同时运行多个ASP,你来告诉我,我很想学习一下。
      

  13.   

    我CAO, LS的说默认情况下同时不只有一个ASP在运行  你们找出一点证据来,就像我那样子,写段代码让我心服口服的,
    否则就不要再那里没调查,满脑子自以为怎么样就不经过大脑,本来只是问个问题,
    如果你们不发言,不那么肯定自己的发言,我也不去计较,
    为什么这么多人都是通过想象中的理论就能确定一件事情呢?回14楼,新浪有很多服务器,并且服务器处理单一页面都是毫秒级的,没有你想象中的那么久,并且服务器处理静态页面和动态页面是两回事。你同时可以下载两个rar,但是你不能同时运行两个ASP,在默认情况下。回12楼,页面关掉了,的确进程也在,这能说明什么呢?就算你关掉页面,你第二个2.asp在第一个1.asp超时之前,仍然无法打开!
      

  14.   


    lz你有病啊,讨论归讨论,你bao粗口就显得你能耐了???
    既然你那么确定"默认情况下只能执行一个asp页面", 那么你在不更改iis的配置的情况下,多个人同时打开你的asp页面,同时执行操作a、操作b,然后你在用Profiler跟踪一下SQL的执行顺序及spid情况,看下结果再说,
      

  15.   

    LS的大哥们,我也晓得骂人不对啊,可是讨论来讨论去  这个项目我已经跟了很久了,勉强的解决办法我也用了。 可是我题目的核心也不过就是,ASP同时只能运行一个,怎么会出现那么多锁呢。  我也没看到什么实际的说法,老是问我确定不确定 ASP 只能同时执行一个, 却离我想要讨论的结果越来越远,我心里纳闷,你们试试不就知道ASP是不是只能同时执行一个了。   我这个帖子也在ASP区发了,结果也是同样一片质疑上面那个问题的声音。 我总觉得,大家是搞计算机的,有些东西还是可以自己证实或者测试的。  如果我说错了,明确的帮我指正一下就行了。。 你说别人老是怀疑着怀疑那,自己还不肯动手试试,唉,几个人不动火啊。 说声抱歉了,不该粗口的,LS的哥们也别跟我计较了。
      

  16.   

    >>我总觉得,大家是搞计算机的.........
    >>你说别人老是怀疑着怀疑那,自己还不肯动手试试,唉,几个人不动火啊....晕,想不到现实中真有丁谢存在
    飘过
      

  17.   

    我估计啊,程序改优化优化一下了!1.ASP的循环程序问题自己去检查检查了!或者是把代码贴出来!2.IIS的话,也有部分原因,不过很小。不知道用户的执行这些操作的时候,是否用到session?如果每个用户执行查询都必须使用session的话,也有可能造成。那只有人数很多的时候了。3.最后一个问题也是最重要的问题:SQL语句。建议使用“select 字段名1,字段名2,字段名3,字段名4 From 表”,不要使用“select * From 表”。  两者的区别在单用户查询的时候显示不出来,如果用户并发数大的话,那问题就大了,消耗的资源就不一样了!产生死锁很正常的。4.注意你的SQL语句和ASP循环语句,如果嵌套太多的话,也会消耗很大的系统资源的!
      

  18.   

    分析一下你的LZ对IIS的测试
    估计你的机器是单核的,你用循环把IIS给跑死了,那CPU全都用来算那个死循环了,当然不会来处理第二个页面,并不能说IIS是单线程的服务,只是当前没有资源让他能处理另一个线程
    你所说的死锁其实也并非是死锁,只是普通的更新锁,不要混淆概念,原因只是你写的SQL性能不好,或者是机器的性能不好
      

  19.   

    select * from table with(nolock)记住每个SQL语句的每个表,视图后面,如果只需要查询,都带上with(nolock)
      

  20.   

    行了,没办法解决,好像没人说对主题了。只好用 LOCKTIMEOUT 来解决。