2011-08-17 3 views
5

우리 회사에는 간단한 "crm-like"소프트웨어가 있습니다. 일일 사용 쿼리 ... 시간이 좀 걸리는 복잡한 쿼리가 있습니다. 그래서 우리는 임시 테이블을 사용하여 필요한 모든 복잡한 조인과 하위 쿼리를 대체하기 위해 일부 수정을 테스트하고 있습니다.MYSQL 임시 테이블 - 활성 상태의 테이블을 보는 방법

지금까지 정말 잘 진행되어 90 % 이상의 속도를 얻었습니다.

웹 응용 프로그램 (codeigniter + mysql)이 있기 때문에 50 %의 사용자가 테스트 할 수 있도록 "프로덕션 테스트"환경에 넣을 계획입니다. 활성화 된 테이블을 모니터링하고 가능한 경우 각 연결을 모니터링하려고합니다.

내 질문은 - 거기에 모든 임시 테이블을 볼 수있는 방법은 MySQL 인스턴스에서 활성화되어 있습니까? 데이터를 볼 수 있습니까?

나는 PLUGIN 또는 이와 유사한 것에 대해 읽었지 만, 기사가 훨씬 엉망이었고 나는 이해할 수 없었다.

고맙습니다. 제 영어는 유감 스럽지만 제 네이티브 언어는 아닙니다.

+0

은 http://www.serverfault.com에 속해 있습니다 시스템 관리자 및 데스크톱 지원 전문가를위한 질문 – Mchl

답변

-1

데이터 세트가 커지면 임시 테이블이 도움이되지 않습니다. 결국 그들은 어떻게 도와 주나요? 결과를 계산 한 후에 데이터를 해당 테이블에 복사해야합니다. 왜 memcached로 결과를 캐시하지 않습니까?

또한 다소 큰 (수십 기가 바이트) 데이터베이스가 하나의 시스템에서 실행되고 쿼리가 빠르게 실행되는 것을 보았습니다. 데이터베이스 서버를 올바르게 구성했는지 (소프트웨어 및 하드웨어) 여부에 대한 의문이 있습니다. 일시적인 속도 향상을 경험할 수도 있지만 영구적으로 작동 할 것이라는 보장은 없습니다. 응용 프로그램, 쿼리, 소프트웨어 및 응용 프로그램을 실행하는 데 필요한 하드웨어를 최적화 한 다음 쿼리 결과의 최신 핫 카피가 필요하지 않으면 memcache로 결과를 캐시합니다.

+1

동의하지 않습니다. 임시 테이블은 많은 테이블의 데이터로 많은 업데이트가있을 때 복잡한 쿼리에 매우 유용합니다. –

+0

@michaelhanon 귀하의 동의하지 않는 하나의 사실을 언급하거나 언급하지 않습니다. 그것은 단순히 그것이 당신의 개인적인 의견이라는 것을 의미합니다. 동의 할 수는 없지만 그렇다고 올바른 것은 아닙니다. –

4

임시 테이블은 = 일시, 그것은 바로 쿼리 후 삭제

모든 쿼리를 기록하고 하나씩 쿼리가 tmp_table

시스템 변수를 필요로 시험에 실행을 제외하고 직접적인 해결책은 없다 같은 Created_tmp_tables 임시 테이블의 문제

mysql> show status like '%tmp%'; 
+-------------------------+-------+ 
| Variable_name   | Value | 
+-------------------------+-------+ 
| Created_tmp_disk_tables | 0  | 
| Created_tmp_files  | 0  | 
| Created_tmp_tables  | 0  | 
+-------------------------+-------+ 
1

하나 실제로 사용을 추적하는 몇 가지 아이디어를 줄 수도, 다음, 생성 인덱싱하고이를 삭제하는 오버 헤드가있다 - 특히 웹 어플리로 임시 테이블의 수명은 일반적으로 HTTP 요청의 유효 기간만큼 길다.

미리 컴파일 된 결과 (즉, 구체화 된보기)가 도움이되는 경우, 기존 테이블을 설정하여 MySQL 연결 ID/웹 세션 ID/원본 쿼리 + 시간을 참조하는 필드를 추가합니다. 데이터에 대한 TTL 및 공유 여부를 결정합니다.

테이블 사용에 대한 자세한 추적을 얻는 것 외에도 쿼리 튜닝을 다루는 것이 훨씬 쉬워졌으며 물론 스키마가 더 잘 문서화되었습니다.

-1

필자는 접속 중에 연결되어 있고 연결을 닫은 후에 죽기 때문에보기 임시 테이블에서 이해가되지 않는다고 생각합니다. 그러나 임시 테이블에 관한 한 가지 중요한 사실이 있습니다. 따라서 스크립트에서 영구 연결을 사용하면 임시 테이블이이 연결 기간 동안 지속되며이 연결을 사용하는 클라이언트는 동일한 임시 테이블에 액세스하게됩니다. 또한이 경우 임시 테이블은 시스템 리소스를 소비합니다.이를 피하기 위해서는이 임시 테이블에 사용되는 쿼리를 실행 한 후 수동으로 임시 테이블을 제거해야합니다.