12GB .sql 파일을 가져 오는 데 왜 36 시간 이상이 걸립니까?


16

간단한 type site.sql | mysql명령으로 12GB .sql 파일을 가져 오기 위해 36 시간 동안 기다렸습니다 . ibdata1현재 거의 40GB로 여전히 증가하고 있음을 알 수 있습니다 .

트리거와 저장 프로 시저가 .sql의 끝에 있다고 생각하면 MySQL에서만 데이터와 키 인덱스를 추가해야한다고 생각합니다.

site.sql은 다른 서버에서이 명령을 사용하여 생성되었습니다.

mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers

왜 이렇게 오래 걸립니까?


3
MySQL은 얼마나 많은 CPU를 사용합니까? 값이 낮 으면 디스크에 연결되어 있음을 의미합니다.
Derek Downey

2
.sql 파일은 실제로 가져 오기가 빠르지 않습니다 ... 실제로 탭 delim 또는 CSV로 덤프 한 다음 빈 데이터베이스를 빌드하고 사용하는 것이 더 빠릅니다 LOAD DATA INFILE. 또한 전체 데이터베이스를 이동 하면서 동일한 주 버전 내에 머무르면 서버간에 데이터베이스 이동 : 내 대답을 참조하십시오 . (특히 중단하고 다시 시작해야하는 경우)
Joe

답변:


23

이 시도:

$ ps -ef|grep [m]ysql

그런 다음 프로세스 ID를 식별하십시오.

$ strace -cp <pid>

그런 다음 10 초 또는 1 분 동안 그대로 두십시오 ^C. 프로세스가 시간을 보내고있는 곳은 당신이 본 경우 그냥 디스크 기다리고있을 수 예, 당신을 말할 것이다 readwrite지배.


4
방금 새로운 명령 (strace)을 배웠기 때문에 +1 : P 편집 : 잘 쓰레기, 기본적으로 내 Mac에서는 사용할 수 없습니다.
데릭 다우니

2
gdb와 함께 환상적인 도구입니다. 더 이상 사람들에게 앱이 중단되었다고 말하지 않습니다. 나는 그들이 붙어 있거나 돌고있는 것을 정확하게 말하거나 핵심에서 코드 줄과 소스 파일의 이름을 알려줍니다. 더 강력한 것이 dtrace입니다.
Gaius

3
Strace는 Linux입니다. Solaris equiv는 트러스입니다. Dtrace는 Mac에서 사용할 수 있습니다.
Gaius

그렇습니다. 지금 읽어 보겠습니다.
Derek Downey

알아두면 좋은 명령이지만주의해야합니다.이 명령으로 인해 MySQL 인스턴스가 손상되었습니다. 이유를 모릅니다. MySQL이 충돌하기 전에 몇 분 동안 서버가 응답하지 않게되었습니다.
dabest1

7

기본 키가있는 InnoDB 테이블이 있습니까

  1. 여러 열을 포함하고 있습니까?
  2. 넓은 VARCHAR이 있습니까?
  3. 그리고 고유하지 않은 많은 인덱스?
  4. 넓은 키를 가진 하나 이상의 고유하지 않은 인덱스

이러한 조건 중 하나라도 인덱스의 큰 BTREE 노드가 각 BTREE 노드에 거의 남지 않을 수 있습니다. 기본 키의 클러스터 키는 클러스터되지 않은 키의 고유하지 않은 각 키 항목에도 연결됩니다.

또 다른 고려 사항 : InnoDB 데이터 페이지의 합계가 InnoDB 인덱스 페이지보다 현저히 적습니까?

이 쿼리를 사용하여 찾을 수 있습니다 (MB).

SELECT SUM(data_length)/POWER(1024,2) InnoDBData,
SUM(index_length)/POWER(1024,2) InnoDBIndexes
FROM information_schema.tables WHERE engine='InnoDB';

추가 고려 사항 :로드중인 DB 서버에서 2 진 로깅이 사용 가능합니까? 당신이 있다면, 당신이로드하는 서버 에서이 작업을 수행하십시오

mysql -h... -u... -p... -A -e"SET sql_log_bin=0; source site.sql"

이게 도움이 되길 바란다 !!!


6

읽고있는 테이블에 트리거와 인덱스 및 제한 조건이 없는지 확인 하시겠습니까? 어떤 하드웨어와 OS를 사용하고 있습니까? 스토리지는 어떻게 구성되어 있습니까?

오라클에 더 익숙하지만 트리거, 인덱스 및 제약 조건이없는 테이블에서 12G 가져 오기는 200GB / h로 쉽게 진행됩니다. 하나의 단일 트리거는 트리거가 수행하는 작업에 따라 달팽이로 프로세스를 만들 수 있습니다 ...

이게 도움이 되길 바란다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.