데이터 블록 관리 모드. 통제 된 차단의 메커니즘

기구 트랜잭션 블록 DBMS에 대한 사용자 액세스 경쟁에 사용됩니다.
거래는 기본 변경이 가능하며 기반의 상태가 변경됩니다. 이것은 최소한의 변화입니다. 반 거래를 만드는 것은 불가능합니다. 트랜잭션이 완료되지 않은 경우베이스는 초기 상태로 되돌아갑니다.
트랜잭션은 데이터 배열을 캡처하기 때문에이 배열에 대한 액세스시 뉘앙스가 발생합니다. 예를 들어 하나의 트랜잭션이 데이터를 변경하고 다른 트리가 읽으려고합니다. 독서의 결과가 잘못 될 수 있습니다 최신 변경 사항은 포함되지 않습니다. 따라서 DBMS 수준에서 트랜잭션 절연이 작동합니다. 다음 절연 수준이 가능합니다.

  • 커튼을 읽었습니다 - 하나의 트랜잭션이 배열을 변경하는 동안 다른 트랜잭션은 변경할 수 없지만 읽을 수 있습니다. 낮은 수준의 격리.
  • commited read. - 한 트랜잭션이 배열을 변경하는 동안 다른 트랜잭션이 변경하지 않거나 읽을 수 없습니다.
  • 반복 가능. - 한 트랜잭션이 배열을 읽는 동안 다른 트랜잭션은 변경할 수는 없지만 읽을 수 있습니다
  • Serialaizable. - 한 트랜잭션이 배열을 읽는 동안 다른 트랜잭션은 변경하거나 읽을 수 없습니다. 모든 작업은 일관성이 있습니다. 최대 격리 수준.

구성 1C : 기업이 설치된 경우 자동 잠금 모드DBMS를 격리하는 트랜잭션이 선택됩니다. MS SQL의 경우, 반복적으로 읽기 또는 직렬화 가능 레벨이 될 것입니다. 즉, 데이터 격리가 최대 값에 가깝습니다. 이렇게하면 데이터의 정확성에 문제가 해결되지만 사용자의 집중적 인 업무 중에 DBMS 수준에서 잠금이 나타날 수 있습니다. 따라서 1C에서 : 회사는 제어 잠금 장치의 포함으로 활성화되는 잠금 장치가있는 자체 기능을 갖추고 있습니다. 이 경우 MS SQL의 트랜잭션 격리 수준이 읽습니다. 플랫폼 자체는 DBMS에 의존하지 않고 데이터를 격리합니다.

제어 된 잠금 모드의 포함은 구성 등록 정보에서 발생합니다.

또한 특정 구성 객체에 대해 잠금 모드를 설정할 수 있습니다.

전체 구성이 자동 잠금 모드가 설치된 경우, 모든 레지스터의 모든 트랜잭션은 구성 객체에 대해 설정된 모드에 관계없이 자동 모드로 자동 모드로 작동합니다. 관리가 유사한 경우 모든 트랜잭션이 관리 가능합니다. 구성이 자동으로 자동 제어되면 구성에 대한 모드가 설정으로 결정됩니다.

모드의 경우 자동 및 관리 가능은 한 지점입니다. 트랜잭션, 단일 사용자는 플랫폼 관점에서 여러 트랜잭션이 될 수 있습니다. 예를 들어, 등록 문서의 대화 형 수행은 트랜잭션 - 문서 자체의 기록 및이 트랜잭션 녹화 행 내부에 등록을위한 레지스터. 문서 자체의 잠금 관리 모드와 레지스터 이동에 따라 4 가지 상황이 가능합니다.

  1. 문서 모드 자동, 자동 모드 등록 -\u003e
  2. 문서 모드 제어, 레지스터 모드 관리 -\u003e 관리 모드에서 항목 등록
  3. 문서 모드 자동, 레지스터 모드 관리 -\u003e 자동 모드에서 레지스터 레코드
  4. 문서 모드 제어, 자동 레지스터 등록 -\u003e 예외적 인 상황 (오류)

질문 06.59 시험 1c : 플랫폼 전문가. 문서에 자동 트랜잭션 잠금 제어 모드가 있고 레지스터가 관리되는 경우 (구성 등록 정보에서 "자동 및 관리 가능"옵션)이 사용되는 경우 등록을 수행 할 때 다음과 같은 행위가 사용됩니다.

올바른 답변은 첫 번째 트랜잭션에서 두 번째로 정의됩니다. 자동이면 모든 것이 자동으로됩니다.

질문 06.60 시험 1c : 플랫폼 전문가. 문서에 제어 된 트랜잭션 잠금 제어 모드가 있고 레지스터가 자동 인 경우 (구성 등록 정보에서 "자동 및 관리 가능"옵션)이 사용되는 경우 문서를 선택하십시오.

  1. 잘못된 상황의 출현에
  2. 전체 트랜잭션이 자동으로 수행됩니다
  3. 전체 트랜잭션은 관리 모드에서 수행됩니다.

정답은 첫 번째 트랜잭션에서 처음으로 정의 된 경우, 관리되는 경우 오류가 발생합니다.

질문 06.61 시험 1C : 플랫폼 전문가. 문서에 자동 트랜잭션 잠금 제어 모드가 있고 레지스터가 관리되는 경우 (구성 등록 정보에서 "관리 가능한"옵션이 사용되는 경우)가 관리되는 경우 문서를 수행 할 때 다음과 같은 행위가 다음을 유도합니다.

  1. 잘못된 상황의 출현에
  2. 전체 트랜잭션이 자동으로 수행됩니다
  3. 전체 트랜잭션은 관리 모드에서 수행됩니다.

"1c : Enterprise"시스템을 사용하면 트랜잭션의 트랜잭션 및 제어 잠금의 자동 잠금 모드의 두 가지 작업 데이터베이스 모드를 사용할 수 있습니다.

