INF: SQL Server에 추가된 새로운 동시성 및 일정 진단

기술 자료 번역 기술 자료 번역
기술 자료: 319892 - 이 문서가 적용되는 제품 보기.
BUG #: 102179 (SQLBUG_70)
BUG #: 356317 (SQLBUG_80)
모두 확대 | 모두 축소

이 페이지에서

요약

매우 동적인 상태를 유지하기 위해 SQL Server에는 안정성을 보장하는 여러 가지 내부 프로세스가 포함되어 있습니다. 한 가지 예는 교착 상태를 식별하고 해결하는 데 사용할 수 있는 잠금 모니터입니다.

SQL Server 7.0 서비스 팩 4( SP4) 및 SQL Server 2000 서비스 팩 3(SP3)에는 향상된 프로세스 상태 모니터링이 추가되었습니다. 상태 모니터링 기능은 다음 영역에서 향상되었습니다.

  • 블로킹
  • 네트워크 문제
  • 입력/출력(IO)
  • 메모리
  • CPU

SQL Server가 상태 문제를 발견하면 SQL Server 오류 로그에 다음과 같은 일련의 새로운 오류 메시지가 기록됩니다. 이러한 오류 메시지 조건에 대한 자세한 내용은 이 문서의 "추가 정보" 절을 참조하십시오.

SQL Server 7.0

Error 1223: Process ID %d:%d cannot acquire lock "%s" on resource %s because a potential deadlock exists on Scheduler %d for the resource. Process ID %d:%d holds a lock "%h" on this resource.

SQL Server 2000

오류 1229: 프로세스 ID %1!:%2!이(가) %3! 스케줄러 프로세스를 차단하는 리소스를 가지고 있습니다.
다음과 같은 새로운 오류 메시지가 포함됩니다.

확장된 잠금 검색: 1223, 1229
스케줄러 중지 검색: 17881, 17883
모든 스케줄러 중지 검색: 17882, 17884

경고 상태 관련 문제는 종종 이전에 발생했던 조건의 결과입니다. SQL Server 오류 로그와 시스템 이벤트 로그를 연구하여 실제 근본 원인을 신중하게 결정해야 합니다.

예를 들어, 17883 오류 메시지는 스케줄러 문제를 나타낼 수 있습니다. 그러나 오류 로그에서 SQL Server 프로세스가 양호하지 않은 상태에 잘못 남겨져 있는 이전 예외를 보여 줄 수 있거나 해당 응용 프로그램이 심각한 블로킹 조건을 일으켰을 수 있습니다.

참고 Microsoft는 최신 17883 조건을 사용하여 모든 내용을 최신 상태로 유지하려 하고 있습니다. 그러나 17883 오류 메시지는 많은 이유로 트리거될 수 있는 상태 검색 메시지입니다. Microsoft는 SQL Server 소프트웨어 제품에 알려진 문제를 해결했을 뿐만 아니라 SQL Server 소프트웨어와 관련이 없는 다양한 상황에서도 17883 오류가 발생하는 것을 확인했습니다. 예를 들어, 외부 응용 프로그램 CPU 사용과 하드웨어 오류로 인해 오류가 발생했습니다. 원하지 않는 오류가 다시 발생하지 않도록 하려면 17883 오류 메시지의 근본 원인을 확인해야 합니다.

추가 정보

이 절에서는 SQL Server 오류 로그에 기록될 수 있는 상태 향상 및 관련 오류 메시지를 설명합니다.

UMS 일정


몇 가지 추가 상태 진단을 더 잘 이해하려면 먼저 SQL Server에서 UMS(User Mode Scheduling) Ums.dll 도움말 파일을 사용하는 방법을 이해해야 합니다.

SQL Server 7.0 및 Microsoft SQL Server 2000 모두 논리 스케줄러를 사용합니다. 이러한 스케줄러를 사용하면 SQL Server가 주요 데이터베이스 작업 경로와 관련하여 운영 체제 리소스 사용을 최대화할 수 있습니다. UMS 계층을 사용하면 SQL Server가 Win32 이벤트를 올바르게 사용하여 운영 체제에 대한 스레드 및 파이버(또는 둘 모두) 일정 표시를 엄격하게 제어할 수 있습니다. 실행할 수 있는 스레드나 파이버를 엄격하게 제어함으로써 SQL Server가 잠금과 같은 데이터베이스 원본과 관련되어 있을 때 CPU 사용을 최대화할 수 있습니다.

