database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 2016 게시물 읽기
No. 2016
데드락 문제!!
작성자
고세환(jd1129)
작성일
2005-06-09 10:50ⓒ
2005-06-09 10:54ⓜ
조회수
5,137

안녕하세요

초보 유저 입니다.

 

여기 잘 보고 많은 도움 받고 있습니다.

 

그런데 제가 요즘 회사에서 맡아서 하고 잇는 디비가

자꾸 데드락이 걸려서 죽습니다....

살려주세요...

흑.

 

EM 에서 보고 어떤 프로시져에서

걸리는 지는 찾았는데,

프로시져 안의 어떤 쿼리에서 나는지 확인 할 수가 없네요.

방법 아시는 분 있으시면 답변 부탁드립니다.

 

그리고 제가 프로필러를 잘 사용할 줄 몰라서요.

프로필러를 이용해서 추적을 할 수 잇다고 하는데

자세한 방법을 알고 싶습니다.

 

또..

트랜잭션을 시작해서

한 개체에 대해 잠금을 할때,

범위가 어떻게 되는지 알고 싶습니다.

테이블전체가 잠기는 건지,

적용 행에 대해서만 걸리는 건지

후우....

초보라 질문이 많네요...

몇주 째 이것땜에...

여기저기 봐도 확실히 모르겟네요...

 

진짜 마지막이요.

원인 프로시져를 보면

트랜잭션 단위 하나에

테이블 한개만 가지고 하는데

begin tran

테이블1 조작

commit tran

 

begin tran

테이블2 조작

commit tran

 

이런식으로요.

 

데드락이 걸릴 수가 잇는 건가요??

 

후우....

 

여기까지 읽어주셔서 감사합니다.

그럼 모두 수고하세요.

이 글에 대한 댓글이 총 2건 있습니다.

고세환 님이 말하신건 라이브 락이라고 합니다.

 

라이브 락 이하 락 , lock 은 사용자가 임의로 transaction 을 건

것입니다. 이러한 트랜잭션에서 commit 이나 rollback 을 빼 먹고

안적으면 sql 서버는 무한히 기다리게 됩니다.

 

DBA 는 이것을 찾아 해결해 주어야 하고,

 

또한 테이블 전체에 락이 걸립니다. update 나 delete 하는 중에

누가 그 데이터를 건드리면 안되고 count (*) 하면 틀린데이터가 나오잖아요? (transaction 이 없다면) 그러므로 락은 어디에 걸리겠어요?

 

당연히 테이블 전체에 걸립니다.

 

이것을 다른 접근방법으로 해결하는 방법은 lock 의 우선순위를 임의로 적어주거나 set lock_timeout 를 설정하는 방법이 있습니다.

 

 

sp1 sp2 가 있을때

sp1 이  begin tran tbl1 update tbl2 update

sp2 가 begin tran tbl2 update tbl1 update

동시 발생

 

둘은 어떠한 동작도 못하게 됩니다.

이것을 dead lock 이라고 합니다.

 

use master
go
create proc sp_block
-- ----------------------------------------
-- 정원혁 책 1 385 page
-- drop proc sp_block
-- 어떤 프로세스가 피터지고 있는지 보기
-- dbcc inputbuffer(spid)
-- ----------------------------------------

as

if exists(select * from sysprocesses where spid in (select blocked from sysprocesses))
 select spid,blocked,status,loginame,hostname,dbname = substring(db_name(dbid),1,10),cmd
 from sysprocesses
 where blocked <> 0
 or (spid in (select blocked from sysprocesses))
else
 print 'no one is blocked'

 

이까이꺼 기본서만 봐두 있습니다.

^--------------^

석이님이 2005-06-09 12:01에 작성한 댓글입니다.
이 댓글은 2005-06-09 12:25에 마지막으로 수정되었습니다. Edit

석이님

빠른 답변 정말로 감사합니다.

 

저도 정원혁님의 책 잘 보고 있습니다.

 

근데 라이브락 이라고 하셨는데,

 

메시지 1205가 나오면서

EM 에서 한 프로세스가 개체잠금되고

다른 여러가지가 한 놈 땜에 다 피흘리고 있습니다...

 

이게 데드락 아닌가요??

 

그래서 그 프로세스를 보면

한 프로시져 명만 나오던 군요.

그 프로시져 안의 어떤 쿼리를 실행 하다가 나는지

알 수 있는 방법이 있나요?

dbcc inputbuffer 하면 쿼리가 나오나요?

아니면 프로시져 명이 나오나요??

 

그리고 그 프로시져를 보면

교착상태 걸릴 것이 없게

한 트랜잭션당 하나의 테이블만 수정합니다.

 

이럴 경우에도 데드락(라이브락?) 이 걸릴 수 있습니까??

 

후우.. 제가 초보라서...

 

다시한번 답변 감사드립니다.

 

 

고세환(jd1129)님이 2005-06-09 16:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
2019엔터프라이즈 메니져 서버 중복등록 관련 질문 [2]
dracure
2005-06-10
2283
2018DB 복구 에러 [4]
숙이
2005-06-10
4788
2017서버 비정상종료 후 DB 가 분리되어 연결되지 않습니다. [1]
손만경
2005-06-09
3483
2016데드락 문제!! [2]
고세환
2005-06-09
5137
2015데이터 베이스가 홀라당 날라 갔어요 ㅠ.ㅠ [1]
nuno
2005-06-09
3168
2013선택월의 주만 구할 수 있는 스크립트 급구합니다. [5]
한스
2005-06-08
3331
2012[접속에러18456]접속에러 원인 좀알려줘요 [1]
이지송
2005-06-08
6367
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다