乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      數(shù)據(jù)庫死鎖導致網(wǎng)站站點訪問不了之解決方案

       小小 2006-11-12
      數(shù)據(jù)庫死鎖導致網(wǎng)站站點訪問不了之解決方案
      文章類別:數(shù)據(jù)庫技巧 | 發(fā)表日期:2006-6-15  星期四 | 文章等級:★★★★★ |



      轉自:動態(tài)網(wǎng)站制作指南 | www.

          前段時間完成了一個項目,但是現(xiàn)在該網(wǎng)站訪問不了,真是郁悶,主機重啟之后,網(wǎng)站運行正常,“狗”(google)也放了,“csdn”也帖了,沒有解決,苦惱,后來發(fā)現(xiàn)是數(shù)據(jù)庫死鎖造成的問題。 通過這個問題,我對數(shù)據(jù)庫思索也小小研究了一下,寫一點相關知識。

          死鎖原因:

       提取查詢數(shù)據(jù)相應數(shù)據(jù),修改Stat表,都是修改同一條數(shù)據(jù),進行大數(shù)據(jù)量的操作,多用戶同時操作時,造成數(shù)據(jù)庫死鎖和阻塞;

      相關知識:

      1、SQL死鎖和阻塞:http://searchdatabase./tips/275/2080775.shtml

      2、死鎖測試方法:程序中將數(shù)據(jù)庫操作,循環(huán)操作1萬次,打開多個窗口同時執(zhí)行

      3、查找數(shù)據(jù)庫死鎖原因的方法:http://www./html/57/785.html

      下面的SQL語句運行之后,便可以查找出SQLServer的死鎖和阻塞的源頭

      use master
      go
      declare @spid int,@bl int
      DECLARE s_cur CURSOR FOR
      select  0 ,blocked
      from (select * from sysprocesses where  blocked>0 ) a
      where not exists(select * from (select * from sysprocesses where  blocked>0 ) b
      where a.blocked=spid)
      union select spid,blocked from sysprocesses where  blocked>0
      OPEN s_cur
      FETCH NEXT FROM s_cur INTO @spid,@bl
      WHILE @@FETCH_STATUS = 0
      begin
      if @spid =0
                  select ‘引起數(shù)據(jù)庫死鎖的是: ‘+ CAST(@bl AS VARCHAR(10)) + ‘進程號,其執(zhí)行的SQL語法如下‘
      else
                  select ‘進程號SPID:‘+ CAST(@spid AS VARCHAR(10))+ ‘被‘ + ‘進程號SPID:‘+ CAST(@bl AS VARCHAR(10)) +‘阻塞,其當前進程執(zhí)行的SQL語法如下‘
      DBCC INPUTBUFFER (@bl )
      FETCH NEXT FROM s_cur INTO @spid,@bl
      end
      CLOSE s_cur
      DEALLOCATE s_cur

      exec sp_who2

      4、查看當前進程,或死鎖進程,并能自動殺掉死進程:http://www./blog/news.asp?id=363

      /*--處理死鎖

      查看當前進程,或死鎖進程,并能自動殺掉死進程

      因為是針對死的,所以如果有死鎖進程,只能查看死鎖進程
      當然,你可以通過參數(shù)控制,不管有沒有死鎖,都只查看死鎖進程

      --鄒建 2004.4--*/

      /*--調(diào)用示例

      exec p_lockinfo
      --*/
      create proc p_lockinfo
      @kill_lock_spid bit=1, --是否殺掉死鎖的進程,1 殺掉, 0 僅顯示
      @show_spid_if_nolock bit=1 --如果沒有死鎖的進程,是否顯示正常進程信息,1 顯示,0 不顯示
      as
      declare @count int,@s nvarchar(1000),@i int
      select id=identity(int,1,1),標志,
      進程ID=spid,線程ID=kpid,塊進程ID=blocked,數(shù)據(jù)庫ID=dbid,
      數(shù)據(jù)庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,
      登陸時間=login_time,打開事務數(shù)=open_tran, 進程狀態(tài)=status,
      工作站名=hostname,應用程序名=program_name,工作站進程ID=hostprocess,
      域名=nt_domain,網(wǎng)卡地址=net_address
      into #t from(
      select 標志=‘死鎖的進程‘,
      spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
      status,hostname,program_name,hostprocess,nt_domain,net_address,
      s1=a.spid,s2=0
      from master..sysprocesses a join (
      select blocked from master..sysprocesses group by blocked
      )b on a.spid=b.blocked where a.blocked=0
      union all
      select ‘|_犧牲品_>‘,
      spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
      status,hostname,program_name,hostprocess,nt_domain,net_address,
      s1=blocked,s2=1
      from master..sysprocesses a where blocked<>0
      )a order by s1,s2

      select @count=@@rowcount,@i=1

      if @count=0 and @show_spid_if_nolock=1
      begin
      insert #t
      select 標志=‘正常的進程‘,
      spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
      open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
      from master..sysprocesses
      set @count=@@rowcount
      end

      if @count>0
      begin
      create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
      if @kill_lock_spid=1
      begin
      declare @spid varchar(10),@標志 varchar(10)
      while @i<=@count
      begin
      select @spid=進程ID,@標志=標志 from #t where id=@i
      insert #t1 exec(‘dbcc inputbuffer(‘+@spid+‘)‘)
      if @標志=‘死鎖的進程‘ exec(‘kill ‘+@spid)
      set @i=@i+1
      end
      end
      else
      while @i<=@count
      begin
      select @s=‘dbcc inputbuffer(‘+cast(進程ID as varchar)+‘)‘ from #t where id=@i
      insert #t1 exec(@s)
      set @i=@i+1
      end
      select a.*,進程的SQL語句=b.EventInfo
      from #t a join #t1 b on a.id=b.id
      end
      go

      OK,多多指教

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多