2014-10-16 4 views
0

몇 분마다 MySQL 쿼리를 실행하는 cronjob을 가지고 MyISAM 테이블에 많은 양의 행을 요약합니다. 그러나이 테이블이 몇 분 동안 잠기면 이러한 요약 쿼리가 겹쳐서 테이블을 다시 사용할 수있는 경우에도 오랜 시간 동안 차단됩니다.테이블이 잠겨있는 경우 MySQL 쿼리를 무시합니다.

이러한 쿼리는 필수적이지 않으므로 수시로 실패합니다. 따라서 테이블이 2 초 또는 2 초 이상 차단 된 경우 이러한 쿼리가 실패하는 경우이를 선호합니다.

테이블 잠금을 위해 몇 초 이상 기다리면 자동으로 죽게되는 쿼리를 MySQL에 제출할 수 있습니까? 어떻게 든 쿼리를 중요하지 않은 것으로 표시 할 수 있습니까?

답변

0
당신은 테이블이 명령을 사용하여 열려있는 테이블을보고 잠겨 있는지 확인할 수 있습니다

:

show open tables;

당신이 당신의 테이블이 잠겨 볼 경우, 당신이 그것을하기 전에 쿼리를 취소 할 수 있습니다. 문서 here

은 5.7 SELECT를 구현하는 것입니다 것 또한 보이는 제대로 제한 시간 :

0

http://mysqlserverteam.com/server-side-select-statement-timeouts/pt-kill (Percona 툴킷)를 살펴 보자. 필요한 경우 검색어를 타겟팅하는 데 도움이되는 식별 가능한 설명을 cron 검색어에 추가 할 수 있습니다. --sentinel 플래그를 사용하면 안전하게 pt-kill을 종료 할 수 있습니다.

또한 cron 작업에 잠금을 추가하면 더미를 방지 할 수 있습니다.

0

더 나은 방법은 이러한 쿼리 중 하나만 실행하는 것입니까? 이것은 일어나기를 막을 것입니다. semafore (파일 유형 플래그조차도)를 작성하여 이미 대기중인 쿼리가 있는지 확인하고, 그렇다면 다른 쿼리를 시작하지 마십시오.

일부는 실행되지 않는 것이 좋지만 구현하기가 쉽지 않은 것은 나쁘지 않습니다.