예를 들어, 논리 일정을 사용하면 잠금 소유자가 잠금과 신호(SetEvent)를 깨울 때까지 잠금 대기자가 휴면 상태(Win32 이벤트의 WaitForSingleObject)에 있도록 할 수 있습니다.

확장된 잠금 검색


잠금 모니터가 (작업자 스레드) 리소스 수준 블로킹 시나리오를 검색하도록 확장되었습니다. 잠금을 소유하고 있는 SPID가 현재 스케줄러 대기열에 있는 경우 모든 할당된 작업자 스레드가 만들어지고 모든 할당된 작업자 스레드가 해결할 수 없는 대기 상태에 있기 때문에 SQL Server 오류 로그에 다음과 같은 오류 메시지가 기록됩니다.

SQL Server 7.0


Error 1223: Process ID %d:%d cannot acquire lock "%s" on resource %s because a potential deadlock exists on Scheduler %d for the resource. Process ID %d:% d holds a lock "%h" on this resource.

매개 변수 설명:
  1. 대기 중인 SPID
  2. 대기 중인 ECID(하위 프로세스 실행 Id)
  3. 잠금 모드 이름
  4. 리소스 이름
  5. 논리 UMS 스케줄러 Id
  6. 소유하고 있는 SPID
  7. 소유하고 있는 ECID
  8. 소유하고 있는 리소스 이름

SQL Server 2000


오류 1229: 프로세스 ID %1!:%2!이(가) %3! 스케줄러 프로세스를 차단하는 리소스를 가지고 있습니다.

매개 변수 설명:
  1. 소유하고 있는 SPID
  2. 소유하고 있는 ECID(하위 프로세스 실행 Id)
  3. 소유하고 있는 논리 UMS 스케줄러 Id

추적 플래그


SQL Server에는 이 상태 보고를 해제하는 추적 플래그가 포함되어 있습니다.

