Iowait cao trong khi wMB / s thấp


8

Tôi đã lập chỉ mục một bảng MySQL. Nó làm cho một tải cao trên máy tính đó.

Có vẻ như do một iowait cao. Nhưng nó cũng cho thấy wMB / s chỉ là 2,87.

Thậm chí, một ổ cứng SATA thông thường có thể xử lý hơn 2,87 MB / giây không? Tại sao quá trình lại chậm như vậy?

iostat -x báo cáo:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.74    0.00    3.48   47.51    0.00   47.26

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   300.00    0.00  383.00     0.00     2.87    15.35   142.00  374.64   2.61  99.90
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00 2507.00     0.00     9.79     8.00   263.88  110.06   0.40  99.90
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    2.00     0.00     0.01     8.00     0.41  196.00 202.50  40.50
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Câu trả lời:


12

Bạn đang thực hiện ghi ngẫu nhiên nhỏ, đó là điều chậm nhất bạn có thể làm trên đĩa quay, vì vậy tôi sẽ nói rằng thông lượng của bạn đáp ứng mong đợi của tôi.

avgrq-szKích thước của bạn là 15,35, có nghĩa là yêu cầu trung bình của bạn là 15,35 x kích thước cung của đĩa SATA (phổ biến nhất là 512 byte, nhưng có thể là 4096 byte trên đĩa SATA rất mới), vì vậy bạn đang viết 15,35 x 512 byte = 7,859,2 byte (trung bình) cho mỗi yêu cầu, số lần ghi 383 / giây iostatđược báo cáo mang lại cho bạn 3.010.073,6 byte (chúng tôi nhân với trung bình, do đó, xuất phát từ .6 byte). Và 3,010,073,6 byte / giây là 2,87 MB / s.

Số lượng ghi bạn có thể làm mỗi giây sẽ phụ thuộc vào số lượng đĩa cần di chuyển đầu, nhưng nói đại khái là bạn đang tiếp cận số lượng ghi tối đa mà thiết bị của bạn có thể thực hiện trong một giây.

Tốc độ ghi cao hơn trên đĩa quay xảy ra khi bạn kết hợp một số lượng ghi nhỏ mỗi giây với số lượng lớn avgrq-sz.

Nếu đây là vấn đề nghiêm trọng về hiệu suất đối với bạn, tôi khuyên bạn nên điều tra các tùy chọn SSD khác nhau thường sẽ mang lại hiệu suất tốt hơn cho khối lượng công việc như thế này.


4

Bạn cần chạy iostatnhiều lần trong khi theo dõi điều này để xây dựng một bức tranh chân thực về những gì đang diễn ra. Điều đó, hoặc sử dụng một công cụ như Cacti để giữ số liệu thống kê đó cho bạn theo thời gian để bạn có thể nhìn vào biểu đồ lịch sử.

Điều có thể xảy ra nhất là đĩa cũng đang đọc rất nhiều, do quét bảng DB và iostathoạt động bạn đã đăng chỉ tình cờ được thực hiện trong thời gian DBMS đang viết chứ không phải đọc. Viết xen kẽ với đọc rất chậm trên đĩa cứng vì nó liên quan đến tìm kiếm, đây là điều chậm nhất mà ổ cứng làm. Nếu bạn nghe ổ cứng, có lẽ bạn có thể nghe thấy nó réo rắt điên cuồng khi nó nhanh chóng xen kẽ giữa viết và đọc đến các phần khác nhau của đĩa cứng.

Để làm cho quá trình này chạy ở tốc độ MByte / chữ số hai chữ số mà bạn mong đợi, bạn phải chia quá trình thành hai, xây dựng chỉ mục trong RAM trong khi thực hiện quét bảng, sau đó viết chỉ mục hoàn chỉnh. MySQL là phần mềm được tối ưu hóa cao, vì vậy nếu nó có thể làm điều này, tôi hy vọng nó sẽ như vậy, và vì không phải vậy, nó không thể. Điều đó có nghĩa là, nó có thể không có đủ RAM để làm điều đó. Điều đó có nghĩa là bạn không có đủ RAM vật lý trong máy cho phần của MySQL để chứa chỉ mục hoàn chỉnh hoặc bạn chưa cung cấp cho nó một phần RAM đủ cao của hệ thống trong tệp cấu hình MySQL. Điều chỉnh MySQL là một chủ đề cho một diễn đàn khác, tuy nhiên.

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.