2013-10-11 4 views
1

나는 메모리 임시 테이블 A을 작성하고 표준 커서의 결과를 반복하여 데이터로 채우는 저장 프로 시저를 작성했습니다. 데이터는 데이터베이스에있는 다른 MyISAM 테이블의 여러 조인을 통해 임시 테이블로 선택됩니다. SP는 올바르게 작동하지만 전체 테이블 메모리 제한에 맞춰 실행되었습니다. 이 문제를 해결하기 위해 메모리 제한을 높였습니다.저장 프로 시저 예상보다 많은 메모리 사용

set @@tmp_table_size=127108864; (121MEGs) 
set @@max_heap_table_size=127108864; (121MEGs) 

이것은 내 SP를 성공적으로 실행하는 데 필요한 것입니다. 테이블 A이 만들어지고 반환되는 (select *를 통해) 표기가 16MEGs에 불과하기 때문에 이상하게 보입니다. 나는 무엇이 메모리 요구 사항의 다른 부분을 일으키는 지 알지 못한다. 이것은 약 100MEG이다. SP가 필요한 것보다 더 많은 메모리를 사용하고있는 것처럼 보입니다. 내 생각에 커서 루프의 일부로 SP에서 실행되는 조인은 실행 후 임시 테이블을 남겨두고 SP가 실행을 마칠 때까지 정리되지 않습니다. 이것은 조인 된 임시 테이블의 거대한 스택이 메모리에 떠 다니는 것을 의미합니다. 이를 막거나 추가 메모리가 SP 커서 루프 내에서 실행되는 이러한 조인에 의해 위로 빨려 들어가는 것을 확인하는 방법이 있습니까? 이 기억은 다른 것에서 오는 것일까? 도움을 준 사람에게 감사드립니다.

답변

1

MySQL이 때문에, 여러 임시 테이블을 만들 수 있습니다 쿼리에 따라 - 사용이

+0

할 것인가 만들어 무엇을 찾기 위해 쿼리의 각 EXTENDED 설명한다. 감사. 문제가되는 쿼리를 발견하면 어떤 생각을해야합니까? – usumoio

+0

인덱스를 생성하고, 인덱스를 만들고, 다시 구조화하고, 다시 아키텍처를 생각해보십시오. 아무런 해결책이 없습니다. ( –

+0

나는 알고 있습니다.'(당신 말이 맞아요. 나는 더 늦은 희망으로 너무 늦은 사무실에있는 사람입니다. 수면보다. 고마워. – usumoio