문제

큰 innoDB 테이블이있는 한 쌍의 데이터베이스 "A"및 "B"가있는 MySQL5.0. "DROP DATABASE A;" 데이터베이스 "B"를 몇 분 동안 동결하십시오. 그 시점에서 "A"를 사용하는 것은 없으므로 왜 이것이 집중적 인 작업입니까?

보너스 포인트 : "A"를 사용하고 데이터를 "B"로 업로드 한 다음 "B"사용으로 전환하면 어떻게 더 빨리 수행 할 수 있습니까? 데이터베이스를 삭제하는 것은 일반적으로 항상해야 할 일이 아니므로 차트에서 약간 벗어납니다.

도움이 되었습니까?

해결책

그래서 확실하지 않습니다 Matt Rogish의 대답 100%도움이 될 것입니다.

문제는 MySQL*이 테이블을 열고 닫는 주위에 뮤트 (상호 배타적 잠금)가있어 기본적으로 테이블이 닫히거나 삭제되는 과정에 있다는 것을 의미합니다. 아니요 다른 테이블을 열 수 있습니다.

이것은 여기에 내 동료가 설명합니다.http://www.mysqlperformanceblog.com/2009/06/16/slow-drop-table/

탁월한 영향 감소 전략 중 하나는 XFS와 같은 파일 시스템을 사용하는 것입니다.

해결 방법은 추악합니다. 테이블의 모든 데이터를 삭제하기 전에 본질적으로 삭제해야합니다 (위의 링크의 주석 #11 참조).

다른 팁

Skaffman의 다음 :

my.cnf (mySQL을 다시 시작)를 포함 시키십시오.

innodb_file_per_table = 1

(http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html)

이렇게하면 데이터베이스에 전용 파일 스토리지가 제공되어 공유 풀에서 벗어날 수 있습니다. 그런 다음 테이블/인덱스를 다른 물리 디스크에 배치하여 I/O를 더욱 분할하고 성능을 향상시키는 것과 같은 재미있는 일을 할 수 있습니다.

이것은 기존 테이블을 변경하지 않습니다. 당신은 자신의 파일에 들어가려면 일을해야합니다 (http://capttofu.livejournal.com/11791.html).

기본적으로 주어진 MySQL 서버 설치의 모든 InnoDB 데이터베이스는 동일한 실제 데이터 파일 풀을 사용하므로 "Drop Database A"는 데이터베이스 B에 영향을 줄 수 있습니다. 작동의 강도 또는 디자인으로 인해 차단 작업이라는 것은 생각할 수 있습니다.

그러나 각 데이터베이스가 다른 물리적 파일을 사용하도록 만들 수 있다고 생각하지만 직접 시도하지는 않았으므로 직접 구체적인 내용을 알아 내야합니다. 실패하면 두 가지 다른 MySQL을 사용해야 할 수도 있습니다. 동일한 시스템에 나란히 설치해야합니다. 이는 완벽하게 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top