-1

간단한 SELECT * FROM [4 GB table] LIMIT 1은 0.5 초의 실행 시간이 필요합니다. 무엇이 잘못 될 수 있습니까?간단한 SELECT * FROM 4GB 테이블 LIMIT 1은 0.5 초를 소모합니다. 무엇이 잘못 될 수 있습니까?

전체 DB에는 70GB의 데이터가 있고 4 개의 테이블에는 4 ~ 5GB 크기가 있습니다. 나머지는 1GB를 넘지 않습니다. 20 개의 테이블은 Innodb이고 하나는 MyISAM입니다. 서버가 m3.2xlarge 인스턴스에서 실행 중입니다.

업데이트 : 4GB 테이블 테이블뿐만 아니라 모든 테이블에이 사실이 나타났습니다. 사실, 하나의 행과 하나의 열이있는 가장 작은 테이블에서 쿼리를 시도했습니다 SELECT * FROM smallest_table 쿼리 시간은 ~ 0.4s입니다. 이것이 구성 문제 일 수 있습니까? 나는 최근에 구성을 변경하지 않았습니다.

+3

일반적으로 느린 쿼리를 수정하려고하는 하드웨어를 추가하는 것은 낭비입니다. 좋은 쿼리 성능은 잘 선택된 인덱스에서 비롯됩니다. 이 부분을 읽고 쿼리 성능 섹션을 살펴보십시오. http://meta.stackoverflow.com/a/271056/ [편집] 귀하의 질문에 도움이 필요한 정보를 제공하십시오. –

+0

http://thebuild.com/blog/2014/11/18/when-limit-attacks/ –

+0

@DragandDrop 해당 링크는 PostgreSQL이 아닙니다 .. –

답변

0

무엇이 잘못 되었나요? MyISAM. 예 : 3 개의 다른 스레드에서

SELECT ... FROM this_table ...; -- running more than 0.5 sec 
INSERT INTO this_table ...; 
SELECT * FROM this_table LIMIT 1; -- this query 

Q1이 실행되고 this_table에서 읽기 잠금을 획득했다고 가정합니다.
Q2가 시작되지만 this_table에 대한 단독 잠금을 원하므로 중단됩니다. Q3이 시작되지만 단독 잠금 뒤에 걸려 정지합니다.

마지막으로 Q1이 완료되어 Q2가 완료되어 Q3이 완료됩니다.

이것은 MyISAM의 단점입니다. 내가 잘못 추측 한 경우 가능하면

,,, SHOW PROCESSLIST0.5 초 지연 동안을 SHOW CREATE TABLE을 제공하십시오.

+0

하지만 테이블 MyISAM되지 않습니다. 0.5 초 동안 'SHOW PROCESSLIST'하는 법? 나는 SHOW PROCESSLIST를 해고 할 때까지 질의가 이루어져야 만했다. – tatskie

+0

btw, 방금 내 질문을 업데이트했습니다. – tatskie

+0

또한 제공합니다.'EXPLAIN SELECT ... ' –