뇌자극2008(10장)_Deadlock.

Download Report

Transcript 뇌자극2008(10장)_Deadlock.

목
뇌를 자극하는 SQL
Server 2008
2011. 01. 05
Imagine팀 1기
Junior DBA (선명환)
차
10장. 트랜잭션과 잠금
10장. 트랜잭션과 잠금
 DEADLOCK
1. 데드락 발생 원인: 일반적으로 긴 시간 동안 실행되는 트랜잭션이나 서로 다른 트랜잭션이 같은 개체에 대해서 서로 다른 순
서에 따라서 접근하는 경우에 발생한다. 유용한 인덱스의 누락, 비효율적으로 작성된 코드, 하드웨어 병목 현상(bottleneck) 등
으로 인해 트랜잭션의 처리가 지연되면 필요 이상으로 오랜 시간 잠금이 유지된다.
2. 데드락 발생: 서로 다른 쿼리의 구문이 다른 순서대로 테이블에 접근하는 경우
- 첫번째 쿼리는 Table A를 업데이트하고 Table B를 업데이트
- 두번째 쿼리는 Table B를 업데이트하고 Table A를 업데이트
각각의 트랜잭션은 하나의 개체에 대해서 잠금을 가지고 있는 상태(첫 번째 쿼리는 Table A를, 두 번째 쿼리는 Table B)에서
상대 트랜잭션에서 가지고 있는 개체에 대한 잠금을 기다리고 있게 된다.(첫 번째 쿼리는 Table B를, 두 번째 쿼리는 Table A
에 대한 잠금을 기다리게 된다.) 이런 상태가 바로 데드락을 발생시킨다.
(1개행이영향을받음)
메시지1205, 수준13, 상태45, 줄5
트랜잭션(프로세스ID 58)이잠금리소스에서다른프로세스와의교착상태가발생하여실행이중지되었습니다.
트랜잭션을다시실행하십시오.
-2-
10장. 트랜잭션과 잠금
 DBCC TRACEON(1204, -1) 결과
LogDate
ProcessInfo
Text
2010-12-30 20:19:50.760
spid52
DBCC TRACEON 1204, server process ID (SPID) 52. This is an informational message only;
no user action is required.
2010-12-30 20:22:20.920
spid6s
Deadlock encountered .... Printing deadlock information
2010-12-30 20:22:20.920
spid6s
Wait-for graph
2010-12-30 20:22:20.920
spid6s
NULL
2010-12-30 20:22:20.920
spid6s
Node:1
2010-12-30 20:22:20.950
spid6s
RID: 15:1:78:9
CleanCnt:2 Mode:X Flags: 0x3
2010-12-30 20:22:20.950
spid6s
Grant List 0:
2010-12-30 20:22:20.950
spid6s
Owner:0x27A67BE0 Mode: X
Flg:0x40 Ref:0 Life:02000000 SPID:57 ECID:0
XactLockInfo: 0x324BB5C8
2010-12-30 20:22:20.960
spid6s
SPID: 57 ECID: 0 Statement Type: UPDATE Line #: 5
2010-12-30 20:22:20.960
spid6s
Input Buf: Language Event: -- 세션 1 BEGIN TRAN UPDATE TABLE_A SET Col1 =
Col1+2 WHERE Col2 = 10 WAITFOR DELAY '0:0:10' UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:22:20.960
spid6s
Requested by:
2010-12-30 20:22:20.960
spid6s
ResType:LockOwner Stype:'OR'Xdes:0x324BBBE8 Mode: U SPID:58 BatchID:0 ECID:0
TaskProxy:(0x3248E354) Value:0x27a678a0 Cost:(0/232)
2010-12-30 20:22:20.960
spid6s
NULL
2010-12-30 20:22:20.960
spid6s
Node:2
2010-12-30 20:22:20.960
spid6s
RID: 15:1:80:9
CleanCnt:2 Mode:X Flags: 0x3
2010-12-30 20:22:20.960
spid6s
Grant List 0:
2010-12-30 20:22:20.960
spid6s
Owner:0x27A66CE0 Mode: X
Flg:0x40 Ref:0 Life:02000000 SPID:58 ECID:0
XactLockInfo: 0x324BBC10
2010-12-30 20:22:20.960
spid6s
SPID: 58 ECID: 0 Statement Type: UPDATE Line #: 5
2010-12-30 20:22:20.960
spid6s
Input Buf: Language Event: -- 세션 2 : 세션 1 실행 후 바로 실행 BEGIN TRAN UPDATE
TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10 WAITFOR DELAY '0:0:10' UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:22:20.960
spid6s
Requested by:
2010-12-30 20:22:20.960
spid6s
ResType:LockOwner Stype:'OR'Xdes:0x324BB5A0 Mode: U SPID:57 BatchID:0 ECID:0
TaskProxy:(0x32460354) Value:0x27a66920 Cost:(0/232)
2010-12-30 20:22:21.020
spid6s
NULL
2010-12-30 20:22:21.020
spid6s
Victim Resource Owner:
2010-12-30 20:22:21.020
spid6s
ResType:LockOwner Stype:'OR'Xdes:0x324BBBE8 Mode: U SPID:58 BatchID:0 ECID:0
TaskProxy:(0x3248E354) Value:0x27a678a0 Cost:(0/232)
-3-
10장. 트랜잭션과 잠금
 DBCC TRACEON(1222, -1) 결과
