2010-01-08 6 views
1

MyISAM과 InnoDB에 대한 많은 정보를 읽으므로 사용할 유형을 결정해야합니다. InnoDB에 대한 '행 수준 잠금'지원이 항상 언급되었습니다. 물론 이는 일정한 양의 행에서만 의미가 있습니다.InnoDB 로우 레벨 잠금 성능 - 얼마나 많은 행이 있습니까?

(circa) 얼마나 될까요?

편집 : 분명히 내 질문에 잘못을 표시했습니다. 나는 테이블 락킹과 로우 락킹이 무엇을 의미하는지 알지만이 문제가 언제 궁금하다. 하루에 100 개의 행만 삽입하면 당연히 테이블 잠금이 충분히 길어질 것입니다.하지만 두 번째 당 100 개의 행을 생각해 봅시다. InnoDB가 더 나은 선택이 될 것입니다.

내 질문 : 행 잠금도 초당 10 행 또는 초당 5 행에 적합합니까? 이 선택이 성능에 중요한 영향을 미치는시기는 언제입니까?

답변

2

당신이 묻는 것은 완전히 명확하지 않습니다. 잠금을 사용하면 한 사용자 만 주어진 시간에 주어진 행을 수정하려고 시도합니다. 행 수준 잠금은 수정중인 행 하나만 잠겨 있음을 의미합니다. 일반적인 대안은 수정 기간 동안 전체 테이블을 잠그거나 테이블의 일부 서브 세트를 잠그는 것입니다. 행 수준 잠금은 단순히 행의 하위 집합을 여전히 가장 낮은 수로 줄여서 무결성을 보장합니다.

아이디어는 한 사용자가 다른 사용자가 다른 것들을 수정할 수 없도록 한 가지를 수정할 수있게하는 것입니다. 그러나 어떤 경우에는 이것이 거짓 긍정의 무엇인가 될 수 있다는 것을 주목할 가치가 있습니다. 일부 데이터베이스는 행 수준의 잠금을 지원하지만 행 수준의 잠금은 테이블의 더 큰 부분을 잠그는 데 상당히 비싸지 만 비생산적 일 수 있습니다.

편집 : 원본 게시물을 수정하면 도움이되지만 실제로는 그렇지 않습니다. 우선, 열의 크기와 관련된 하드웨어의 레벨은 엄청난 효과가 있습니다 (12 바이트 스트라이프 15K SAS 하드 드라이브에 8 바이트 행을 삽입하는 것은 단일 소비자 클래스 하드 드라이브에 1 메가 바이트 행을 삽입하는 것보다 훨씬 빠름)).

두 번째로, 이는 동시 사용자 수에 관한 것이므로 삽입 패턴이 큰 차이를 만듭니다. 오전 3시에 삽입 된 1000 개의 행은 전혀 눈치 채지 못할 것입니다. 하루 동안 균등하게 삽입 된 1000 개의 행은 조금 더 많음을 의미합니다 (그러나 아마도 조금만). 100 개의 다른 사용자가 즉시 데이터를 필요로 할 때 일괄 적으로 삽입 된 1000 개의 행은 누군가를 해고시킬 수 있습니다 (특히 100 개 중 하나가 회사의 소유자 인 경우).

+0

원본 게시물에 대한 편집 내역을 참조하십시오. – Psaniko

+0

감사합니다. 두 유형을 모두 테스트하고 어떤 것이 나를 위해 작동하는지 확인합니다. – Psaniko

0

MyISAM 테이블은 동시 삽입 (삽입을위한 테이블 잠금 없음)을 지원합니다. 따라서 기준을 충족해도 아무런 문제가 없습니다. http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html

그래서 대부분의 경우와 마찬가지로 대답은 "다릅니다"입니다. 밝은 선 검사는 없습니다. 당신 만이 결정을 내릴 수 있습니다. 우리는 귀하의 응용 프로그램/하드웨어/사용 통계/기타에 대해 아무것도 모릅니다. 정의에 따르면, 당신이하는 것보다 그것에 대해 더 많이 알 수는 없습니다.

관련 문제