컴퓨터에 충돌 수신자 오류가 있는 경우 이 사용자 가이드가 고객이 문제를 해결하는 데 도움이 되기를 바랍니다.
승인됨: Fortect
“트랜잭션 최근 차단됨” 오류는 정확한 프루닝 체인의 다른 세션에 의해 현재 하이재킹된 리소스를 차단하기 위해 두 개 이상의 세션이 대기할 수 있을 때 발생합니다. . 따라서 링크 sessionok에 도달할 수 없으며 SQL Server가 문제를 해결하기 위해 개입해야 합니다. 그는 세션 사람의 자동 선택을 잠금 해제하고 희생자는 다른 여러 세션을 계속할 수 있도록 당신을 죽입니다. 이 시나리오에서 특정 클라이언트는 한 번 오류 메시지를 수신합니다.
트랜잭션(프로세스 ID)은 거부 리소스에 대한 다른 프로세스로 인해 차단될 수 있으며 일반적으로 어려움 희생자로 선택됩니다. 트랜잭션을 다시 실행하십시오.
및 이 특정 종료 세션이 취소됩니다. 일반적으로 사상자는 롤백에 가장 적은 수준의 오버헤드가 필요한 세션입니다.
SQL Server가 충돌하는 이유는 무엇입니까?
이것을 이해하려면 “자원에 대한 트랜잭션(프로세스 ID)이 다른 프로세스에 끼어 교착 상태에 빠졌습니다.” 오류가 있는 이 트랜잭션을 다시 수행하십시오. 아주 간단한 예가 필요합니다.
영향으로 하나의 정수 열을 포함하는 “t2″와 함께 두 개의 테이블 “t1″을 생성합니다.
<사전> CREATE TABLE t1(int id)테이블 생성 t2(id int)
INSERT INTO t1(id)1 P 모두 연결 선택유니온 2개 모두 선택선택 3걷다t2(ID)에 삽입연결 1개 모두 선택더 많은 연결 2개 선택
이제 됐어.select는 t1에서 id = 2단계인 행을 삭제하는 트랜잭션을 시작했다고 생각합니다.
전송 시작t1 WHERE ID = 2
에서 삭제
대부분의 다른 판매가 두 테이블에서 동일한 행을 삭제한다고 가정합니다.
전송 시작삭제 t2 O ID = 2t1 WHERE ID = 2
에서 삭제
첫 번째 트랜잭션이 실제로 완료되고 테이블 t1이 비어 있을 때까지 기다려야 합니다.
그러나 새로운 첫 번째 트랜잭션이 이제 두 번째 테이블에서 해당하는 짧은 기간을 삭제할 수 있다고 가정합니다.
DELETE t2 WHERE ID = 2
이 제목 다음에 고객에게 다음과 같은 손상 메시지가 표시됩니다.
트랜잭션(프로세스 id)이 다른 전술로 시간과 에너지의 교착 상태로 인해 차단되어 교착 상태의 희생자로 선택되었습니다. 의심의 여지없이 트랜잭션을 다시 실행하십시오.
이것은 일반적으로 정의된 첫 번째 비즈니스가 다른 비즈니스(무료 t2까지)를 기다리고 있는 반면 트랜잭션도 지정된 시간 동안 일종의 원본(t1에서)을 기다리는 상황 때문입니다.
차단 다이어그램 분석 방법
블록은 어려움에 수반되는 전술과 세션을 보여주는 정보에 첨부된 블록입니다. 이렇게 하면 문제가 발생한 이유를 이해하는 데 도움이 됩니다.
sql 08 서버 이전에는 이 정보를 수집하기 위해 서버 측 얼굴 라인을 페어링하거나 검색 플래그를 활성화한 다음 중단을 고려할 때 기다려야 했습니다. SQL Server 2008부터는 문제가 더 간단해졌습니다. 획기적인 과정 “system_health”의 계획에 따라 새로운 사후 잠금 장치를 회수할 수 있습니다. 이렇게 하려면 관리> 고급 이벤트> 세션> system_health> package0.event_file로 이동하고 대상 표시를 클릭합니다. 데이터 …
수천 개의 이벤트를 야외에 표시할 수 있습니다. 창에서 반복하겠습니다. 거기에서 “xml_deadlock_report”로 표시된 제거 레코드를 찾을 수 있습니다. 방금 모델링한 것을 하나만 선택하겠습니다.
난이도 그래프를 보세요. 참조 또는 리소스 및 프로세스 섹션을 포함한 양식 세부정보(XML).
리소스 영역은 교착 상태에 있는 모든 리소스의 정확한 목록을 정렬합니다.
각 프로세스가 논쟁하고 있는 내용과 관련된 잠금 유형과 상관 관계가 있는 내용을 보여줍니다. 두 개 이상의 레코드를 반환합니다. 각 prouesse는 해당 리소스 동안 잠금을 획득할 때마다 잠금을 취한 프로세스 목록을 넣어 리소스에 대한 설명을 포함합니다. 주로 각 키, RID, 새 페이지 또는 테이블과 관련된 섹션을 착용하는 잠금.
지원 데스크가 끝나면 프로세스 섹션으로 이동하여 이러한 단계가 수행하는 작업을 알아보겠습니다.
프로세스 섹션 유형은 일반적으로 멈춘 모든 프로세스에 대한 자세한 정보를 정렬합니다.
차단에 의해서만 참여하는 스레드에 대한 섹션 항목을 통합하고 호스트 이름, 로그인, 격리 범위, 시간, 세션 매개변수 등과 같은 중요한 지침을 제공합니다. 그러나 가장 중요한 정보는 각 요청의 고독과 지금까지 교착 상태를 초래한 기능 수준입니다.
차단 피해자를 선택하는 방법
차단할 수 없는 경우 중단될 수 있을 때 어떤 프로세스가 종료되어야 하는지 지정할 수 없도록 하십시오. SQL Server는 각 세션에 대한 DEADLOCK_PRIORITY 시리즈와 트랜잭션 유형을 되돌리기 위해 SQL Server가 수행해야 하는 작업의 양이라는 두 가지 요소를 기반으로 곤경에 처한 피해자를 선택합니다.
DEADLOCK_PRIORITY 매개변수는 드라이버 a에서 HIGH, NORMAL, LOW 또는 -10에서 10까지의 정수 값으로 설정할 수 있습니다. DEADLOCK_PRIORITY는 기본적으로 NORMAL(0)로 설정됩니다. 차단 우선 순위를 설정했는지 확인하려면 다음 구문을 사용하십시오.
승인됨: Fortect
Fortect은 세계에서 가장 인기 있고 효과적인 PC 수리 도구입니다. 수백만 명의 사람들이 시스템을 빠르고 원활하며 오류 없이 실행하도록 신뢰합니다. 간단한 사용자 인터페이스와 강력한 검색 엔진을 갖춘 Fortect은 시스템 불안정 및 보안 문제부터 메모리 관리 및 성능 병목 현상에 이르기까지 광범위한 Windows 문제를 빠르게 찾아 수정합니다.
DEADLOCK_PRIORITY @deadlock_intvar <숫자 우선 순위> :: = â € ¦
설치
예를 들어, 어려움 우선 순위가 NORMAL인 세션은 다른 세션이 차단 우선 순위를 HIGH 또는 0보다 큰 정수로 설정하는 블록체인 rrn에 참여하는 경우 지정된 사람이 차단된 것으로 선택됩니다. LOW 방문에는 0보다 작은 정수 가치 콘텐츠가 있는 잠금 우선 순위가 있습니다.
LOW는 실제로 -5이고 NORMAL은 HIGH라고 합니다. e는 5입니다. 즉, 우선 순위 잠금을 NORMAL로 설정하는 명령 직후 실행:
<사전> SET DEADLOCK_PRIORITY NORMAL;이동 <사전> SET DEADLOCK_PRIORITY 0;이동
세션 차단 문제를 확인하려면 다음 쿼리를 사용할 수 있습니다.
SELECT session_id, DEADLOCK_PRIORITY FROM sys.dm_exec_sessions WHERE SESSION_ID = @@ SPID
SQL Server에서 교착 상태를 피하는 방법
개발자는 차단 위험을 낮추도록 데이터베이스 모듈을 설계해야 합니다. 다음은 몇 가지 도움이 되는 팁입니다.
특정 응용 프로그램이 특정 순서로 모든 공유 개체에 액세스하는지 확인
<테이블 가독성 데이터 테이블 = "0"><본체>
교착 상태에 대한 system_health 관리자를 확인하십시오.교착 상태 캡처로 확장된 수행 세션을 만듭니다.충돌 보고 인덱스 차트를 분석하여 문제를 찾습니다.언제 더 많이 개선하거나 차단된 요청 수를 늘릴 수 있습니까?
기본적으로 SQL Server는 롤백할 가격 트랜잭션에서 가장 낮은 가격으로 희생의 복잡성을 선택합니다. 간단히 말해서, 가장 덜 변덕스러운 자료가 가장 수익성 있는 데이터베이스로 간주됩니다. 그런 다음 가장 약한 기본 잠금을 가진 프로세스가 잠금 중 희생자이기 때문에 일반적으로 선택됩니다.
트랜잭션이 아직 활성화된(아직 할당되지 않은) 다른 결제에 의해 업데이트된 최신 기호를 업데이트하려고 할 때 어려움이 발생합니다. 이러한 오류를 방지하는 방법: 다중 사용자 데이터베이스가 실패하도록 설계된 것은 정상입니다.