이러한 모드의 기본 차이는 다음과 같습니다. 자동 잠금 모드는 트랜잭션의 잠금 장치를 순서대로 제어 할 수 있도록 개발자가 필요하지 않습니다. 이러한 규칙은 주어진 DBMS에서 특정 트랜잭션 격리 수준을 사용하여 1C : 엔터프라이즈 시스템 플랫폼에서 제공합니다. 이러한 작동 방식은 개발자에게 가장 간단하지만 경우에 따라 (예를 들어 많은 수의 사용자의 집중적 인 동시 작동)에서는 DBMS의 트랜잭션 분리의 입력 수준이 충분한 작업의 충분한 병렬 처리를 제공 할 수 없습니다. 사용자가 작업 할 때 많은 수의 차단 충돌 형태로 자체적으로 나타냅니다.

제어 된 잠금에서 작업 할 때 "1C : Enterprise"시스템은 DBMS에서 훨씬 낮은 수준의 트랜잭션 격리를 사용하므로 적용된 솔루션의 응용 프로그램의 병렬 처리를 크게 증가시킬 수 있습니다. 그러나 자동 잠금 모드와는 달리이 트랜잭션 격리 수준은 더 이상 트랜잭션에서 데이터 작업을위한 모든 규칙을 완수 할 수 없습니다. 따라서 관리 가능한 모드에서 작업 할 때 개발자는 트랜잭션에 설치된 잠금을 독립적으로 제어해야합니다.

자동 잠금 모드와 제어 잠금 모드에서 작동 중에 차이점의 요약에서 다음 표를 참조하십시오.

잠금 유형 절연 수준의 거래 수준
자동 차단
파일 데이터베이스 테이블 Serializable.
MS SQL Server. 기록
IBM DB2. 기록 반복적 인 읽기 또는 직렬화 가능
PostgreSQL. 테이블 Serializable.
Oracle 데이터베이스. 테이블 Serializable.
통제 된 차단
파일 데이터베이스 테이블 Serializable.
MS SQL Server. 기록 commited read.
IBM DB2. 기록 commited read.
PostgreSQL. 기록 commited read.
Oracle 데이터베이스. 기록 commited read.

구성에서 잠금 모드 설정
구성에는 속성이 있습니다. 각 구성 개체에는 또한 속성이 있습니다. 데이터 블록 관리 모드.
전체 구성 전체에 대한 데이터 차단 모드는 자동 값, 관리 (새 구성의 경우 기본값)로 설정할 수 있습니다. 자동 및 관리 가능...에 값은 각 객체에 대해 설정된 값에 관계없이 해당 잠금 모드가 모든 구성 객체에 대해 해당 잠금 모드가 사용되는 것을 의미합니다. 값 자동 및 관리 가능 해당 속성에 지정된 모드가 특정 구성 객체에 사용됩니다. 데이터 블록 관리 모드: 자동 또는 관리.
메타 데이터 객체에 지정된 데이터 차단 모드는이 객체의 데이터를 작업 할 때 "1C : Enterprise"시스템에 의해 시작되는 트랜잭션에 대해 설정됩니다 (예 : 객체 데이터를 수정할 때).
예를 들어, 개발자가 시작한 트랜잭션에서 객체 레코드 조작이 수행되면 (방법 시작 전압 ()) 데이터 잠금 제어 모드는 매개 변수 값으로 결정됩니다. 잠금 모드방법 시작 전압 (), 메타 데이터 객체의 속성 값이 아닙니다. 데이터 블록 관리 모드.
기본적으로 매개 변수입니다 잠금 모드 의미가있다 자물쇠를 섭취하십시오. 자동, 그래서
명시 적 트랜잭션에서 제어 된 잠금을 사용하려면이 매개 변수의 값을 지정해야합니다.
흔들 린 자물쇠 (이 매개 변수를 설정하면이 매개 변수를 설정하십시오구성 등록 정보의 경우 "데이터 블록 관리 모드"가 "자동 및 관리 가능") .

내장 언어로 제어 된 잠금 장치 작업
임베디드 객체는 트랜잭션의 잠금을 제어하도록 설계되었습니다. BlockingData....에 이 오브젝트의 인스턴스는 생성자를 사용하여 작성할 수 있으며 필요한 잠긴 공간 및 차단 모드를 설명 할 수 있습니다. 생성 된 모든 잠금을 설치하려면이 메소드는 () 객체를 차단하는 데 사용됩니다. BlockingData....에 이 메소드가 트랜잭션 (명시 적 또는 암시 적)에서 수행되면 잠금이 설치되고 트랜잭션의 끝이 자동으로 제거됩니다. 메소드가 차단 된 경우 () 트랜잭션 외부에서 수행되면 잠금이 설치되지 않습니다.

조건은 지정된 값의 필드 값의 평등으로 설정되거나 지정된 범위에 필드 값을 입력합니다.
조건은 두 가지 방법으로 설정할 수 있습니다.

● 필드 이름 및 값의 명시 적 사양 사용 (메소드 값 설정 () 목적 요소 블록);
● 필요한 값 (소스 객체의 속성)을 포함하는 데이터 소스를 지정하여 요소 블록).

각 차단 요소에 대해 두 개의 잠금 모드 중 하나를 지정할 수 있습니다.

● 공유
● 탁월한.

제어 된 잠금의 호환성 테이블은 다음과 같습니다.

분리 가능한 차단 모드는 현재 트랜잭션이 완료 될 때까지 차단 된 데이터를 다른 트랜잭션에 의해 변경할 수 없음을 의미합니다.
탁월한 잠금 모드는 현재 트랜잭션의 끝까지까지 다른 트랜잭션에 의해 차단 된 데이터를 변경할 수 없으며 분리 된 차단을이 데이터로 설정하는 다른 트랜잭션으로 읽을 수 없음을 의미합니다.

"자동 및 관리 가능한"모드에서의 작업 기능

잠금 관리 모드에서 작업 할 때 자동 및 관리되는 두 가지 기능을 관리해야합니다.

●이 트랜잭션에 지정된 모드와 상관없이 시스템은 적절한 관리를 설치합니다.
자물쇠.
● 잠금 제어 모드는 "상위"레벨 자체의 트랜잭션에 의해 결정됩니다. 즉, 트랜잭션 시작에 의해 다른 트랜잭션이 시작된 경우 시작 트랜잭션은 이미 실행중인 트랜잭션에 설치된 모드에서만 실행될 수 있습니다.