보고 동작을 해제하려면 다음 중 하나를 수행하면 됩니다.
  • 시작 매개 변수(-T###) 설정

    또는
  • DBCC traceon(###) 사용


SQL Server 7.0: -T1216

SQL Server 2000: -T1261

참고 이것은 입력 오류가 아닙니다. SQL Server 2000의 -T1216은 교착 상태 출력과 관련된 추적 플래그로 이미 사용되었으므로 대신 1261이 사용됩니다.

예제 시나리오

클라이언트 1이 SQL Server에 연결됩니다.

클라이언트 1은 트랜잭션을 시작하고 데이터 수정을 수행하는 Transact-SQL 명령을 실행합니다.

예를 들면 다음과 같습니다.
begin tran
update authors set au_lname = 'test'
클라이언트 1은 IDLE가 되며 sysprocesses 시스템 테이블에 트랜잭션이 열려 있는 상태에서 휴면 중이며 명령을 대기 중인 것으로 나타납니다.

클라이언트 2~255: 약 254개 이상의 클라이언트가 SQL Server에 로그온하고 authors 테이블에서 SELECT를 실행합니다. 이러한 클라이언트는 모두 원본 업데이트에서 차단됩니다.

클라이언트 1은 트랜잭션을 커밋하려고 시도하지만 모든 작업자 스레드가 클라이언트 2~255까지 연결되어 있기 때문에 대기열에 있게 됩니다.

블로킹


이 오류 메시지는 일반적으로 확장된 블로킹 상황을 나타냅니다. 잠금 모니터를 실행할 때마다(약 5초마다) SQL Server 오류 로그에 메시지가 추가될 수 있습니다.

참고 리소스 문제가 발생하는 각 SPID/ECID에 대해 메시지가 기록되므로 동일한 잠금 모니터 반복 동안 여러 메시지가 기록될 수 있습니다.

SQL Server는 이 상황을 자동으로 해결하지 못하지만 그에 따른 오류 메시지(1223 또는 1229)로 문제를 나타냅니다. 이 문제가 발생하면 여러 가지 방법으로 해결할 수 있습니다.

잠금 또는 쿼리 시간 제한


쿼리가 잠금 또는 쿼리 시간 제한을 사용하는 경우 시간 제한이 발생하면 일반적으로 상황이 자체적으로 해결됩니다. 그러나 이러한 상황이 응용 프로그램에서 생기는 동시성의 감소를 나타내기 때문에 상황을 검사해 볼 수 있습니다.

Transact-SQL KILL


관리자가 sysprocesses 시스템 테이블에 쿼리할 수 있는 경우 Transact-SQL KILL 명령을 사용하여 BLOCKING SPID를 종료하고 적절한 BLOCKED SPIDS를 종료하여 작업자 스레드를 확보하고 시스템을 정상 상태로 되돌릴 수 있습니다.

251004 INF: SQL Server 7.0 블로킹 모니터링 방법
271509 INF: SQL Server 2000 블로킹을 모니터링하는 방법
263889 INF: [[COMPILE]] 잠금으로 인한 SQL 블로킹


지원

sysprocesses 시스템 테이블 정보를 얻을 수 없는 경우에는 프로세스(Sqlservr.exe)의 프로세스 정보를 얻고 Microsoft SQL Server 지원 팀에 추가 검사를 문의하십시오.


병렬 쿼리


드문 경우에 이 오류 메시지는 양호하지 않은 병렬 쿼리 계획 선택으로 인해 발생할 수 있습니다. 병렬 쿼리가 많은 수의 사용 가능한 SQL Server 작업자를 사용하여 쿼리를 완료하도록 선택하는 경우 SQL Server 작업자 풀을 소모할 수 있습니다. sysprocesses 시스템 테이블에는 개별 SPID 대신 사용되는 작업자 수를 나타내기 위한 ECID 열이 포함되어 있습니다. ECID 값이 컴퓨터의 실제 CPU와 관련하여 높은 경우 일반적으로 조정이 잘못된 쿼리를 나타내는 것입니다. 쿼리 계획과 max degree of parallelism(MAXDOP) 쿼리 옵션 설정을 검토하여 문제가 되는 쿼리를 올바르게 조정하십시오.

스케줄러 문제


논리 스케줄러 문제 수. SQL Server가 시작되면 max worker thread 설정이 논리 스케줄러 간에 동일하게 나누어집니다. SQL Server에 사용할 수 있는 CPU 수가 증가하면 작업자 대기열이 더욱 세분화됩니다. 바람직하지 않은 트랜잭션 범위 작업을 보여주는 응용 프로그램에서는 더 많은 CPU가 수반될 때 리소스 부족 시나리오가 더 빨라지는 것으로 나타날 수 있습니다. 이런 종류의 시나리오에서는 응용 프로그램 트랜잭션 범위가 즉시 해결됩니다.

다음 표는 max worker threads에 대한 sp_configure 저장 프로시저 설정이 255인 경우 작업자 풀 할당이 CPU 수를 기반으로 하는 것을 보여줍니다.

표 축소표 확대
CPU 블로킹체인 길이
1255
2128
464
832
1616


max worker thread 설정은 기본값인 255로 유지하는 것이 좋습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
319942 HOWTO: 적절한 SQL Server 구성 설정 결정

UMS 스케줄러 상태


논리 스케줄러 상태를 60초마다 검사하는 새로운 내부 루틴이 추가되었습니다. 스케줄러가 멈춘 것처럼 보이거나 응답하지 않을 경우 해당 오류 메시지가 SQL Server 오류 로그에 기록됩니다. 문제가 해결될 때까지 오류는 60초마다 기록됩니다.

앞에서 설명했듯이 이러한 오류 메시지는 종종 이전 이벤트를 나타내는 것입니다. 문제의 근본 원인을 확인하려면 SQL Server 오류 로그와 응용 프로그램 이벤트 로그를 신중하게 검토하십시오.

참고: 스냅샷은 60초마다 발생하므로 120초가 지난 후에 조건을 처음 검색할 수 있습니다. SQL Server 7.0

Error: 17881 - The Scheduler %1!ld! appears to be hung. PSS 0x%2!p!, EC 0x%3!p !, UMS Context 0x%4!p!

Error: 17882 - Potential deadlocks exist on all the schedulers

추적 플래그

-T1217 시작 매개 변수를 사용하여 SQL Server 7.0을 시작하는 경우 이 두 검사는 해제할 수 있습니다.

SQL Server 2000 SP3

8.00.760 (SP3)

오류: 17883 - %1!ld! 스케줄러가 중단된 것 같습니다. SPID %2!ld!, ECID %3! ld!, UMS 컨텍스트 0x%4!p!

8.00.765

8.00.765 핫픽스에서부터 메시지가 보다 자세하게 변경되었습니다.

오류: 17883 - Process %1!ld!:%2!ld! (%3!lx!) UMS Context 0x%4!p! appears to be non-yielding on Scheduler %5!ld!

예:
2003-03-21 08:22:20.27 서버 오류: 17883, 심각도: 1, 상태: 0
2003-03-21 08:22:20.27 server Process 51:0 (dbc) UMS Context 0x018DA930 appears to be non-yielding on Scheduler 0.
2003-03-21 08:22:22.45 server Stack Signature for the dump is 0x00000000

오류: 17884 - 모든 스케줄러에 잠재적 교착 상태가 있습니다.

추적 플래그: -T1260 시작 매개 변수를 사용하여 SQL Server를 시작하는 경우 이 두 가지 검사를 실행할 수 없습니다.

SQL Server 2000 미니 덤프


SQL Server 2000 SP3에서부터 미니 덤프를 캡처하는 기능이 구현되었습니다. 빌드 8.00.765 이후의 버전에서는 SQL Server가 먼저 멈춘 스케줄러를 검색할 때 미니 덤프가 생성됩니다.

이러한 오류 메시지(17883 및 17884)에 대한 미니 덤프가 계속 생성되는 것을 방지하기 위해 기본 동작은 SQL Server 프로세스 수명 동안 단일 미니 덤프를 생성합니다. 메시지가 발생할 때마다 미니 덤프를 생성하도록 설정하려면 추적 플래그-T1262를 켜십시오.

덤프는 LOG 폴더에 생성되며 SQLDmpr###.mdmp입니다. 이 덤프는 문제의 근본 원인을 결정하기 위해 Microsoft 지원 팀에서 평가할 수 있습니다.

오류 17881 및 오류 17883

이러한 메시지는 단일 UMS 스케줄러에 응답 문제가 발생했음을 나타냅니다. 상태 모니터링은 다른 작업자가 처리하는 것을 허용하지 않는 작업자 스레드가 있는 스케줄러를 검색했으며 스케줄러는 응답하지 않는 것으로 나타납니다. 응답하지 않는 스케줄러는 일반적으로 SQL Server 제품 또는 외부 구성 요소(XProc, COM 개체 등)의 버그입니다.

다음은 알려진 17833 조건의 예입니다. 관련 문서는 Microsoft 기술 자료를 검색하십시오. 시스템에 업데이트된 패치가 필요할 경우 그에 따라 적용하십시오.

815056 FIX: 검사점 프로세스가 SQL Server 데이터베이스 작업을 지연시킬 수 있으며 스케줄러를 올바르게 생성하지 못하고 오류: 17883이 발생한다
810885 고급 디스크 하위 시스템에 오류 17883이 발생할 수 있다

근본 원인을 즉시 확인할 수 없는 경우 문제의 오류 로그를 검토하여 지속적인 지원 노력을 기울이십시오.

스케줄러가 제대로 응답하지 않으면 SQL Server의 전체 동시성이 줄어들 수 있습니다. SQL Server는 멈춘 것으로 나타나거나 응답하지 않을 수도 있습니다.

오류 17882 및 17884

이러한 메시지는 모든 UMS 스케줄러에 응답 문제가 발생했음을 나타냅니다. 이것은 SQL Server 시스템 전반의 문제이며 SQL Server가 응답하지 않는 것으로 나타납니다. 17881 및 17883 메시지와 마찬가지로 자세한 내용은 오류 로그 및 Microsoft 기술 자료를 참조하십시오. 필요할 경우 지속적인 지원 노력을 기울이십시오.



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 319892 - 마지막 검토: 2004년 7월 6일 화요일 - 수정: 6.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2000 서비스 팩 3
  • Microsoft SQL Server 7.0 서비스 팩 4
키워드:?
kberrmsg kbinfo kbbug kbfix kbsample KB319892

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com