LogDate
ProcessInfo
Text
2010-12-30 20:55:18.620 spid19s
deadlock-list
2010-12-30 20:55:18.620 spid19s
deadlock victim=processf4b8e8
2010-12-30 20:55:18.620 spid19s
process-list
2010-12-30 20:55:18.620 spid19s
process id=processf4b8e8 taskpriority=0 logused=232 waitresource=RID: 15:1:78:9 waittime=797 ownerId=1106001 transactionname=user_transaction
lasttranstarted=2010-12-30T20:55:12.827 XDES=0x329c48c8 lockMode=U schedulerid=1 kpid=5984 status=suspended spid=57 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2010-12-30T20:55:12.823
lastbatchcompleted=2010-12-30T20:54:46.120 lastattention=2010-12-30T20:54:25.397 clientapp=Microsoft SQL Server Management Studio - 쿼리 hostname=SUNPC hostpid=2768 loginname=SUNPC\sun
isolationlevel=read committed (2) xactid=1106001 currentdb=15 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
2010-12-30 20:55:18.620 spid19s
executionStack
2010-12-30 20:55:18.620 spid19s
frame procname=adhoc line=5 stmtstart=38 sqlhandle=0x02000000055c142e5e402ada1b9381997f62cc61f26bfd0a
2010-12-30 20:55:18.620 spid19s
UPDATE [TABLE_A] set [Col1] = [Col1]+@1 WHERE [Col2]=@2
2010-12-30 20:55:18.620 spid19s
frame procname=adhoc line=5 stmtstart=224 sqlhandle=0x02000000b3a4e22062a19b80e4acb00adbb16fb7d96fdf31
2010-12-30 20:55:18.620 spid19s
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:55:18.620 spid19s
inputbuf
2010-12-30 20:55:18.620 spid19s
-- 세션 2 : 세션 1 실행 후 바로 실행
2010-12-30 20:55:18.620 spid19s
BEGIN TRAN
2010-12-30 20:55:18.620 spid19s
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:55:18.620 spid19s
WAITFOR DELAY '0:0:5'
2010-12-30 20:55:18.620 spid19s
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:55:18.620 spid19s
process id=processf4bab0 taskpriority=0 logused=232 waitresource=RID: 15:1:80:9 waittime=2333 ownerId=1105981 transactionname=user_transaction
lasttranstarted=2010-12-30T20:55:11.293 XDES=0x329c4280 lockMode=U schedulerid=1 kpid=2996 status=suspended spid=55 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2010-12-30T20:55:11.293
lastbatchcompleted=2010-12-30T20:54:59.997 clientapp=Microsoft SQL Server Management Studio - 쿼리 hostname=SUNPC hostpid=2768 loginname=SUNPC\sun isolationlevel=read committed (2) xactid=1105981
currentdb=15 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
2010-12-30 20:55:18.620 spid19s
executionStack
2010-12-30 20:55:18.620 spid19s
frame procname=adhoc line=5 stmtstart=38 sqlhandle=0x0200000091b4e40b96d06122d79c99e95e682e272a3c1c1b
2010-12-30 20:55:18.620 spid19s
UPDATE [TABLE_B] set [Col1] = [Col1]+@1 WHERE [Col2]=@2
2010-12-30 20:55:18.620 spid19s
frame procname=adhoc line=5 stmtstart=188 sqlhandle=0x02000000ae6d461bc4a9348ba726b73f74507f3f4f071a4e
2010-12-30 20:55:18.620 spid19s
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:55:18.620 spid19s
inputbuf
2010-12-30 20:55:18.620 spid19s
-- 세션 1
2010-12-30 20:55:18.620 spid19s
BEGIN TRAN
2010-12-30 20:55:18.620 spid19s
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:55:18.620 spid19s
WAITFOR DELAY '0:0:5'
2010-12-30 20:55:18.620 spid19s
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
2010-12-30 20:55:18.620 spid19s
resource-list
2010-12-30 20:55:18.620 spid19s
ridlock fileid=1 pageid=78 dbid=15 objectname=Deadlock.dbo.TABLE_A id=lock2dc7e9c0 mode=X associatedObjectId=72057594038779904
2010-12-30 20:55:18.620 spid19s
owner-list
2010-12-30 20:55:18.620 spid19s
owner id=processf4bab0 mode=X
2010-12-30 20:55:18.620 spid19s
waiter-list
2010-12-30 20:55:18.620 spid19s
waiter id=processf4b8e8 mode=U requestType=wait
2010-12-30 20:55:18.620 spid19s
ridlock fileid=1 pageid=80 dbid=15 objectname=Deadlock.dbo.TABLE_B id=lock221fb980 mode=X associatedObjectId=72057594038845440
2010-12-30 20:55:18.620 spid19s
owner-list
2010-12-30 20:55:18.620 spid19s
owner id=processf4b8e8 mode=X
2010-12-30 20:55:18.620 spid19s
waiter-list
2010-12-30 20:55:18.620 spid19s
waiter id=processf4bab0 mode=U requestType=wait
-4-
10장. 트랜잭션과 잠금
 데드락 추적하기 (process-list)