나열된 기능을보다 자세하게 생각해보십시오.
첫 번째 기능 트랜잭션이 자동 잠금 제어 모드로 사용되는 경우 에도이 트랜잭션의 데이터를 작성할 때 시스템이 추가적으로 설치되고 해당 제어 된 잠금 장치가 설치됩니다. 이로 인해 제어 된 잠금에서 실행되는 트랜잭션은 다음과 같습니다. 직면하는 거래와 함께,
자동 잠금 제어 모드에서 수행됩니다.
두 번째 기능 잠금 관리 모드가 구성에서 메타 데이터 객체에 대해 표시되거나 트랜잭션이 명시 적으로 지정 될 때 지정된 경우 (메서드 매개 변수로) 시작 전압 ())는 "원하는"정권 일뿐입니다. 트랜잭션이 실행될 실제 잠금 제어 모드는 트랜잭션 시작 시작에 대한이 문제가 처음 또는 이번에는 "1C : Enterprise"시스템 의이 세션에서 이미 시작되었는지 여부에 따라 다릅니다.
예를 들어 레지스터 항목을 녹화 할 때 잠금을 제어하려는 경우 문서를 수행 할 때 레지스터 항목의 녹화가 트랜잭션에 기록되므로 제어 잠금 모드가 등록 자체 및 문서에 모두 설치되어야합니다. 문서를 작성할 때 열립니다.

"1C : Enterprise"시스템을 사용하면 트랜잭션의 트랜잭션 및 제어 잠금의 자동 잠금 모드의 두 가지 데이터베이스 모드를 사용할 수 있습니다.

이러한 모드의 기본 차이는 다음과 같습니다. 자동 잠금 모드는 트랜잭션의 잠금 장치를 순서대로 제어 할 수 있도록 개발자가 필요하지 않습니다. 이러한 규칙은 주어진 DBMS에서 특정 트랜잭션 격리 수준을 사용하여 "1C : Enterprise"시스템 플랫폼에서 제공합니다. 이러한 작동 방식은 개발자에게 가장 간단하지만 경우에 따라 (예를 들어 많은 수의 사용자의 집중적 인 동시 작동)에서는 DBMS의 트랜잭션 분리의 입력 수준이 충분한 작업의 충분한 병렬 처리를 제공 할 수 없습니다. 사용자가 작업 할 때 많은 수의 차단 충돌 형태로 자체적으로 나타냅니다.

제어 된 잠금에서 작동 할 때 "1C : Enterprise"는 DBMS에서 트랜잭션을 훨씬 낮게 사용하여 적용된 솔루션의 응용 프로그램의 병렬 처리를 현저히 높일 수 있습니다. 그러나 자동 잠금 모드와는 달리이 트랜잭션 격리 수준은 더 이상 트랜잭션에서 데이터 작업을위한 모든 규칙을 완수 할 수 없습니다. 따라서 관리 가능한 모드에서 작업 할 때 개발자는 트랜잭션에 설치된 잠금을 독립적으로 제어해야합니다.

자동 잠금 모드와 제어 잠금 모드에서 작동 중에 차이점의 요약에서 다음 표를 참조하십시오.

구성에서 잠금 모드 설정

구성에는 속성 잠금 제어 모드가 있습니다. 각 구성 응용 프로그램에는 데이터 차단 모드도 있습니다.
전체 구성에 대한 데이터 차단 모드는 전체 값, 관리 (새 구성에 대한 기본값) 및 자동 및 관리 가능으로 설정할 수 있습니다. 값은 각 객체에 대해 설정된 값에 관계없이 해당 잠금 모드가 모든 구성 객체에 대해 해당 잠금 모드가 사용되는 것을 의미합니다. 값은 자동이며 제어되는 것은 해당 속성에 지정된 모드가 자동이거나 제어되는 구성 객체에 사용됩니다.
메타 데이터 객체에 지정된 데이터 차단 모드는이 객체의 데이터를 작업 할 때 "1C : Enterprise"시스템에 의해 시작되는 트랜잭션에 대해 설정됩니다 (예 : 객체 데이터를 수정할 때).
예를 들어, 개발자가 시작한 트랜잭션에서 오브젝트 레코드 동작이 수행되면, 데이터 블록 제어 모드는 차단 모드 파라미터에 의해 결정된다.
방법 데이터 차단 모드의 메타 데이터 객체의 속성의 값이 아닌 시작 전압 ().
기본적으로 차단 모드 매개 변수는 등록 된 블록의 값 을가집니다. 자동이므로
명시 적 트랜잭션에서 제어 된 잠금을 사용하려면이 매개 변수의 값을 지정해야합니다.
흔들 린 자물쇠 .. 지배.

내장 언어로 제어 된 잠금 장치 작업

내장 된 차단 언어 링크 된 개체는 트랜잭션의 잠금을 제어하도록 설계되었습니다. 이 오브젝트의 인스턴스는 생성자를 사용하여 작성할 수 있으며 필요한 잠긴 공간 및 차단 모드를 설명 할 수 있습니다. 생성 된 모든 잠금을 설치하려면이 메소드는 차단 객체를 차단하는 데 사용됩니다. 이 메소드가 트랜잭션 (명시 적 또는 암시 적)에서 수행되면 잠금이 설치되고 트랜잭션의 끝이 자동으로 제거됩니다. 메소드가 차단 된 경우 () 트랜잭션 외부에서 수행되면 잠금이 설치되지 않습니다.

조건은 지정된 값의 필드 값의 평등으로 설정되거나 지정된 범위에 필드 값을 입력합니다.
조건은 두 가지 방법으로 설정할 수 있습니다.

  • 필드 이름과 값 (요소 차단의 객체를 설정하는 방법)을 명시 적으로 지정하는 사용;
  • 필요한 값 (요소 차단의 소스 오브젝트의 속성)을 포함하는 데이터 소스의 소스를 사용합니다.

