2009-11-08 7 views
4

나는 각각 2 천만 개가 넘는 행을 가진 테이블이 3 개인 데이터베이스가있다. GUID를 기본 키로 사용했습니다 (불행히도). 이제 우리 데이터베이스는 약 20GB이고 매월 5GB가 증가하고 있습니다.큰 mysql (innodb) 데이터베이스 - 쿼리 성능이 느려지고 테이블이 사라지고 백업을 복원하는 데 오랜 시간이 걸린다.

데이터베이스의 전체 백업을 수행하는 데 약 2 시간이 걸리고 4GB RAM이있는 상자에서 복원하려면 약 30 시간이 소요됩니다.

데이터베이스의 모든 테이블을 한 번 사라지게했습니다. 동일한 서버에있는 다른 mysql 데이터베이스는 하나만 제외하고 - 빈 테이블을 남겨두고 데이터 만 사라졌다.

많은 느린 쿼리 중에서 선택 쿼리 - 20m 테이블 중 하나에서 날짜 열의 최대 값을 얻으면 결과를 반환하는 데 약 5 분이 걸립니다. 이 쿼리는 꽤 자주 사용되었습니다.

내가

  1. 추천 DB 설계에 대한 답을 찾고 있어요 향상 선택 쿼리 성능
  2. 방법 변경 - 20m 기록
  3. 다른 쿼리의 성능에 최대 날짜 열을 어떻게 가야
  4. 미래의 DB 성장에 대해

모두에게 감사드립니다.

+0

, 관련 DB 구조 및 쿼리를하는 데 도움이 될 수 있습니다. – Myles

답변

1

더 큰 크기의 설정을 보았습니다 (저장소 엔진은 InnoDB이고 기본 키는 GUID). 그런 문제는 없었습니다.

우리는 한때 데이터베이스의 모든 테이블을 사라지게했습니다. 동일한 서버에있는 다른 mysql 데이터베이스는 하나만 제외하고 - 빈 테이블을 남겨두고 데이터 만 사라졌다. 시스템 LSN는 각 페이지의 LSN 아래에 간 경우

테이블은 빈 것처럼 보일 수 있습니다. 이는 InnoDB 로그 파일이 손상된 경우에 발생할 수 있습니다. 그러나 InnoDB은이 경우 경고를 발행합니다.

20m 테이블 중 하나에서 날짜 열의 최대 값을 가져 오는 선택 쿼리는 결과를 반환하는 데 약 5 분이 걸립니다. 이 쿼리는 꽤 자주 사용되었습니다.

이 열에 인덱스를 생성하면 쿼리가 즉시 수행됩니다.

정확한 검색어를 게시하고 최상의 색인을 만드는 방법을 알려 드리겠습니다.

DB 디자인에 문제가없는 것으로 보입니다. 대부분 서버와 관련이 있습니다.

깨끗한 바닐라 MySQL을 설치하면 다른 서버에서이 동작을 재현 할 수 있습니까?

테이블간에 데이터를 분할하려고 할 수도 있습니다. innodb_file_per_table을 설정하고 백업에서 복원하십시오.

0

백업을 위해 innodb hot backup 도구를 사용할 수 있습니다.이것은 데이터베이스가 가동되는 동안 일관된 백업을 할 수있을뿐 아니라 복원이 당신이하고있는 것보다 훨씬 빠릅니다 (저는 mysqldump라고 가정하고 있습니다). 그것은 돈을 요한다.

0

또한 Mydumper을 시도 할 수 있습니다 : http://www.mydumper.org/

을 그것은 훌륭한 도구이며, 선택 쿼리를 최적화하기위한 무료 오픈 소스

관련 문제