1. process-list : 데드락에 참여하고 있는 프로세스들에 대한 정보
1) 첫 번째 프로세스
process-list
process id=processf4b8e8 taskpriority=0 logused=232 waitresource=RID: 15:1:78:9 waittime=797 ownerId=1106001 transactionname=user_transaction
lasttranstarted=2010-12-30T20:55:12.827 XDES=0x329c48c8 lockMode=U schedulerid=1 kpid=5984 status=suspended spid=57 sbid=0 ecid=0 priority=0 trancount=2
lastbatchstarted=2010-12-30T20:55:12.823 lastbatchcompleted=2010-12-30T20:54:46.120 lastattention=2010-12-30T20:54:25.397
clientapp=Microsoft SQL Server Management Studio - 쿼리 hostname=SUNPC hostpid=2768 loginname=SUNPC\sun isolationlevel=read committed (2) xactid=1106001
currentdb=15 lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
executionStack
frame procname=adhoc line=5 stmtstart=38 sqlhandle=0x02000000055c142e5e402ada1b9381997f62cc61f26bfd0a
UPDATE [TABLE_A] set [Col1] = [Col1]+@1 WHERE [Col2]=@2
frame procname=adhoc line=5 stmtstart=224 sqlhandle=0x02000000b3a4e22062a19b80e4acb00adbb16fb7d96fdf31
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
inputbuf
-- 세션 2 : 세션 1 실행 후 바로 실행
BEGIN TRAN
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
WAITFOR DELAY '0:0:5'
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
2) 두 번째 프로세스
process id=processf4bab0 taskpriority=0 logused=232 waitresource=RID: 15:1:80:9 waittime=2333 ownerId=1105981 transactionname=user_transaction
lasttranstarted=2010-12-30T20:55:11.293 XDES=0x329c4280 lockMode=U schedulerid=1 kpid=2996 status=suspended spid=55 sbid=0 ecid=0 priority=0 trancount=2
lastbatchstarted=2010-12-30T20:55:11.293 lastbatchcompleted=2010-12-30T20:54:59.997 clientapp=Microsoft SQL Server Management Studio – 쿼리
hostname=SUNPC hostpid=2768 loginname=SUNPC\sun isolationlevel=read committed (2) xactid=1105981 currentdb=15 lockTimeout=4294967295
clientoption1=671090784 clientoption2=390200
executionStack
frame procname=adhoc line=5 stmtstart=38 sqlhandle=0x0200000091b4e40b96d06122d79c99e95e682e272a3c1c1b
UPDATE [TABLE_B] set [Col1] = [Col1]+@1 WHERE [Col2]=@2
frame procname=adhoc line=5 stmtstart=188 sqlhandle=0x02000000ae6d461bc4a9348ba726b73f74507f3f4f071a4e
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
inputbuf
-- 세션 1
BEGIN TRAN
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
WAITFOR DELAY '0:0:5'
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
-5-
10장. 트랜잭션과 잠금
 항목설명 (process-list)