각 차단 요소에 대해 두 개의 잠금 모드 중 하나를 지정할 수 있습니다.

  • 각기 다른
  • 특별한.

제어 된 잠금의 호환성 테이블은 다음과 같습니다.

분리 가능한 차단 모드는 현재 트랜잭션이 완료 될 때까지 차단 된 데이터를 다른 트랜잭션에 의해 변경할 수 없음을 의미합니다.
탁월한 잠금 모드는 현재 트랜잭션의 끝까지까지 다른 트랜잭션에 의해 차단 된 데이터를 변경할 수 없으며 분리 된 차단을이 데이터로 설정하는 다른 트랜잭션으로 읽을 수 없음을 의미합니다.

"자동 및 관리 가능한"모드에서의 작업 기능

잠금 관리 모드에서 작업 할 때 자동 및 관리되는 두 가지 기능을 관리해야합니다.

이 트랜잭션에 대해 지정된 모드에 관계없이 시스템은 해당 관리되는 관리를 설정합니다.
자물쇠.
잠금 제어 모드는 "상위"레벨 자체의 거래에 의해 결정됩니다. 즉, 트랜잭션 시작에 의해 다른 트랜잭션이 시작된 경우 시작 트랜잭션은 이미 실행중인 트랜잭션에 설치된 모드에서만 실행될 수 있습니다.

나열된 기능을보다 자세하게 생각해보십시오.

첫 번째 기능은 트랜잭션이 자동 잠금 제어 모드로 사용되는 경우 에도이 트랜잭션의 데이터를 작성할 때 시스템이 추가적으로 설치되고 해당 제어 된 잠금이 설치됩니다. 이로 인해 제어 된 잠금에서 실행되는 트랜잭션은 자동 잠금 제어 모드에서 실행되는 트랜잭션과 충돌 할 수 있습니다.

두 번째 기능은 구성의 메타 데이터 객체에 대해 지정되거나 트랜잭션 시작 전압 ()의 매개 변수가 "원하는"모드 일 때 구성의 메타 데이터 객체에 지정된 잠금 제어 모드가 지정됩니다. 트랜잭션이 실행될 실제 잠금 제어 모드는 트랜잭션 시작 시작에 대한이 문제가 처음 또는 이번에는 "1C : Enterprise"시스템 의이 세션에서 이미 시작되었는지 여부에 따라 다릅니다.

예를 들어 레지스터 항목을 녹화 할 때 잠금을 제어하려는 경우 문서를 수행 할 때 레지스터 항목의 녹화가 트랜잭션에 기록되므로 제어 잠금 모드가 등록 자체 및 문서에 모두 설치되어야합니다. 문서를 작성할 때 열립니다.

어떻게 생겼는지 살펴 봅시다 1C의 전형적인 모노 폴리 잠금 장치.

나를 위해, 그녀는 이렇게 보입니다. 누군가 어떤 행동을 취할 것을 꺼냈다...에 다른 모든이 작업은 수행 할 수 없으며 기다리고 있습니다. 그러한 상황이 절단되고 있기 때문에, 알 필요가있다 적어도 일부 기본 이론 - 적어도 필요합니다 이해하다, 차단이 설정되면 어떤 차단이 설정됩니다. 기타

나는 네가 잘 알고 있다고 생각해 1S.있다 두 개의 잠금 모드 : 자동 및 관리.

  • 자동 모드에서 모든 것이 간단합니다.
    • 어떤 독서가 있는지끈적 끈적하다.
    • 기록 된 기록엑스.끈적 끈적하다 - 게다가 dBMS 서버에서만 잠급니다1c는 모든 자물쇠를 넣지 않습니다.
  • 훨씬 더 흥미로운 관리 모드...에 그의 주요 기능은 그 것이다 8.2 및 8.3에서는 다른 방식으로 작업을 막습니다..
    • 예를 들어, 8.2에서.당신 어떤 독서도 할 것입니다에스.-블로킹...에 또한 독서는뿐만 아니라 요청이 아닙니다. 채우기 ()뿐만 아니라 링크 .ReveVizit, 참조. 초점 () 등
    • 8.3에서.호환성 모드가 아직 없습니다 독서를위한 잠금은 아닙니다...에 따라서 8.3은 분명히 일의 병렬 처리 측면에서 승리합니다.
    • 글쎄, 그런 다음 가장 흥미로운 시작 - 예를 들어, 세트의 디자인을 위해. 읽기 ()제어 모드 8.2에서는 DBMS 서버에 S-LOCK이 있습니다 (이것은 자연스러운). 그러나 이것 외에도도 될 것입니다 서버 1C의 공유 차단그리고 이것은 나타납니다 8.2, 8.3에서...에 그리고 주요 문제는이 공유가 차단하는 것입니다. 거래가 끝날 때까지 지속될 것입니다 - 트랜잭션이 종료되지 않지만 데이터가 차단됩니다.
      따라서 권장 사항 번호는 - 읽는 데만 레코드 세트가 필요한 경우 객체 모델이 아닌 요청을 사용하는 것이 좋습니다. 그렇다면 아무것도 차단하지 않을 것입니다. 그렇다면 오래 걸리지 않습니다.
    • 당연히, 모든 데이터 변경 (녹음, 보유, 삭제)가 될 것입니다 1C 서버 및 독점 DBMS 서버에 탁월한 차단을하십시오..

눈 앞에이 테이블을 사용하면 잠금 장치가 발생할 수있는 경우에 훨씬 쉽게 이해할 수 있습니다.

제어 모드에서 잠금 기간

잠금 장치로 작업 할 때 가장 중요한 것은 제어 된 모든 차단은 항상 트랜잭션이 끝날 때까지 유지됩니다.그래서 지속 시간을 최소화하는 것이 중요합니다.

거래가 또는 끝 부분에있는 자물쇠를 넣을 곳이있는 곳이있는 경우,이 경우 예상의 위험이 훨씬 작아지기 때문에 끝에서 선택하는 것이 좋습니다.

