2009-04-29 4 views
1

데이터베이스에서 여러 스레드로 작업하는 것이 새로운 편입니다. 대부분의 경력이 프론트 엔드에 소요되었습니다.JMeter를 사용한 웹 애플리케이션의 동시성 및/또는 트랜잭션 무결성 테스트

오늘 테이블 잠금을 사용하여 트랜잭션을 에뮬레이트하는 ISAM 테이블을 사용하여 mysql db에 값을 저장하는 간단한 PHP 애플리케이션을 테스트 해 보았습니다. 내 결과에서

Testing With JMeter

내 간단한 PHP 응용 프로그램 내 CSV 파일이 인의 데이터에서 본 (그대로 트랜잭션 무결성을 유지하기 위해 나타납니다

난 그냥 여기 절차의 블로그 게시글 작성

CSV 파일 :

alt csv for alalt csv for bl

I 0)를 데이터베이스로부터 추출 다시 데이터와 동일한 JMeter를 테스트 실행 후 두 사용자의 데이터

검색어 :

alt alt

는 트랜잭션 데이터의 무결성이 손상되지 않은 것을 바로 내 가정에서 I를 있습니까?

동시성 테스트 방법은 무엇입니까?

답변

2

왜 InnoDB를 사용하지 않고 수동 테이블 잠금없이 동일한 효과를 얻으시겠습니까?

또한 무엇을 방지하고 있습니까? 고려 두 사용자 (빌과 스티브) :

  1. 빌로드 기록 1234
  2. 스티브로드 기록 1234
  3. 스티브는 그 오래된 기록을 갱신, 기록 1234 변경 및
  4. 빌 조금 기다립니다 제출 1234 제출. 이 변화는 Bill을 망칩니다.

테이블 잠금은 기본 MyISAM 테이블 잠금보다 높은 데이터 무결성을 제공하지 않습니다. MyISAM은 데이터 손상을 막을 필요가있을 때 테이블 파일을 기본적으로 잠글 것입니다.

사실 MyISAM을 통해 InnoDB를 사용하는 이유는 테이블 잠금 대신 행 잠금을 수행한다는 것입니다. 또한 트랜잭션을 지원합니다. 다른 레코드에 대한 여러 업데이트는 서로를 차단하지 않으며 여러 레코드에 대한 복잡한 업데이트는 트랜잭션이 완료 될 때까지 차단됩니다.

동일한 레코드에 대한 두 개의 업데이트가 동시에 적용될 가능성을 고려해야합니다. 가능성이 있다면 테이블/행 잠금은 두 번째 업데이트를 차단하지 않으며 첫 번째 업데이트가 완료 될 때까지 연기합니다. 내가 기억하는 바로는

편집

은의 MyISAM은 삽입을위한 특별한 행동을 가지고있다. 그것은 테이블 끝에 추가하는 것만 큼 삽입을 위해 테이블을 잠그지 않아도됩니다. 고유 색인 또는 비 자동 증가 기본 키가있는 테이블의 경우에는 그렇지 않을 수 있습니다.

+0

음, 재미 있습니다 ...그래서 문제를 해결하지 못했습니다 ... MyISAM 테이블에 대한 제한 사항을 알고 있지만 불행히도 내가 사용하고있는 호스트가 InnoDB를 지원하지 않습니다 ... 그래, 그 모든 것을 설치할 수 있습니다. 내 고향 상자에 물건 ... PHP는, MySQL은, 등 ... 아마 내가 진짜로 그것을 밖으로 테스트 할 수 있어야합니다. 통찰력을 가져 주셔서 감사합니다! – leeand00

+0

... 또한 응용 프로그램은 실제로 어떤 업데이트도하지 않습니다. 그냥 삽입하고 읽습니다. (아주 간단한 응용 프로그램입니다 ...) 잘하면 그것이 괜찮을 것임을 의미합니다 ... – leeand00

+0

테이블 중 하나가 자동 증가하지 않기 때문에 삽입합니다 (두 필드의 복합 키가 있음). 따라서 새 레코드를 삽입하기 전에 테이블에서 select를 수행하여 keyed 필드 중 하나에 대해 최대 ID가 무엇인지 알아야합니다. 합성 키의 다른 부분은 외래 키입니다. – leeand00

관련 문제