1. process-list : 데드락에 참여하고 있는 프로세스들에 대한 정보
항목
waitresource
설명
프로세스가 정확하게 어떤 잠금을 기다리고 있는지를 확인.
RID: 행 식별자. 테이블 내에서 행 하나를 잠글 때 사용. (데이터베이스ID 15 파일ID 1 페이지ID 78)
요청된 잠금의 유형. 해당 프로세스에서는 U라는 잠금 유형이 요청.
lockmode
S(Shared Lock): 공유잠금, X(eXclusive): 배타잠금, U(Update): 업데이트,
Sch-S(SCHema Stability): 스키마 안정성, Sch-M(SCHema Modification): 스키마 변경
spid
세션아이디, SQL서버 인스턴스 내의 세션을 구별하는데 사용할 수 있는 정보
hostname
쿼리를 실행한 클라이언트 머신 이름
loginname
쿼리를 실행한 클라이언트 로그인 이름
clientapp
쿼리를 실행한 응용 프로그램 이름
(SSMS나 쿼리분석기 같은 쿼리 실행 프로그램일 경우 쿼리를 실행한 사람에게 해당 쿼리를 다시 실행하지 않도록 요청하자.)
isolationlevel
쿼리가 실행되는 트랜잭션의 격리 수준
transactionname
user_transaction 명시적으로 트랜잭션이 선언된 범위 내에 있다는 것을 의미
procname
프로시저 이름, 저장 프로시저가 아닌 임의 쿼리(ad hoc query)가 호출되었다면 adhoc으로 표시
stmtstart
프로시저 구문시작 오프셋 (문 시작에 대한 상대적 위치)
symtend
구문끝 오프셋
line
줄번호, 데드락을 유발하는 SQL구문이 저장 프로시저에서 몇 번째 줄에 있는지 표시
(줄번호가 1인 경우 해당 SQL구문은 동적SQL의 일부)
sql_handle
sys.dm_exec_sql_text DMF를 이용하여 서버의 프로시저 캐시에 있는 SQL 구문 확인 가능.
(대부분의 경우 sql_handle 바로 아래에 데드락을 유발한 전체 sql 구문이 출력되기 때문에 별도로 DMF를 사용할 필요는 없음.)
input buffer
ad hoc SQL쿼리인 경우: 전체 쿼리 표시
저장 프로시저의 경우: 데이터베이스 ID와 개체 ID 표시
-6-
10장. 트랜잭션과 잠금
 데드락 추적하기 (resource-list)
