2011-12-07 5 views
-1

다운로드 한 프로그램을 사용하고 있으며 자세한 내용을 모르고 있습니다. 이것은 사용자 입력을 받아서 mysql 데이터베이스를 쿼리하는 웹 애플리케이션 (Python CGI)이다. 내가 아는 것은 레코드 셋을 100 개의 결과 (앱 설정에서)로 제한하면 결과가 2 초 내에 반환된다는 것입니다. 하지만 한도를 120으로 약간 늘리면 처리하는 데 1.5 분 이상 걸릴 것입니다! 몇 가지 다른 쿼리를 시도하고 그들은 모두이 문제에 굴복. 이것은 우스꽝 스럽다. 쿼리가 어떻게 구현되는지 정확히 알지 못하면이 문제를 완화 할 수있는 몇 가지 일반적인 MySQL 설정이 있습니까?mysql이 레코드를 20 % 이상 반환하는 데 50 배 이상 오래 걸리는 이유는 무엇입니까?

UPDATE는 더 많은 테스트 후, 나는 107이 성능 문제를 일으키는 매직 넘버 것으로 나타났습니다. 107 레코드 미만의 항목은 즉시 반환되지만,> 107보다 큰 항목은 최소 1.5 분이 소요되거나 더 커질수록 시간 초과됩니다.

+1

설명 계획과 함께 쿼리를 표시하십시오. –

+0

쿼리를 찾기 위해 모든 모듈을 조사하기 전에 (몇 일이 걸릴 수도 있음) 도움이 될만한 몇 가지 일반적인 mysql 설정이있는 경우에 대비하여이 질문을 올리려했습니다. – PJx

+0

50 및 150 결과는 어떻게됩니까? DB에 소요 된 시간입니까? DB에서 직접 쿼리하면 어떻게됩니까? 기하 급수적 인 지옥에 빠지게하는 여기 cgi 스크립트에서 이상한 나쁜 논리를 추측 할 수 있습니다. – alvi

답변

3

쿼리에 지수 실행 시간이되는 일종의 논리가 포함되어있을 가능성이 높습니다. 예를 들어

, 나는 위치 목록이 있고 그들 사이의 거리를 계산하려면 : 더 최적화

을 사용하지 않고, 4 행의 경우

1 => 2 
2 => 1 

: 더 최적화를 사용하지 않고, 2 행의

1 => 2 
1 => 3 
1 => 4 
2 => 1 
2 => 3 
2 => 4 
3 => 1 
3 => 2 
3 => 4 
4 => 1 
4 => 2 
4 => 3 

데이터 집합을 두 배로 늘리면 단순히 실행 시간이 두 배가되는 것은 아닙니다.

이 문제를 사용자의 문제와 일치 시키면 성능이 저하 될 수 있습니다. 쿼리를 보지 않고는 더 이상 당신을 도울 수 없을 것입니다.

관련 문제