国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

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

2024-07-21 02:31:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

    前段時(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ù)思索也小小研究了一下,寫(xiě)一點(diǎn)相關(guān)知識(shí)。

    死鎖原因:

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

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

1、SQL死鎖和阻塞:http://searchdatabase.techtarget.com.cn/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.51testing.com/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.5do8.com/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),用戶(hù)ID=uid,用戶(hù)名=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,多多指教


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 和林格尔县| 炉霍县| 电白县| 嘉兴市| 大石桥市| 临邑县| 浙江省| 古蔺县| 斗六市| 南陵县| 双桥区| 隆尧县| 成都市| 汕尾市| 泰和县| 达日县| 泸水县| 赫章县| 治县。| 淳安县| 赫章县| 体育| 武安市| 太仆寺旗| 连平县| 郯城县| 山丹县| 酒泉市| 邻水| 西盟| 商南县| 大足县| 长顺县| 沈阳市| 温泉县| 靖西县| 交口县| 文成县| 绍兴县| 延边| 南昌市|