日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

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



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

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

    死鎖原因:

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

相關(guān)知識(shí):

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

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

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

下面的SQL語(yǔ)句運(yùn)行之后,便可以查找出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ù)庫(kù)死鎖的是: ‘+ CAST(@bl AS VARCHAR(10)) + ‘進(jìn)程號(hào),其執(zhí)行的SQL語(yǔ)法如下‘
else
            select ‘進(jìn)程號(hào)SPID:‘+ CAST(@spid AS VARCHAR(10))+ ‘被‘ + ‘進(jìn)程號(hào)SPID:‘+ CAST(@bl AS VARCHAR(10)) +‘阻塞,其當(dāng)前進(jìn)程執(zhí)行的SQL語(yǔ)法如下‘
DBCC INPUTBUFFER (@bl )
FETCH NEXT FROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur

exec sp_who2

4、查看當(dāng)前進(jìn)程,或死鎖進(jìn)程,并能自動(dòng)殺掉死進(jìn)程:http://www./blog/news.asp?id=363

/*--處理死鎖

查看當(dāng)前進(jìn)程,或死鎖進(jìn)程,并能自動(dòng)殺掉死進(jìn)程

因?yàn)槭轻槍?duì)死的,所以如果有死鎖進(jìn)程,只能查看死鎖進(jìn)程
當(dāng)然,你可以通過(guò)參數(shù)控制,不管有沒(méi)有死鎖,都只查看死鎖進(jìn)程

--鄒建 2004.4--*/

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

exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1, --是否殺掉死鎖的進(jìn)程,1 殺掉, 0 僅顯示
@show_spid_if_nolock bit=1 --如果沒(méi)有死鎖的進(jìn)程,是否顯示正常進(jìn)程信息,1 顯示,0 不顯示
as
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標(biāo)志,
進(jìn)程ID=spid,線程ID=kpid,塊進(jìn)程ID=blocked,數(shù)據(jù)庫(kù)ID=dbid,
數(shù)據(jù)庫(kù)名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計(jì)CPU時(shí)間=cpu,
登陸時(shí)間=login_time,打開(kāi)事務(wù)數(shù)=open_tran, 進(jìn)程狀態(tài)=status,
工作站名=hostname,應(yīng)用程序名=program_name,工作站進(jìn)程ID=hostprocess,
域名=nt_domain,網(wǎng)卡地址=net_address
into #t from(
select 標(biāo)志=‘死鎖的進(jìn)程‘,
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 標(biāo)志=‘正常的進(jìn)程‘,
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),@標(biāo)志 varchar(10)
while @i<=@count
begin
select @spid=進(jìn)程ID,@標(biāo)志=標(biāo)志 from #t where id=@i
insert #t1 exec(‘dbcc inputbuffer(‘+@spid+‘)‘)
if @標(biāo)志=‘死鎖的進(jìn)程‘ exec(‘kill ‘+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s=‘dbcc inputbuffer(‘+cast(進(jìn)程ID as varchar)+‘)‘ from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,進(jìn)程的SQL語(yǔ)句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end
go

OK,多多指教

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多