2010-01-03 3 views
0

대기열 시스템에 테이블을 사용해야합니다. 테이블은 지속적으로 업데이트 될 것입니다.MySQL 또는 phpmyadmin에서 테이블을 잠글 수있는 방법은 무엇입니까?

예를 들어, 내 웹 사이트의 여러 사용자가 프로세스를 위해 파일을 추가하고 여러 사용자가 동시에 업데이트를 수행하면 테이블이 응답하지 않거나 이와 비슷한 것으로 들었습니다.

이 상황에서 잠금 테이블이 필요합니까? mysql 테이블에 잠금을 적용하려면 어떻게해야합니까?

답변

0

한 번에 여러 번 업데이트를 수행하면 교착 상태가 발생할 수 있습니다. InnoDB와 같은 엔진은이를 감지하여 트랜잭션 중 하나를 실패하게됩니다 (재 시도 할 수 있지만 전체 트랜잭션 만).

테이블 잠금으로 피할 수는 있지만 동시성은 줄어 듭니다.

MVS 나 트랜잭션을 지원하지 않는 MyISAM과 같은 엔진은 어쨌든 암시 적으로 테이블 잠금을 사용합니다. 이러한 테이블 잠금은 쿼리 기간 동안 만 존재합니다. 그들은 테이블이 더 이상 필요하지 않으면 자동으로 곧 풀려 나옵니다. (가능한 한 빨리는 아니지만 곧 가능할 것입니다.)

정말로 필요하다고 느끼지 않는 한 LOCK TABLE을 사용하지 않는 것이 좋습니다. 교 x 상태가 _ 생하면 트랜잭션을 재 시도하십시오.

1

이 상황에서 잠금 테이블이 필요합니까?

모든 테이블을 잠글 수 있으며, 특별한 유형의 테이블이 없습니다. 즉, 교착 상태에 빠졌을 때 문제를 처리합니다. Isolation levels은 밀접하게 관련된 주제이기도합니다.

어떻게 mysql 테이블에 잠금을 적용합니까? this article &이 왜 테이블을 잠글 것입니다 방법에 대해 설명 -

LOCK TABLES syntax가있다.

2

은 지속적으로 업데이트됩니다. 초당 10,000 회에 추가 될 예정입니까? 중급 서버의 경우에도 다른 사용자가 테이블을 공유 할 수있는 초당 10,000 회의 기회가 제공됩니다.

여러 종속 작업을 하나의 단위로 수행해야하는 경우 테이블을 잠그기 만하면됩니다. 대부분의 경우 일련의 작업을 데이터베이스 트랜잭션에 포함 시키면 충분합니다. "상수 업데이트"가 단지 insert sometable values (...)이면 트랜잭션 일관성을 보장하기 쉽습니다.

관련 문제