설계 쿼리에 대해서는, (), 8.2 인 경우 쿼리를 실행 한 직후에 차단이 즉시 제거되고, 8.3 (또는 DBMS MS SQL), 읽기 커밋 된 스냅 샷 모드가 활성화 된 경우 잠금 장치가 전혀 없을 것입니다. 따라서 8.2에서 8.2 또는 8.3이있는 경우 8.2나는 모든 것에있어 모드를 켜는 것이 좋습니다읽다. 헌신적 인 스냅 사진 격리. - 어쨌든 어떤 경우에는 작업의 병렬 처리가 증가합니다.

다음은 일반적인 예입니다. 먼저 잠금을 넣고 일부 계산을 수행하고, 필수 조건이 작성되었는지 여부를 확인할 수 있으며 트랜잭션이 완료됩니다. 그런 다음 장거리 차단 시간이 있습니다. 그러나 그러한 기회가있는 경우 다르게 수행하는 것이 더 낫습니다. 먼저 모든 종류의 계산 (충전물 등을 확인)을 만들고 잠금 장치가 이미 끝에 부과됩니다. 그런 다음 차단 시간이 덜 될 것이므로 예상의 위험이 줄어들 것입니다. 따라서 트랜잭션이 끝나는 것처럼 데이터베이스에 명시 적으로 제어 된 잠금이나 데이터베이스에 들어가기를 시도하십시오.

가장 빈번한 잠금의 원인

스캔으로 요청하십시오

가장 자주 최적이 아닌 요청이있는 경우 차단이 발생하는 대기 중입니다....에 예를 들어, 문서를 수행하는 과정에서 Document의 여러 위치를 차단 한 Ivanov 사용자가 있습니다. 그리고 트랜잭션에서 스캔하라는 요청을 수행 한 Petrov 사용자가 있습니다. 그리고이 요청을 읽을 때이 요청이 Ivanov가 차단 된 명명법에서 실행 한 다음 버전 8.2 (8.3 호환 모드에서 8.2에서 8.3에서 8.2)를 사용하는 경우 기본 20 초를 기다리게됩니다. ...에 동시에, 사용자 페트로프는 기대에있을 것이며, 물론 그는 그것을 좋아하지 않을 것입니다. 이 상황을 해결하는 방법은 무엇입니까? 대답이 분명하다는 것처럼 보입니다. 요청을 다시 작성하여 추가 줄을 읽지 않도록하십시오., 그러면 모든 것이 훌륭합니다.

이 요청이 플랫폼 인 경우? 또는이 쿼리는 명백한 이유로 변경되지 않을 수있는 전형적인 구성에서 사용됩니다. 옵션은 무엇입니까?

호환성 모드를 끕니까? 사본을 테스트하고 즉시 끄면 "재미있는 주말"을 가질 수 있고 주말뿐만 아니라 할 수 있기 때문에 사본을 테스트하는 것이 더 정확합니다.

또 다른 옵션은입니다 버전 모드 사용ms. SQL. 섬기는 사람...에 DBMS 버전 버전이있는 경우, DBMS 버전이있는 경우에만 설명한 상황이 DBMS 차단기에서만 가능하다는 예약을 즉시 예약하십시오. 커밋 된 스냅 샷 격리를 켜면 MS SQL이 버전 버전으로 작동합니다. 과 귀하의 요청은 선을 차단하지 않습니다.

1C에서 "Magic Tablet",하지만 모드를 활성화합니다읽다. 헌신적 인 스냅 사진 격리. - 가장 가까운 비슷한 물건"매직 정제"...에 최소한의 조치로 데이터베이스의 기대 수를 즉시 줄일 수 있습니다. 이게 너를 위해서 여러 줄을 수행해야합니다스크린 샷에 표시됩니다 스크립트 B.ms. SQL. 섬기는 사람그리고 당신은 즉시 일의 병렬 처리가 매우 늘어납니다. 물론 1C 구성에서 관리되는 잠금 모드에 대해서만 의미가 있습니다. 자동 모드의 경우 DBMS 서버에서 RCSI 모드를 켜는 것입니다.

레지스터 부족

종종 동일한 데이터에 관해서는 누적 레지스터 및 회계 레지스터에 대한 예상치가 정확하게 발생합니다. 그러한 기대를 피하기 위해 발명되었습니다 총 분리 모드.

이 모드는 "기타"탭의 등록 등록 정보의 구성 자에 포함될 수 있습니다. "결과를 분리하십시오"...에 새 누적 레지스터를 만들 때이 확인란은 이미 기본적으로 사용하도록 설정되어 있습니다. 따라서 개발자는 데이터가 교차하는 경우 에도이 기회를 사용하는 것이 매우 편리하기 때문에 매우 편리합니다.

그러나 여기에 뉘앙스가 있습니다.이 레지스터에서 잔해를 제어 해야하는 경우이 메서드가 도움이되지 않으면 트랜잭션 작동 시간을 가속화하여 차단이 가능한 한 짧게 유지됩니다. 그러나 일반적으로 결과의 세퍼레이터를 포함시키는 것은 멋진 기회이며 그것을 사용하는 것이 매우 좋습니다. 특별한 유능한 그것을 활성화하십시오 회계 등록기의 경우거의 잔여 통제가 거의 없기 때문입니다.

전도 할 때 시퀀스의 경계를 움직입니다

문서 중에 테두리가 이동하는 순서를 사용하는 경우 잠금에 대한 기대치가 가장 가능성이 높습니다. 예를 들어, 시퀀스의 측정 값이 병렬로 일치하는 두 가지 문서는 병렬로 일치하지 않을 것입니다. 누군가가 누군가를 기다릴 것입니다.

어떡해? 너는 썼어 시퀀스 속성 "자동으로 이동하지 않음"그리고하기 규제 작업저녁에 당신은 가지고 있습니다 이 시퀀스는 움직일 것입니다...에 다음은 간단한 해결책이 있습니다. 이러한 작업을 시간에 분쇄 한 다음 당일에 대한 기대치가 없을 것입니다.

긴 거래

