Làm cách nào để giảm mức sử dụng tài nguyên khi sao chép một tệp lớn?


8

Tôi cần di chuyển một tệp lớn (bảng MySQL bị hỏng ~ 40 GB) vào một máy chủ riêng biệt để sửa chữa nó. (Khi cố gắng sửa chữa trên máy chủ sản xuất của tôi, nó đã nhanh chóng giết chết máy chủ).

Để thực hiện việc này, tôi muốn đồng bộ hóa các tệp .frm, .MYI và .MYD từ máy chủ sản xuất của tôi sang máy chủ đám mây.

Tôi đang sao chép các tệp từ / var / lib / mysql / {cơ sở dữ liệu} / sang / home / {myuser} để tôi không cần kích hoạt quyền truy cập root cho lệnh rsync và chắc chắn 100% tệp cơ sở dữ liệu không đang sử dụng (không nên ghi hoặc đọc từ đó, nhưng rõ ràng tôi không muốn tắt cơ sở dữ liệu sản xuất của mình để đảm bảo).

Tệp đầu tiên tôi cố sao chép là khoảng 10 GB. Tôi đang chuyển từ một phần của máy chủ sản xuất của mình sang phần khác, tức là vào cùng một mảng đĩa.

Thật không may, lệnh sao chép "cp filename newfilename" đã chiếm quá nhiều tài nguyên, nó khiến máy chủ rơi vào bế tắc.

Làm cách nào tôi có thể sử dụng ít tài nguyên hơn khi sao chép tệp vào một thư mục khác? (Nó không thực sự quan trọng trong bao lâu).

Giả sử tôi quản lý để làm điều này, thì tôi có thể sử dụng tài nguyên nào khi kết nối tệp vào đám mây?

Bất cứ ai có thể đề nghị một cách tốt hơn để làm điều này? Tôi đang nhanh chóng hết dung lượng đĩa, vì vậy cần phải sửa chữa và lưu trữ bảng này càng sớm càng tốt.

Câu trả lời:


5

Bạn đã thử nice -n10tiền tố cho lệnh?

10là giá trị mặc định. Phạm vi đi từ -20(ưu tiên cao nhất) đến 19(thấp nhất).


@Jonathan Sự hiểu biết của tôi là điều này sẽ chỉ giới hạn mức sử dụng CPU, không phải Đĩa I / O VÀ RAM: linux.com/archive/feed/58638
Jon M

Đúng nhưng đó là một sự khởi đầu, về việc giảm một trong những điểm nghẽn - nó có thể đủ để ngăn chặn việc treo máy.
Jonathan Ross

Cảm ơn @Jonathan Ross, theo điều này: linux.die.net/man/1/ionice "Các chương trình kế thừa cài đặt CPU tốt cho các ưu tiên của io.", Vì vậy nó có thể chỉ hoạt động, nhưng tôi đang nghiên cứu kết hợp "tốt đẹp" và "ionice"
Jon M

Suy nghĩ tốt. Tôi luôn luôn bắt đầu với nicethói quen là chủ yếu. iotopcũng là bạn của bạn
Jonathan Ross

3
Lệnh cuối cùng tôi đã chạy là nice -n 20 ionice -c 3 cp /var/lib/mysql/{database}/{table}.MYI /home/{USER}/Điều này đã tăng tải trên máy chủ của tôi làm chậm nó xuống một chút, nhưng trang web có sẵn trong thời gian chuyển
Jon M

10

Hai lựa chọn bên cạnh giới hạn băng thông rsync:

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ionicesẽ giao diện với bộ lập lịch I / O. bufferlà một bộ đệm tròn có nghĩa là hỗ trợ các thiết bị nhân vật hoạt động hiệu quả hơn, nhưng -u 150sẽ tạm dừng 150 micro giây giữa các lần ghi, theo hướng dẫn, có thể đủ để tạo cho một phòng đĩa để thở.

Cả hai ionicebuffercó sẵn trong một bản dựng Ubuntu stock. iotopsẽ hữu ích nếu bạn tình cờ có CONFIG_TASK_DELAY_ACCT được cấu hình trong kernel của bạn, nhưng hộp Ubuntu của tôi không hạn chế nghiêm trọng khả năng sử dụng của lệnh. Tôi đã biết lệnh được chết đuối ổ cứng của tôi, tôi chỉ muốn cung cấp cho nó một số phòng thở.

Ngoài ra, trong khi bản sao đang được xử lý, hãy xem đầu ra của iostat -x 1(thường là trong gói sysstat) và xem rằng% trường bận cho thiết bị của bạn là 90% hoặc ít hơn trong quá trình sao chép. Nếu nó ở mức 99-100%, thì bạn đang bỏ đói các quy trình khác cho I / O.


Cảm ơn phản hồi của bạn @zerolagtime Tôi đã kết thúc bằng cách sử dụng lệnh ionice tương tự nhưng đã đánh dấu câu trả lời trước đó là chính xác
Jon M

ionice -c 3 -p $pidUnisonđang làm việc cho unison trên ổ cứng ngoài, thx !!
Sức mạnh Bảo Bình

6

sử dụng rsync với công tắc --bwlimit = KBPS (giới hạn băng thông I / O; KBytes mỗi giây). chơi xung quanh với một tệp nhỏ hơn và cố gắng tìm kết hợp tối ưu giữa tốc độ truyền và sử dụng hệ thống. Giám sát trong vỏ thứ hai với "vmstat 1"


Tôi chắc chắn sẽ thử điều này để giới hạn tài nguyên của lệnh RSYNC, nhưng hiện tại tôi chỉ đang cố sao chép một tệp vào một vị trí khác trên máy chủ của mình thông qua lệnh "cp".
Jon M

bạn cũng có thể sử dụng rsync để sao chép tệp cục bộ và giới hạn băng thông với công tắc --bwlimit.
shakalandy

rsyncsẽ sao chép tập tin cục bộ. Hãy suy nghĩ rsync --bwlimit=28000 foo.frm /bar/foo.frmvà sau đó xem nó với iostat. Tôi không chắc tại sao vmstatsẽ cho bạn biết nếu bạn đang bão hòa một ổ đĩa. Tìm% bận trong iostat.
zerolagtime

tốt, vmstat hiển thị IO của bạn trên các thiết bị khối. Ngoài ra, bạn có thể thấy bất cứ điều gì khác quan trọng đối với việc sử dụng máy (cpu, quy trình người dùng, chờ cpu, trao đổi, ...)
shakalandy

0

Một thay thế là:

scp -l ${KBPS} ${src} ${dest}

Nhưng tôi không nghĩ nó sẽ hoạt động nếu $ {src} là một tệp đang phát triển ... bạn có thể đề xuất một cách để sao chép và chờ nguồn được đóng lại không ...

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.