2013-05-18 3 views
2

3 억 5 천만 개의 행이있는 테이블에서 alter table 문을 실행하고 있습니다. 진술서가 실제로 무언가를하고 있으며 매달 리지 않았다는 것을 어떻게 알 수 있습니까? 마찬가지로 나는 그것이 끝나기 전에 잠정적으로 진술을 방해하는 것을 싫어한다. 특히 그것이 몇 시간 동안 실행 된 후에.MySQL의 alter table 명령문이 작동하는지 어떻게 알 수 있습니까?

호스트가 Redhat Linux 상자이므로 Bash 또는 PERL로 스크립트 할 수 있어야합니다. 이 경우의 진술 내용은 다음과 같습니다.

ALTER TABLE table_name AUTO_INCREMENT = 1; 
+0

나는 그 진술이 많은 시간을 소비해야한다고 생각하지 않는다. 테이블 내용에 아무 것도 할 필요가 없다. – Barmar

+0

그건 내가 생각했던 것입니다. 그러나 내가 이모 Google의 호의에서 찾은 다른 게시물은 큰 테이블에 대해 예상된다는 것을 언급합니다. –

+0

mysql 서버의 내부 활동을 모니터하는 방법을 모른다. 내가 제안 할 수있는 최선의 방법은 테스트 서버에 테이블 사본을 만들고 ALTER를 수행하여 작동하는지 확인하는 것입니다. 그런 다음 프로덕션 서버에서 수행하십시오. – Barmar

답변

5

실제로 찾고있는 내용은 다음과 같습니다. SHOW PROCESSLIST. 또한 대규모 데이터 세트로 작업 할 때 (당신이 발견 한대로) 당신은 DB 및 실행에 대한 새 연결을 열면 자동 증가를 업데이트하는 것은 참으로

http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html

을 시간의 특별한 시간이 걸릴 않습니다 추가합니다 이 명령을 실행하면 쿼리가 실행되는 단계 (남은 시간이 아니라)가 표시됩니다. 임시 테이블에 복사, 마무리 등

+3

+1이지만 'PROCESSLIST' ('PROCESS'와'LIST' 사이에 공백 없음)가 있습니다. –

+0

날카로운 눈으로 감사합니다! – Bryan

+0

우수 감사합니다. 그것은 내가 찾고 있었던 바로 그 것이다. 한 가지 더 나아갈 수 있다면 예외가 감지되고 코드화되는 방법을 알고 싶어하므로 프로세스가 나쁜 상태에 빠졌는지 말할 수 있습니까? –

0

다른 옵션을 제공하기 만하면 ... 개발자 도구 SQLyog을 사용해 볼 수 있습니다.

그것은 SHOW PROCESSLIST 당신의 친구입니다, 문

다른 사람이 언급 한 것처럼
+0

이것은 쿼리가 아닙니다 – Drew

+0

기술적으로는 해당 도구 또는 표준 MySQL Workbench 제품을 사용하여 프로세스를 모니터링 할 수 있습니다. 그러나 GUI 기반 도구가 내가 찾고있는 도구가 아니기 때문에이 스크립트를 작성해야합니다. 그러나 그것을 지적 해 주셔서 감사합니다. 나는 다른 목적을 위해 우리에게 가치있는 아이디어를 가지고 살펴볼 것입니다. –

1

의 진행과 함께 변수의 변화와 쿼리 프로파일을 보여줍니다. 때때로. 긴 검색어가 여러 개인 경우 해당 문에 FULL을 추가 할 수 있습니다 (SHOW FULL PROCESSLIST). FULL을 사용하면 결과 열에 전체 쿼리가 포함됩니다.

왜 처음에는 쿼리가 느려지는지 궁금합니다. MySQL은 그 테이블에서 마지막 레코드를 찾을 위치에 대해 좋은 아이디어를 가지고 있어야한다. auto_increment 인 경우 인덱싱 된 것이므로 MySQL이 쉽게 처리 할 수 ​​있어야합니다.

PROCESSLIST는 MySQL이 작동하는 곳, 특히 어떤 이유로 쿼리/명령이 차단 된 경우에 좋은 힌트를 제공하는 경우가 많습니다.

관련 문제