가능한 가장 짧은 거래를 시도하십시오.

  • 당신은 착용 모든 종류 거래를 초과하는 수표 및 계산 - 모든 항목, 모든 잠금 부과는 끝에서 수행해야합니다.
  • 어떠한 경우에도 트랜잭션의 대화 상자가 없습니다 특히 두꺼운 클라이언트가 사용되는 경우 필요하지 않습니다. 회계사가 문서를 수행 할 때 "예"와 "아니오"가있는 대화 상자가있는 그러한 사례가있었습니다. 그리고 누군가가 전화를 할 때까지 누군가를 위해 전화 할 것이라고 결정하는 동안,이 창문은이 창문을 멈추고 거래가 활성화 될 것입니다. 이에 따라 차단도 활성화됩니다. 그 시간은 매우 길어집니다. 그렇게 할 필요가 없습니다.
  • 거래 시간을 얼마나 빨리 속도를 줄 수 있습니까? 할 수있다 코드를 속도거기에서 달리고 있습니다. 속도를 높이십시오당신이 그것을하는 방법을 알고있는 경우. 이것은 즉시 성능이 급격히 증가 할 것입니다.
  • 또 다른 옵션은입니다 레지스터로 진입을 가속화하십시오...에 어떻게? 프로그래밍 방식으로 가능하고 하드웨어를 사용할 수 있습니다. 예를 들어, 일반 SSD 드라이브를 구입 한 경우 기록 속도가 자연스럽게 증가 할 것이라는 점에서 쿼리조차도 빠르게 수행됩니다. 따라서, 거래 시간도 감소 할 것이다. 이는 디스크의 한 가지 업그레이드가 잠금 문제를 해결할 수 있지만 적어도이 효과를 부드럽게 할 수 있습니다. 그렇게 눈에 띄지 않습니다.

멀티 스레드 모드에서 확대

나는 여러분의 모든 종류의 다운로드, 언로드, 문서를 통과하는 모든 종류의 데이터의 성능을 향상시키기 위해 다중 스레드를 사용하여 많은 양의 데이터의 컨볼 루션을 향상시킬 수 있기를 바랍니다. 이것은 여러 번 가속화 할 수있는 정말 강력한 기능입니다. 일단 1 억 줄이 넘는 레지스터를 최소화하고 무의미한 잔여제가 어딘가에 언로드되어야하는 데 필요한 불균일 한 잔류자가 데이터베이스에서 몇 가지 관련 기간을 남겼습니다. 이 경우에 멀티 스레드 처리를 구현하기로 결정했습니다. 결과적 으로이 스트림이 서로를 차단하기 시작했지만 데이터가 전혀 교차하지 않았지만 (각 스트림에 다른 레코더가 있음)이 있지만 차단을 기다리고있었습니다.

스트림 중 하나에서는 크고 심각한 문서 였고, 이로 인해 이끌어 냈습니다. 단계적 확대 - 언제 야 자물쇠 겹쳐졌다 테이블의 일부 행이 아닙니다 즉시 전체 테이블로...에 그리고 내 경우에, 스트림 중 하나에서 전체 테이블 전체에 차단이있었습니다.

이와 관련하여 알고리즘에 도입했습니다 보정, 그러한 문서를 고려한 것그런이의 에스컬레이션이 발생하지 않고 서로의 흐름이 차단되지 않도록 처리를 "그때"로 연기하였고, 오류가 발생하지 않았습니다.

일반적으로 1C에서 에스컬레이션이 발생하면? 대부분의 종류의 어려운 작업, 그 달의 폐쇄, 비용 계산 등 - 하나의 거대한 거래가 많은 문서를 시작하면 전체 테이블이 차단되고 아무도 일할 수 없을 수 없습니다. - 병렬 처리가 떨어집니다. 이러한 조작은 별도로 고려해야하며이를 꺼야합니다.병렬 모드에서는이를 처리 할 수 \u200b\u200b없기 때문입니다.

플랫폼 오류 - 데이터 영역 분리기를 사용할 때 잠금 장치

이 플랫폼에는 차단에 대한 과도한 기대가 발생할 수있는 몇 가지 오류가 있습니다. 예를 들어, 내가 매우 놀랐던 실수가 있습니다. 상황은 다음과 같습니다 - 우리는 기대에 대한 데이터를 수집하고 행 쿼리. 채우기 ()원칙적으로 원칙적으로 할 수없고해서는 안되는 탁월한 차단을 부과합니다. 우리가 그것을 보았을 때, 우리는 악기가 "잔치"라고 생각했습니다. 다시 한 번 데이터를 업로드했습니다. 모두 다시 확인되었습니다. 사실, 부과합니다. 이러한 오류가 플랫폼 8.3.6에 나타납니다. 읽을 때 - 쿼리를 묻는 것입니다. 채우기 () 또는 일정합니다. 위로 () - 일반적으로 읽기 - 플랫폼 데이터 분리기 인 필드에 배타적 (x) 잠금을 중첩했습니다. 그리고 평행은 즉시 떨어졌습니다. 또한, 블로킹은 정확하게 예외적이었다.

다음은 이러한 플랫폼 오류입니다.

다행스럽게도 우리를 위해 자체적으로 나타난 고객은이 데이터 분리기를 전혀 사용하지 않았으므로 단순히 구분 기호 인 표지판을 제거했습니다. 그리고 모두, 오류가 사라졌습니다. 그러나 그녀는 고정되었거나 아닙니다, 나는 아직도 모른다. 나는이 실수에 대해 1c에서 알고 있지만, 불행히도, 나는 알지 못한다고 말할 수 있습니다. 그러므로 또한 당신이 될 수도 있습니다.

플랫폼 오류 - 스캔 계산 인덱스 스캔

또한 계산 레지스터와 협력하기 위해 플랫폼의 오류에 종종 직면 해 있습니다. 성능의 관점에서 그는 많은 문제가 있기 때문에 많은 문제가 있습니다. 계산 레지스터는 클러스터 인덱스가없는 1C의 유일한 개체입니다....에 따라서 계산 레지스터에 몇 백명의 문자열을 녹음 할 때 (작은 행이 거의 없으면이 오류가 재생되지 않음) 또는 거기에서 이동을 청소하십시오 (거기에 빈 움직임 집합을 씁니다). 계산 테이블 계산 테이블 색인...에 그리고이 플랫폼 요청이므로 해결할 수 없으므로 제거 (X 잠금이 중첩되어 있음)가 있기 때문에 읽기 커밋 된 스냅 샷 모드를 포함해도 상황이 변경되지 않습니다.

