2011-01-10 2 views
2

큰 데이터베이스 (일부 테이블 500000000+ 행)로 작업하고 있습니다. 하루에 3 ~ 10 백만 개의 행을 대체해야하며 각 가져 오기는 LOAD DATA INFILE을 사용하여 약 1 백만 행 (따라서 CRON의 경우 하루에 3-10 회)입니다. 큰 파일 가져 오기를하는 동안 MySQL이 CPU의 80 %를 먹고 웹 사이트에서 나오는 모든 일반적인 쿼리가 매우 느리게되거나 웹 사이트 성능이 떨어지는 것이 문제입니다. Amazon EC2 Windows 2008 서버에서 사이트가 실행 중입니다. 누군가가 (데이터베이스를 분할하지 않고) 하나의 EC2 인스턴스 내에서이 문제를 해결하는 방법을 알고 있습니까 고마워요.LOAD DATA INFILE을 사용하여 대량의 데이터 파일을 가져 오는 동안 MYSQL 성능을 유지하는 방법은 무엇입니까?

답변

1

빠르고 더러운 해킹 ... 소스 파일을 더 작은로드로 분할 한 다음 DB로드 작업으로 cron'ned하고 각로드 사이에 5 분의 휴식 시간을 갖는 것은 어떻습니까? 한 번에 천만 개의 레코드를 관리하면 많은 서버 및 DB 리소스가 소모되어 충돌이 발생할 수 있습니다. 50-100K의 부하를 사용하면 메모리가 많은 대용량 서버를 사용하는 경우에는 그리 좋지 않을 수 있습니다.

1

분포는

하지 당신은, 그래서 예산 제약을 할 수 없습니다에 대한 합리적인 무엇인지 (즉, 페이스 북이 처리하는 방식이다) 이동하는 방법을 보인다? 창의

다른 가능한 방법

  • 폐기 사용 - 크론을 통해 가져 오는 동안 limitation of windows
  • 설정 MySQL의 복제
  • 은, 모든 마스터에 명중 쿼리 및 그 대를 방지 할 수 있습니다. 일단 가져 오기가 완료되면 (마스터 플래그가 존재한다면, 슬레이브 플래그 파일이 존재한다면, 마스터를 사용하고, 둘 다 존재하지 않는다면, 둘 다 질의가 될 수있다.)
  • partition을 고려하라.
  • 폐기 모든 지수는

많이하지 미션 크리티컬 경우,

훨씬 적합 오프라인 가져 오기를 수행하여 데이터베이스 사용에 의존하다합니다 (결과 부담)
관련 문제