sql server 2000 차단 및 잠 금 문제 보기 및 해결 방법
1.데이터 베이스 가 막 히 는 현상:첫 번 째 연결 은 자원 을 차지 하지 않 고 두 번 째 연결 은 이 자원 을 가 져 와 야 합 니 다.첫 번 째 연결 이 제출 되 지 않 거나 스크롤 백 되 지 않 으 면 두 번 째 연결 은 첫 번 째 연결 이 이 자원 을 방출 할 때 까지 기 다 립 니 다.차단 에 있어 데이터 베 이 스 를 처리 할 수 없 기 때문에 데이터 베 이 스 를 제때에 제출 하거나 스크롤 백 해 야 합 니 다.2.데이터 베 이 스 를 잠 그 는 현상:첫 번 째 연결 은 자원 을 차지 하지 않 고 두 번 째 연결 이 차지 하 는 자원 을 얻 으 려 고 합 니 다.두 번 째 연결 은 자원 을 차지 하지 않 고 첫 번 째 연결 이 차지 하 는 자원 을 얻 으 려 고 합 니 다.서로 가 필요 로 하 는 자원 을 차지 하 는 현상 을 자물쇠 라 고 한다.잠 금,데이터베이스 처리 방법:하나의 연결 을 희생 하여 다른 연결 이 성공 적 으로 실 행 될 수 있 도록 합 니 다.
예 를 들 어 하나의 클 라 이언 트 응용 프로그램 스 레 드 는 두 개의 개방 적 인 연결 이 있다.이 스 레 드 는 비동기 로 업 무 를 시작 하고 첫 번 째 연결 에서 조 회 를 보 냅 니 다.응용 프로그램 은 나중에 다른 사 무 를 시작 하여 다른 연결 에서 조 회 를 보 내 고 결 과 를 기다 리 고 있 습 니 다.SQL Server 연 결 된 결 과 를 되 돌려 줄 때 프로그램 이 이 결 과 를 처리 하기 시작 합 니 다.응용 프로그램 은 결 과 를 생 성 하 는 조회 가 다른 연결 에서 실 행 된 조회 에 의 해 막 혀 더 이상 사용 할 수 있 는 결과 가 없 을 때 까지 이렇게 처리 합 니 다.이 때 첫 번 째 연결 이 막 혀 서 더 많은 결 과 를 무기한 으로 기다 리 고 있 습 니 다.두 번 째 연결 은 잠 금 에 막 히 지 않 았 지만 결 과 를 프로그램 에 되 돌려 주 려 고 합 니 다.그러나 응용 프로그램 이 막 혀 첫 번 째 연결 에서 결 과 를 기다 리 면 두 번 째 연결 결 과 는 처리 되 지 않 습 니 다.
다음은 sql server 2000 블록 과 잠 금 을 보고 처리 하 는 방법 입 니 다.
use master -- master
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO
/*--
, ,
, ,
, , ,
*/
/*--
exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=0, -- ,1 , 0
@show_spid_if_nolock bit=1 -- , ,1 ,0
as
set nocount on
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1), ,
ID=spid, ID=kpid, ID=blocked, ID=dbid,
=db_name(dbid), ID=uid, =loginame, CPU =cpu,
=login_time, =open_tran, =status,
=hostname, =program_name, ID=hostprocess,
=nt_domain, =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 @@rowcount=0 insert #t1(a) values(null)
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)
if @@rowcount=0 insert #t1(a) values(null)
set @i=@i+1
end
select a.*, SQL =b.EventInfo
from #t a join #t1 b on a.id=b.id
order by ID
end
set nocount off
go
Transact-SQL 을 통 해 sql server 2000 의 차단 과 잠 금 문 제 를 해결 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.