결과적 으로이 문제의 해결책 및 오류 방법이 발견되었습니다. 계산 레지스터에는 클러스터 색인이 없으므로 (비 클러스터 만 있음)이 비 클러스터 인덱스는 비활성화하고 유사하지만 클러스터를 만들어야했습니다. 모두. 그 후, 색인이 사용되기 시작했고, 모든 것이 훌륭합니다. 이것은 상황의 주위의 방식입니다. ZUP가 있고 계산 레지스터에서 녹음을 병렬화하는 문제가 발생하면 사용할 수 있습니다.

계산 레지스터의 또 다른 문제점이 읽을 때 나타나고 계산 레지스터에서 데이터를 읽는 플랫폼 요청도 인덱스를 스캔합니다. 그러나 이미 읽기 커밋 된 스냅 샷을 포함 시키거나 8.3을 사용하는 경우 8.2에서 호환성 모드를 제거 할 수 있으므로이 문제가 없을 것입니다.

플랫폼 오류 -주기적인 독립 정보 등록에 병렬 녹음이 불가능합니다.

매우 오래된 실수, 1C에서도 완벽하게 알고 있지만, 그럼에도 불구하고, 그것은 여전히 \u200b\u200b고정되어 있지 않습니다 - 그것은 주기적인 독립 정보 등록에 병렬 녹음이 불가능합니다....에 다른 기간이있는 경우 (측정 값이 일치하지만 기간이 다르지만 병렬로 데이터를 녹화 할 수 있습니다. 그러나 이것은 일어나지 않아야합니다. 때문에 1C 서버에서 날짜별로 불필요한 차단...에 프로젝트 에서이 상황은 자주 발견되지 않습니다. 정보 레지스터는 매우 거의 "병목 현상"이되지 않습니다. 일반적으로 누적 레지스터로 인해 문제가 발생하거나 회계 레지스터로 인해 발생합니다. 그럼에도 불구하고, 이것을 가로 지르면 측정 기간을 만들 수 있습니다....에 예, 물론이 경우 가상 테이블이 없을 것입니다 (최신 정보를 절단하십시오.)이 정보 등록은 더 이상 형성되지 않지만, 이에도 안전하게 쓸 수 있습니다. 첫 번째 / 마지막은 모양을 할 수 있습니다.

  • 처음에, 제어 된 잠금 모드로 이동하십시오...에 나는 당신이 자동 모드를 사용하는 경우 "왜 우리가 작은 일 병렬 처리가 있는지, 왜 많은 자물쇠가 있는가?"라는 질문에 놀라지 않을 수도 있다고 생각합니다. 먼저 관리 모드로 이동하여 문제가있는 경우 문제가 남아있을 경우 계속 이해할 수 있습니다.
  • 제어 된 잠금 모드로 구성을 전송하면 dBMS 모드를 켜야합니다읽다. 헌신적 인 스냅 사진 격리....에 직접적으로해야 할 일은 직접해야합니다. 일의 병렬 처리가 급격히 증가 할 것입니다.
  • 레지스터에 대한 결과 구분 기호를 사용하십시오...에 잔여 통제가없는 곳에서는 기대치가 없음을 포함시킬 필요가 있습니다.
  • 레코드를 설정하십시오. 위 () - 전혀 시도하십시오 읽지 않기 위해서트랜잭션이 끝날 때까지 "hang"을 "hang"으로 겹쳐 올릴 수 없으므로. 왜 필요합니까? 이러한 요청을 읽으십시오. 호환성 모드가없는 8.3이 있거나 읽기 커밋 된 스냅 샷 모드가 활성화 된 경우 잠금이 전혀 없을 것입니다.
  • 시퀀스의 테두리 정보 - 또한 기본값을 취함 국경은 몇 시간 만에 규제 작업 만 이동합니다....에 이동하지 않을 때.
  • 몇 가지를 공유하는 대규모 거래...에 한 트랜잭션에서 백만 개의 문서를 소비하는 것, 100 개의 문서의 작은 거래를 만드는 것이 더 낫습니다. 멀티 스레드 모드에서 1000 개의 문서가 더 좋습니다. 그것은 더 안정적 일 것입니다.
  • 모든 종류 계산, 검사 기타 거래를 벗어나십시오...에 거래 시간은 가능한 한 작게 최소한이어야합니다.

차단 문제 해결의 예

불필요한 기대를 어떻게 제거 할 수 있습니까?

근무일 종료 후 (저녁 6시) 데이터베이스에 문서를 보내는 영업 담당자가 있다고 가정 해보십시오. 그리고 거기 에서이 문서가 모바일 인터넷을 통해 이루어 지 자마자 즉시 부팅하고 지출하려고합니다. 결과적으로 판매 담당자가 동일한 창고에서 동일한 제품을 주문한 경우 동일한 데이터로 변환하기 때문에 기대가 있습니다. 그리고 균형을 제어하기 때문에 세퍼레이터는 기다려야 할 사람이 누군가를 돕지 않습니다. ...에

어떻게 이것을 피할 수 있습니까? 할 수있다 문서를 생성 할 문서를 다운로드 할 때 수행하지 않음, 그리고 메커니즘을 작성하십시오, 예를 들어, 구현하다 이것은 더 나아졌습니다 보유 멀티 스레드 모드에서각 스레드는 창고에 문서를 저장합니다. 이러한 프로세스를 보급하십시오. 첫 번째 스트림은 하나의 창고, 두 번째 스트림의 문서를 두 번째 창고 등에 수행합니다. 그런 다음 문제가 해결됩니다.

잠금 장치 및 장비

차단은 장비에 어떤 영향을 미칩니 까? 차단 문제에 직면 해있는 경우 새 서버를 구입할 수 있습니다. 물론, 당신은 시도 할 수 있지만 뿌리는 아직도 아무것도 바꾸지 않습니다. 예, 트랜잭션이 더 빨라지면 쿼리가 더 빨리됩니다. 그러나 자신 잠금 문제 그녀 때문에 남아있을 것입니다 코드 레벨에서만 해결할 수 있습니다.

차단 최적화는 장비에 어떻게 영향을 미칩니 까? 예를 들어, 관리 할 수 \u200b\u200b있거나 촬영 및 읽기 committed 스냅 샷을 켤로 켰습니다. 시스템이 기다리는 동안, 그녀. 장비 이 경우 사용하지 않습니다 게으른...에 과 자마자귀하의 시스템은 전체 용량으로 획득했습니다. 기대가 없어즉시 날카로운 증가가 있습니다. 그리고 그 순간에있는 어떤 상태에 따라, 그것은 중요 할 수 있습니다. 예를 들어 서버가 80 %로로드 된 경우 잠금을 제거하면 전혀 "거짓말"할 수 있습니다. 고려해야 할 필요가 있습니다.

여기서, 요청 최적화 -회전, 로딩을 줄입니다따라서 최적화를 수행하는 경우 잠금을 제거하는 것이 좋으며 요청을 최적화 할 수 있습니다.

블록 분석 도구

결론적으로, 나는 보여주고 싶다 당신과 함께있는 도구 실시간으로 현재 시스템에서 현재 차단 된 데이터를 볼 수 있습니다..

관리되는 잠금으로 전환하는 주된 이유 :

  • 주된 이유는 1C 권장 사항입니다. 독서 또는 1c의 전문가 : PC
  • 사용자의 병렬 작동 문제 ()
  • Oracle, PostgreSQL 및.

작업 비용 :

통제 된 차단의 본질

자동 잠금 제어 모드에서 작업 할 때 1c : 회사는 DBMS 수준에서 트랜잭션에서 높은 수준의 데이터 격리를 설정합니다. 이를 통해 적용된 개발자가 특별한 노력없이 비 - 전체 론적 또는 부정확 한 데이터를 얻을 수있는 가능성을 완전히 제거 할 수 있습니다.

이는 적은 수의 활성 사용자와의 편리하고 올바른 접근 방식입니다. 개발의 용이성의 가격은 DBMS 수준에서 일정량의 중복 차단이 가능합니다. 이러한 잠금 장치는 DBMS 자체의 잠금 메커니즘 구현의 기능과 연관되어 있으므로 DBMS가 메타 데이터 객체 1C의 물리적 의미 및 구조를 고려하거나 고려하지 않도록합니다.

자원 (많은 수의 사용자)에 대한 높은 경쟁으로 작업 할 때 (많은 수), 블로킹 감소의 효과는 병렬 모드로 성능의 관점에서 눈에 띄게됩니다.

구성이 제어 모드로 변환 된 후 선택 사양 인 "잠금 관리자"및 데이터의 무결성을 통한 제어가 DBMS 측면에서 활성화되지만 서버 (1c)의 측면에서는 이제는 활성화된다. 이렇게하면 1C 서버의 철 (더 빠른 프로세서 및 더 많은 메모리가 필요함)의로드가 증가하고 실제로 작은 둔화 (몇 퍼센트)를 만들지 만 잠금 장치가있는 상황이 훨씬 향상됩니다 (객체에 막히는 블록이 적기 때문에 테이블의 조합, 블록 영역이 적지 않으며 경우에 따라 수명이 덜 수명 리프팅, 즉 거래의 끝까지가 아닙니다). 이 때문에 전체 병렬 처리가 향상됩니다.


새로운 1C 구성은 즉시 관리 가능한 모드로 구현됩니다.

  • 질문 : 먼저 감사를 만들고 UB로 전송할 수 있습니까?

답변 : 당신은 감사원이 통제 된 자물쇠로 번역의 타당성에 대한 추가적인 실화로 사용되며 전체 둔화를 통해 자동 잠금의 기여도를 평가하고 번역 이외의 다른 노력이 필요한지 여부를 평가할 수 있습니다.

  • 질문 : UB로 전송하려면 Access-RDP, TeamViewer를 제공 할 정확히 무엇을 제공합니까? 또는 파일 구성을 보낼 수 있습니까?

답변 : 하나의 특정 원격 액세스 기술을 제한하지 않으려 고 노력하고 있습니다. 원격 액세스 기술...에 그것이 당신을 위해 중요하지 않으면 실용적인 RDP.
우리는 보낸 구성 파일에 의한 최적화를 수행 할 수 있지만 실제 데이터를 디버깅 할 수 없으며 테스트에주의를 기울여야합니다. 우리가 기본 복사본에서 최적화를 수행하면 작업의 결과를 제공하기 전에 우리는 신중하게 테스트 할 수 있습니다.

  • 질문 : 우리는 매일 컨퍼런스에서 무언가를 바꾸는 10 개의 일반 프로그래머가 있습니다. 일반 구성 저장소 "를 사용했습니다. UB로 전송할 때 상호 작용은 어떻게 구성됩니까? 또는 모든 프로그래머는 휴가 중에 전송해야합니까?

답변 : 규칙적으로 우리의 변화는 며칠 이내에 이루어집니다. 나머지 시간은 정의 된 비즈니스의 필수 논리가 기술적 인 고려 사항이 아닌 등록을 포함하여 변경된 변경 사항을 테스트하는 것입니다. 우리 우리는 별도의 구성 파일을 변경할 수 있습니다. cf, 그리고 귀하의 프로그래머가 저장소에서 활성화됩니다. 휴가를 보내면 누구나 보낼 수 없습니다...에 다른 상호 작용 옵션에서는 개발자를 캡처 할 계획이므로 모든 작업 계획을 세우고 양 당사자에게 편리하게 수행 할 계획이 있습니다. 일반적으로 개발자가 필요하지 않은 전체 구성을 캡처하거나 "스티어링 휠"을 제공합니다.



주제에 관한 기사 :