Tại sao việc nhập tệp 12 GB .sql mất hơn 36 giờ?


16

Bây giờ tôi đã đợi 36 giờ để nhập tệp .sql 12 GB bằng một type site.sql | mysqllệnh đơn giản . Tôi có thể thấy sự ibdata1phát triển vẫn còn, hiện tại gần 40 GB.

Xem xét các trình kích hoạt và các thủ tục được lưu trữ ở cuối .sql, tôi chỉ nghĩ rằng MySQL nên thêm dữ liệu và các chỉ mục chính.

Site.sql được tạo bằng lệnh này từ một máy chủ khác:

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

Có chuyện gì lâu vậy?


3
mysql dùng bao nhiêu cpu? Nếu đó là một giá trị thấp, điều đó có thể có nghĩa là bạn bị ràng buộc bởi đĩa
Derek Downey

2
các tệp .sql thực sự không nhanh chóng để nhập ... thực sự nhanh hơn để chuyển sang tab delim hoặc CSV, sau đó xây dựng cơ sở dữ liệu trống và sử dụng LOAD DATA INFILE. Ngoài ra, khi bạn di chuyển toàn bộ cơ sở dữ liệu, hãy xem lại câu trả lời của tôi: di chuyển cơ sở dữ liệu giữa các máy chủ nếu bạn ở trong cùng một phiên bản chính. (đặc biệt nếu bạn phải hủy bỏ và khởi động lại)
Joe

Câu trả lời:


23

Thử đi:

$ ps -ef|grep [m]ysql

Xác định id quá trình rồi

$ strace -cp <pid>

Để nó 10 giây hoặc một phút sau đó ^C. Điều đó sẽ cho bạn biết quá trình đang sử dụng thời gian ở đâu, ví dụ như nó chỉ có thể đợi đĩa nếu bạn nhìn thấy readwritethống trị.


4
+1 vì tôi vừa học một lệnh mới (strace): P Chỉnh sửa: well crap, không có sẵn trên mac của tôi theo mặc định.
Derek Downey

2
Đây là một công cụ tuyệt vời, cùng với gdb. Tôi không nói với mọi người rằng ứng dụng của họ đã bị treo nữa; Tôi nói với họ chính xác những gì nó bị mắc kẹt hoặc quay tròn hoặc từ lõi cho họ biết dòng mã và tên của tệp nguồn. Thậm chí mạnh mẽ hơn là dtrace.
Gaius

3
Strace là Linux - đẳng thức Solaris là giàn. Dtrace có sẵn trên Mac.
Gaius

nên nó là. sẽ đi đọc lên trên nó bây giờ
Derek Downey

Cẩn thận: Lệnh tốt để biết, nhưng hãy cẩn thận, lệnh này đã làm hỏng cá thể MySQL của tôi. Không biết tại sao. Trước khi MySQL bị sập, máy chủ đã không phản hồi trong vài phút.
dabest1

7

Bạn có bảng InnoDB nào với Khóa chính không

  1. chứa nhiều cột?
  2. có VARCHAR rộng?
  3. và rất nhiều chỉ số không duy nhất?
  4. một hoặc nhiều chỉ mục không duy nhất có khóa rộng?

Bất kỳ điều kiện nào trong số này có thể khiến các nút BTREE lớn trong chỉ mục của bạn có rất ít lá trong mỗi nút BTREE. Khóa cụm trong Khóa chính cũng được đính kèm với mỗi mục nhập khóa Không duy nhất trong các khóa không bao gồm.

Một cân nhắc khác: Tổng số trang dữ liệu của InnoDB có ít hơn đáng kể so với các trang chỉ mục của InnoDB không?

Bạn có thể tìm thấy điều đó với truy vấn này (tính bằng MB):

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

Xem xét bổ sung: Bạn có bật ghi nhật ký nhị phân trong máy chủ DB bạn đang tải không? Nếu bạn là, xin vui lòng làm điều này trên máy chủ bạn đang tải:

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

Tôi hi vọng cái này giúp được !!!


6

Bạn có chắc chắn rằng các bảng nơi bạn đang đọc không có trình kích hoạt và chỉ mục và ràng buộc không? Bạn đang chạy trên phần cứng và hệ điều hành nào? Bộ nhớ của bạn được cấu hình như thế nào?

Tôi quen thuộc hơn với oracle nhưng nhập 12G trên các bảng mà không có trình kích hoạt, chỉ mục và ràng buộc sẽ dễ dàng đi với 200GB / h. Một kích hoạt duy nhất có thể làm cho quá trình thành ốc, tùy thuộc vào những gì kích hoạt đó ...

Tôi hi vọng cái này giúp được

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.