2011-02-12 1 views
1

이것은 관리자로서 경력상 가장 어려웠던 MySQL 문제입니다. MySQL 숙달자가 나를 조금 도와 줄 수 있습니까? :가장 수수께끼 같은 MySQL 문제 : 산발적으로 느린 쿼리

지금 당장 MySQL/InnoDB 테이블을 여러 번 쿼리하는 애플리케이션을 실행합니다. 이러한 쿼리는 단일 행 삽입 또는 인덱스 선택을 통해 간단하고 최적화됩니다.

일반적으로 쿼리는 10 ms 미만의 초고속입니다. 그러나 한 시간에 한 번씩 모든 쿼리가 느려집니다. 예를 들어, 오늘 5시 4 분 39 초에, 느린 쿼리 로그에 표시된 것처럼 일련의 간단한 쿼리가 모두 실행되는 데 1 ~ 3 초 이상 걸렸습니다.

왜 이런 경우이며 해결책이 무엇이라고 생각하십니까?

나는 내 자신의 아이디어가 있습니다. 아마도 그 시간 동안 하드 드라이브가 바쁠 것입니까? 클라우드 서버 (rackspace)를 실행하지만 flush_log_at_trx_commit을 0으로 설정하고 버퍼 메모리를 10 배 (디스크의 테이블 크기의 10 배)로 설정했습니다. 삽입과 선택은 메모리에서 올바르게 수행되어야합니까?

다른 누구도 이전과 같은 경험이 있습니까? 나는이 포럼과 다른 곳곳을 수색 해 왔으며, 전에 보았던 다른 MySQL 문제가없는 것처럼 보입니다.

+2

http://serverfault.com/에서이 기능을 요청해야합니다. 같은 상자에 다른 사이트가 있습니까? 어떤 cron 작업이 실행 중입니까? 스와핑을 방지하기에 충분한 물리적 메모리가 있습니까? –

+0

오직 하나의 사이트 만 있지만 배경 활동이 아주 잘 진행될 수 있습니다. innoDB를 버퍼로 메모리에 쓰도록 설정하고 HDD에 지속성 만 유지할 수 있습니까? 필자는 충분한 메모리 이상을 가지고 있습니다. 테이블의 총 용량은 1GB 미만이고 메모리 용량은 8GB입니다. –

+0

[galz] (http://stackoverflow.com/users/610995/galz) ([뒤로]) [이 답변] (http://stackoverflow.com/questions/4837903/mysql-slow-insert) 도움이 될 것이라고 댓글을 달았습니다. 당신 –

답변

1

급한 실속에는 많은 이유가 있습니다. 예를 들어, flush_log_at_trx_commit = 0을 사용하고 있어도, InnoDB는 데이터 파일의 크기를 확장하면서 잠시 멈추어야한다.

Rackspace에서 더 작은 인스턴스 유형을 사용한 경험은 IO가 완전히 끔찍하다는 것입니다. 랜덤 쓰기 (10ms 소요)가 500ms 걸리는 것을 보았습니다.

문제를 쉽게 식별하는 데 도움이되는 내장 된 MySQL에는 아무것도 없습니다. Percona Server의 느린 쿼리 로그 향상 기능을 살펴 보는 것이 좋습니다. "profiling_server"라는 특정 기능으로 시간을 분해 할 수 있습니다. http://www.percona.com/docs/wiki/percona-server:features:slow_extended#changes_to_the_log_format