2. resource-list : 데드락이 참여하고 있는 리소스의 목록
1) 첫 번째 리소스
resource-list
ridlock fileid=1 pageid=78 dbid=15 objectname=Deadlock.dbo.TABLE_A id=lock2dc7e9c0 mode=X associatedObjectId=72057594038779904
owner-list
owner id=processf4bab0 mode=X
waiter-list
waiter id=processf4b8e8 mode=U requestType=wait
2) 두 번째 리소스
ridlock fileid=1 pageid=80 dbid=15 objectname=Deadlock.dbo.TABLE_B id=lock221fb980 mode=X associatedObjectId=72057594038845440
owner-list
owner id=processf4b8e8 mode=X
waiter-list
waiter id=processf4bab0 mode=U requestType=wait
항목
설명
objectname
리소스 중 오브젝트의 이름
requestType
wait
새로운 잠금이 요청되었다는 것을 의미
convert
프로세스가 이미 특정 리소스에 대해서 특정 모드로 잠금을 소유하고 있는 상태에서 다른 모드로 잠금을
변경하려고 요청한 상태
예) 프로세스가 공유 잠금을 소유하고 있는 상태에서 배타잠금으로 변경하려는 경우
잠금 변환: 해당 리소스에 대해서 새로운 잠금모드와 호환되지 않는 잠금이 설정되어 있지 않은경우에만 발생 고립 수준이
repetable read인 트랜잭션 내에서 특정 행을 select한 다음에 update하려는 경우에 잠금변환이 발생
DBCC PAGE
사용전 활성화 필요: DBCC TRACEON (3604)
지정된 데이터베이스 페이지의 내용을 덤프 (DBCC PAGE (dbid, filenum, pagenum, print option))
-7-
10장. 트랜잭션과 잠금
 DEADLOCK GRAPH
owner-list
owner id=processf4b8e8 mode=X
waiter-list
waiter id=processf4bab0 mode=U
waitresource=RID: 15:1:80:9
waitresource=RID: 15:1:80:9
교착상태 피해자(deadlock victim)
-(지정 시) 교착상태 우선 순위 (DEADLOCK_PRIORITY)
-변경된 데이터 수 (롤백 작업에 대한 공수)
-프로세스의 종류 (시스템 or 사용자)
-8-
10장. 트랜잭션과 잠금
 sys.sysprocesses
1. sysprocesses : SQL Server 인스턴스에서 실행 중인 프로세스에 대한 정보를 포함합니다.
select * from master.dbo.sysprocesses where blocked <> 0 and spid <> blocked
2. sys.dm_tran_locks(Transact-SQL) : 현재 활성 상태인 잠금 관리자 리소스에 대한 정보를 반환합니다.
3. sys.dm_os_waiting_tasks(Transact-SQL) : 특정 리소스에서 대기 중인 태스크의 대기 큐에 대한 정보를 반환합니다.
DECLARE @spid bigint
select
t1.resource_type,
'database'=db_name(resource_database_id),
'blk object' = t1.resource_associated_entity_id,
t1.request_mode,
t1.request_session_id,
t2.blocking_session_id
from
sys.dm_tran_locks as t1,
sys.dm_os_waiting_tasks as t2
where
t1.lock_owner_address = t2.resource_address and
t1.request_session_id = isnull(@spid,t1.request_session_id)
-9-
10장. 트랜잭션과 잠금
 실습쿼리
-- TABLE 생성
CREATE TABLE TABLE_A(
Col1 INT NOT NULL, Col2 INT, Col3 CHAR(10))
GO
CREATE TABLE TABLE_B(
Col1 INT NOT NULL, Col2 INT, Col3 CHAR(10))
GO
-- DATA 생성
SET NOCOUNT ON
BEGIN TRANSACTION
DECLARE @i INT
SET @i = 1
WHILE(1=1)
BEGIN
INSERT INTO TABLE_A VALUES(@i,@i,REPLICATE('A',10))
INSERT INTO TABLE_B VALUES(@i,@i,REPLICATE('A',10))
IF(@i >= 1000) BREAK;
SET @i += 1;
END
COMMIT TRANSACTION
-- 추적플래그
DBCC TRACEON (1204, -1) -- 요약
DBCC TRACEOFF (1204, -1)
DBCC TRACEON (1222, -1) -- 세부적
DBCC TRACEOFF (1222, -1)
-- 세션
BEGIN TRAN
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
WAITFOR DELAY '0:0:5'
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
-- 세션: 세션실행후바로실행
BEGIN TRAN
UPDATE TABLE_B SET Col1 = Col1+2 WHERE Col2 = 10
WAITFOR DELAY '0:0:5'
UPDATE TABLE_A SET Col1 = Col1+2 WHERE Col2 = 10
--DBCC PAGE
DBCC TRACEON (3604)
DBCC PAGE (15,1,78,0) -- DBID, FILEI#, PAGEI#
DBCC TRACEOFF (3604)
- 10 -
10장. 트랜잭션과 잠금
 요약정리
