19.12. 잠금(lock) 관리

deadlock_timeout (integer)

이것은 데드록 상황인지 검사하기 전에 잠금을 대기하는 밀리초 단위의 시간이다. 데드록에 대한 검사는 상대적으로 고비용이므로 잠금을 기다릴 때마다 서버가 검사를 실행하지는 않는다. 실제 운영 중인 애플리케이션에서 데드록이 일반적이지는 않으며, 데드록 검사 전에 잠시 잠금을 기다리는 것이라고 긍정적으로 가정한다. 이 값을 늘리면 불필요한 데드록 검사를 위해 대기하는 시간이 줄어들지만 실제 데드록 에러 리포팅이 느려진다. 기본값은, 실제로 사용자가 희망하는 최소값일 가능성이 높은 1초이다(1s). 로드가 과도한 서버에서는 이 값을 올리고 싶을 것이다. 이상적으로, waiter가 데드록 검사를 결정하기 전에 잠금이 해제되는 이상한 상황을 개선하려면 이 설정은 사용자의 일반적인 트랜잭션 시간을 초과해야 한다. 슈퍼유저만 이 설정을 변경할 수 있다.

log_lock_waits가 설정된 경우 이 매개변수는 잠금 대기에 대한 로그 메시지가 발생되기 전에 기다려야 하는 시간도 결정한다. 잠금 지연을 조사하려는 사용자라면 일반적인 deadlock_timeout보다 짧게 설정할 수 있다.

max_locks_per_transaction (integer)

공유 잠금 테이블은 max_locks_per_transaction * (max_connections + max_prepared_transactions) 개체(예: 테이블)에 대한 잠금을 추적하므로 이 개체 수 이하를 언제든 잠글 수 있다. 이 매개변수는 트랜잭션별로 할당된 평균 개체 잠금 수를 제어한다. 개별 트랜잭션은 모든 트랜잭션의 잠금이 잠금 테이블에 적합한 경우에 개체를 추가로 잠글 수 있다. 이것은 잠글 수 있는 행 수는 아니다. 해당 값은 무제한이다. 기본값으로 64가 충분한 것으로 입증되었지만, 쿼리가 단일 트랜잭션으로 서로 다른 여러 가지 테이블에 액세스하는 경우라면 이 값을 늘려야 할 수도 있다(예: 자식이 다수 있는 부모 테이블에 대한 쿼리). 이 매개변수는 서버 시작 시에만 설정 가능하다.

대기 서버 실행 중에 사용자는 이 매개변수를 마스터 서버 값보다 크거나 같게 설정해야 한다. 그렇지 않으면 대기 서버에서 쿼리가 허용되지 않는다.

max_pred_locks_per_transaction (integer)

공유 예측 잠금 테이블은 max_pred_locks_per_transaction * (max_connections + max_prepared_transactions) 개체(예: 테이블)에 대한 잠금을 추적하므로 이 개체 수 이하를 언제든 잠글 수 있다. 이 매개변수는 트랜잭션별로 할당된 평균 개체 잠금 수를 제어한다. 개별 트랜잭션은 모든 트랜잭션의 잠금이 잠금 테이블에 적합한 경우에 개체를 추가로 잠글 수 있다. 이것은 잠글 수 있는 행의 수는 아니다. 해당 값은 무제한이다. 기본값으로 64가 테스트 시 충분한 것으로 입증되었지만, 클라이언트가 직렬화 가능한 트랜잭션으로 서로 다른 여러 가지 테이블에 액세스하는 경우라면 이 값을 늘려야 할 수도 있다. 이 매개변수는 서버 시작 시에만 설정 가능하다.