一个asp页面调用了很多表,产生了很多阻塞的进程,哪位好心的大哥能够帮帮小弟,给个详细点的答案,在此先谢了!!!在线等,实现立即给分!!!

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4889/4889875.xml?temp=9.478396E-02
      

  2.   

    出报表的处理一般不会要求事务完整性的, 读到脏数据来出报表也应该没有什么问题.因为报表的数据本身会随着业务的变化而变化, 一般不会要求拿到某个时间点100%准确的报表(对帐什么的除外)所以, 出报表的SELECT, 大多数都可以指定 NOLOCK, 采用不加锁的方式来取数据的.
      

  3.   

    to: zjcxc(邹建)
    出报表的处理一般不会要求事务完整性的, 读到脏数据来出报表也应该没有什么问题.因为报表的数据本身会随着业务的变化而变化, 一般不会要求拿到某个时间点100%准确的报表(对帐什么的除外)所以, 出报表的SELECT, 大多数都可以指定 NOLOCK, 采用不加锁的方式来取数据的.
    兄弟实在不知如何指定为unlock呀,能否给举个调用的例子或语句的写法!另外,您在http://community.csdn.net/Expert/topic/4889/4889875.xml?temp=9.478396E-02创建的哪个存储过程我执行了,可是sleeping进程还是存在,能否介绍下如何使用呀
      

  4.   

    select * from 表名 with (nolock)
      

  5.   

    --访问表不加锁
    select * from 表名 with (nolock)
      

  6.   

    那如果是这样:select * from 表名 where id=5 order by id 怎么写成不加锁的呀,还有如果查询的是视图,还有多表查询都应该分别怎么写呀,希望每样都给个例子,谢谢!
      

  7.   

    select * from 表名 with (nolock) where id=5 order by id
      

  8.   

    --多表查询select A.*,B.*
    from 表一 A with (nolock)
    inner join 表二 B with (nolock) on A.字段名=B.字段名
      

  9.   

    楼上的各位朋友:
    我昨天把程序改完了,但是调用那个页面时还是会出现很多的sleeping进程,慢慢的又把机器拖死了,我看了一篇文章说是在application里加上sqlca.lock='RU';sqlca.autocommit=true;然后connect;以后怎么的去做,看的不是很明白,有没有哪位大哥知道,能否说的更详细一些,谢谢!
      

  10.   

    回楼主,我不知道你的ASP有多大的访问量或事务处理.如果老是出现阻塞现像的话一定是某一模块的程序出问题,导致系统性能下降.建议先排查是否是程序出问题?是哪一块出问题?然后再想解决方案.
      

  11.   

    sleep和阻塞是两码事. 如果楼主用我的存储过程杀不掉, 那不是阻塞导致的问题.
      

  12.   

    阻塞的话, 在 master.dbo.sysprocess 表中, blocked列中的值一定有不是0的.sleep的话, 你还是可以查sysprocess表, 把状态为sleep的查出来kill掉嘛, 这个比处理阻塞更简单.
      

  13.   

    杀sleep的进程用下面的语句:declare hCForEach cursor global
    for
    select 'kill '+rtrim(spid)
    from master.dbo.sysprocesses
    where status='sleeping'
    and spid>50
    exec sp_msforeach_worker '?'
      

  14.   

    多谢zjcxc(邹建) 大版主:
    上面的语句:
    declare hCForEach cursor global
    for
    select 'kill '+rtrim(spid)
    from master.dbo.sysprocesses
    where status='sleeping'
    and spid>50
    exec sp_msforeach_worker '?'
    直接在查询分析器中执行就可以了吗?
    出现sleeping的进程是在db_lnrcsccom数据库,用户是lnrcsc205,上面的语句还用不用改改呀?
      

  15.   

    楼上的兄台能否再帮小弟最后一把,我需要循环调用上面的语句,手工执行也不是那么回事呀,因为出现sleeping的进程出现的频率太快太多了,能不能把他弄成个存储过程的让小弟也方便调用一下呀,希望大哥你不吝赐教!!!!
      

  16.   


    CREATE PROCEDURE Kill_Sleeping_SpidAS declare hCForEach cursor global
    for
    select 'kill '+rtrim(spid)
    from master.dbo.sysprocesses
    where status='sleeping'
    and spid>50
    exec sp_msforeach_worker '?'GO
    --调用exec Kill_Sleeping_Spid
      

  17.   

    sp_msforeach_worker 内部已经循环过了。
      

  18.   

    楼上的大哥:我杀完sleeping的进程后,怎么有的网页程序就不好用了呢,是不是不能随便杀呀?
      

  19.   

    因为那个网页正在使用这个进程来获取数据,
    你把这个进程kill掉后
    网页当然就会出错了。