2010-08-01 3 views
2

이 페이지는 "해시 액세스 방법의 경우 단일 잠금 개체 만 필요합니다."라고 말합니다. Berkeley DB : 해시 액세스 방법의 잠금 개체 수

http://www.oracle.com/technology/documentation/berkeley-db/db/programmer_reference/lock_max.html

이 데이터베이스에 액세스하는 모든 프로세스/스레드가 동일한 잠금 개체를 고정하려고 것을 의미합니까? 매우 높은 잠금 경합을 일으키지 않습니까?

감사합니다.

--Michi

답변

2

무엇 여기에서 설명하는 것하는 것은 기본 잠금 객체 구성 (1000)는 일반적으로 충분하지만, 응용 프로그램에 필요한 잠금 개체의 수를 계산하는 방법이다. 단일 데이터 액세스 조작에 필요한 잠금 오브젝트 수를 설명하므로 동시 데이터 액세스 조작 수를 곱하고 잠금 오브젝트 수를 적절하게 구성 할 수 있습니다. 그것은 정말로 잠금 경합을 말하는 것이 아닙니다.

해시 액세스 방법의 경우 지정된 키 값이 해시 버킷에 직접 매핑됩니다. 데이터에 도달하려면 보거나 잠글 필요가있는 페이지가 하나뿐입니다. 이는 Btree (데이터를 가져 오기 위해 내부 인덱스 노드를 탐색해야 함)와 Queue (각 레코드와 레코드가 상주하는 페이지를 잠글 필요가 있음)와는 다릅니다.

각 데이터베이스 작업이

  • 하나의 잠금을 필요로 할 것입니다 : 퍼팅의 간단한 방법이 될 것이다 그래야 최근의 버전에서는

    는 우리가 실제로 필요하지 않은 일부 잠금을 제거했습니다 페이지 (BTREE 해시 또는 RECNO) 액세스되는 또는 기록 (큐)에 대한 메타 데이터 페이지

  • 더한 로크 대상,
  • 더한 로크 대상 경우 BTREE PA 개체 큐는 기본적으로

, 데이터 액세스 당 일반적으로 2 ~ 3 잠금 개체를 사용하는 경우 GE의 분할은

  • 플러스 하나의 잠금 객체 페이지 당이 필요합니다. 트랜잭션은 트랜잭션이 완료 될 때까지 잠금 오브젝트를 누적하므로 응용 프로그램의 트랜잭션이 일반적으로 10 개의 레코드에 액세스하는 경우 해당 트랜잭션에는 20-30 개의 잠금 오브젝트가 필요합니다. 응용 프로그램에서 최대 10 개의 동시 스레드를 가질 수 있다면 시스템이 약 300 개의 잠금 오브젝트를 갖도록 구성해야합니다. 당신이 필요로하는 것 이상으로 구성하는 것이 항상 더 낫다. 그래서 당신이 고갈하지 않고 잠금 객체를 너무 많이 할당하는 것의 메모리 오버 헤드는 최소이다 (그것들은 작은 구조 임).

    도움이 되었기를 바랍니다.

    데이브

  • 관련 문제