1.
데드락 모니터링
1) 윈도우 성능 모니터링 이용 : 성능 카운터 사용
- 데드락 발생 횟수 확인
- 내컴퓨터  관리  성능 로그 및 경고  카운터 로그  SQLServer:Locks  Number of Deadlocks/sec
2) SQL Server 의 프로필러 이용
- 프로필러 추적속성에 Locks와 관련된 항목 선택 : TSQL_Locks
- 중요 항목 = Deadlock graph, Lock:Deadlock, Lock:DeadLock Chain (대상 DB는 필터링)
3) SQL Server 의 로그 이용
- SQL Server 로그 파일에 데드락 정보 기록 (발생시간, SPID, 데드락 유발 쿼리)
- DBCC TRACEON(1204, -1) or DBCC TRACEON(1222, -1)
- 11 -
10장. 트랜잭션과 잠금
 요약정리
2. 데드락을 줄이는 방법
1) RequestType에 따라
- wait (순환 데드락): 트랜잭션 방향을 일방 통행으로 변경
- convert (변환 데드락): 잠금 수준을 조정
2) 일반적인 방법
- 인덱스를 생성한다. (인덱스가 없으면 Lock이 걸리는 범위가 훨씬 넓어지기 때문에 교착상태가 발생하기 쉬워진다.)
- 자원들을 한쪽으로 사용한다. A와 B라는 테이블이 있다면 모든 세션에서 AB 순서로 사용하도록 한다.
- 트랜잭션은 가급적이면 짧게 만든다.
- 테이블의 크기를 작게 쪼갠다. (정규화)
- Transaction Isolation Level을 낮게 설정한다.
3. 참고
1) Deadlock Graph 이벤트 클래스 : Deadlock Graph 이벤트 클래스는 교착 상태의 XML에 대해 설명합니다.
http://msdn.microsoft.com/ko-kr/library/ms177409.aspx
2) 추적 플래그(Transact-SQL) : 추적 플래그는 특정 서버의 특성을 임시로 설정하거나 특정 동작을 중지시키는 데 사용합니다.
http://msdn.microsoft.com/ko-kr/library/ms188396.aspx
- 1204 : 교착 상태에 있는 잠금의 유형과 리소스 및 현재 영향을 받은 명령을 반환합니다. (범위: 전역에만 해당, -1)
- 1222 : 교착 상태에 있는 잠금 유형과 리소스 및 현재 영향을 받은 명령을 XSD 스키마에 맞지 않는 XML 형식으로 반환합니다.
3) sysprocesses : SQL Server 인스턴스에서 실행 중인 프로세스에 대한 정보를 포함합니다.
http://msdn.microsoft.com/ko-kr/library/ms179881(SQL.100).aspx1
4) sys.dm_tran_locks(Transact-SQL) : 현재 활성 상태인 잠금 관리자 리소스에 대한 정보를 반환합니다.
http://msdn.microsoft.com/ko-kr/library/ms190345.aspx
5) sys.dm_os_waiting_tasks(Transact-SQL) : 특정 리소스에서 대기 중인 태스크의 대기 큐에 대한 정보를 반환합니다.
http://msdn.microsoft.com/ko-kr/library/ms188743.aspx
- 12 -
Q&A
- 13 -