2010-05-17 6 views
1

이상하게 들리지만 분명히 내 기둥 중 하나가 잠겨 있습니다.innodb에서 열 잠금?

select * from table where type_id = 1 and updated_at < '2010-03-14' limit 1; 

select * from table where type_id = 3 and updated_at < '2010-03-14' limit 10; 

두 번째 것이 원활하게 완료되는 동안 첫 번째는 몇 시간 내에 실행을 마칠 수 없습니다. 유일한 차이점은 2 개의 쿼리 사이의 type_id입니다.

약간의 배경, 내가 수동으로 죽여야 만했던 첫 번째 문장. 당신의 도움에 미리

덕분에 - 내가 마무리하는 긴급 데이터의 직업을 가지고,이 문제는

답변

0

(type_id, updated_at)에 색인이없고 사용자의 테이블이 다소 큰 것처럼 보입니다. 문제를 수정해야 인덱스를 생성

:

CREATE INDEX type_updated_idx ON table (type_id, updated_at); 

는 가정, 당신은 데이터 정의 문을 만들 수있는 충분한 권한이 있습니다.

0

나를 미치게되는 영향을받는 테이블에 ANALYZE TABLE를 실행하려고 했습니까?

InnoDB 테이블에 problems 및 제한이 있으므로 MyISAM 테이블로 변환하는 것이 좋습니다.

+0

그냥 달아서 - 완전히 괜찮아 보입니다. innodb 제한 tho에 읽기를위한 감사합니다! –

+0

Innodb에는 행 수준 잠금이 있습니다. 즉, 10 억 개의 행 중 10 개가 업데이트되는 경우 해당 행을 제외한 모든 행에 액세스 할 수 있습니다. Myisam에는 테이블 수준 잠금이 있습니다. 즉, 10 억 행 10 개를 업데이트하면 업데이트가 완료 될 때까지 100 억 개의 행 중 하나에 액세스 할 수 있습니다. myisam을 완전히 사용했지만 결코 후회하지 않았습니다. 덕분에 – John

0

열을 잠글 수는 없지만 색인 범위는 고정시킬 수 있습니다. Show innodb status은 귀하가 대기중인 활성 트랜잭션 이후에 일반적으로 알려줍니다.

+0

! "액세스가 거부되었습니다.이 작업을 위해서는 SUPER 특권이 필요합니다"- 이유는 무엇입니까? –