2010-12-17 1 views
2

여기에서 우리는 MySQL은 5.1.47와 64 데비안 레니과 몇 가지 InnoDB의 데이터베이스를 가지고있다. ibdata 파일 및 기타 물건은 동일한 파일 시스템 (EXT3)에 있습니다. 나는 어떤 상황에 "해방 항목"상태에 걸어 MySQL의 프로세스 목록의 많은 과정이 있다는 것을, 나타났습니다. 내가 쉘에서 다음을 수행 할 때이 문제가 발생I/O 작업이 차단 MySQL의 거래

cat file1 file2 >new_file 

또는 실행 다음 SQL 문 (파일 1과 파일 2 2.5GB에 대한 있습니다)

SELECT 'name' AS col UNION SELECT col FROM db_name.table_name INTO OUTFILE ('/var/xxx/yyy') 

이 두 가지 중 하나가 실행되면, 다음 내가 할 수있는 "해방 항목"상태 (나는 innotop을 사용하고 있습니다)와 함께 끝없는 실행 많은 MySQL의 프로세스를 참조하십시오. 이 셸 프로세스 (또는 SQL 문)를 종료하면 차단 된 트랜잭션이 사라집니다.

인터넷에서 InnoDB 적응 형 해시 색인과 일반적인 쿼리 캐시를 사용하지 않도록 힌트를 찾았지만 도움이되지 않습니다. 같은 경험을 가진 사람이 있습니까?

감사는

답변

2

우리는 I/O 스케줄러 파일 시스템에 하이 외부 부하 동안 굶주린에서 우리의 DB를 유지하는 큰 도움이 될 수있는 기한을 켜기 발견했습니다. 시도해보십시오.

echo deadline > /sys/block/sda/queue/scheduler 

문제가 줄어들면 테스트하십시오.

는 는
+0

/sys/block/cciss! c0d0/queue/scheduler에 이미 포함되어 있습니다 : noop 예상 마감 시간 [cfq] – user545917

+0

@ user545917 이는 cfq가 활성화 된 것을 의미하며,'echo deadline> '/ sys/블록/cciss!c0d0/queue/scheduler'' – nos

+0

우리는 이것을 시도 할 것이다, thanks – user545917

0

흥미로운는 다음과 같습니다

  • 이 서버의 모든 데이터베이스가
  • 우리가 작은 쉘 스크립트를 작성했습니다 (one_file_per_table가 비활성화) 하나 개의 InnoDB의 파일에 저장됩니다 이 서버의 새 데이터베이스에 새 테이블에 초당 10 개의 행을 삽입하면
  • "cat"(위에 설명 된 것과 같은) 병렬을 통해 큰 파일을 복사했습니다.
  • 그리고 : 아무런 문제도없고 잠금도없고 끝이없는 "자유 항목"이 없습니다
  • 그래서이 문제를 일으키고 파일을 다시 복사 한 기존 데이터베이스의 새 테이블에 행을 삽입하기 위해 쉘 스크립트를 변경했습니다
  • 과 : 잠금이 돌아! 응?
  • 마지막 시도 : 우리는 서버 자체에 데이터베이스 (전체 구조 및 데이터 포함)를 복사하고 셸 스크립트를 다시 시작했습니다.
  • 및 : "항목 해제"프로세스가 없습니다!

이전의 데이터베이스에 삽입하면 이러한 "해제 항목"프로세스가 나타나지만 새 데이터베이스 (이전 데이터베이스의 전체 복사본)에 삽입하는 것이 좋습니다.