Iowait tinggi sementara wMB / s rendah

8

Saya mengindeks tabel MySQL. Itu membuat beban tinggi di komputer itu.

Sepertinya karena iowait yang tinggi. Tetapi ini juga menunjukkan bahwa wMB / s hanya 2,87.

Bahkan HDD SATA biasa tidak mampu menangani lebih dari 2.87MB / s? Mengapa prosesnya sangat lambat?

iostat -x laporan:

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
Cheng
sumber

Jawaban:

12

Anda melakukan penulisan acak kecil, yang merupakan hal paling lambat yang dapat Anda lakukan pada disk pemintalan, jadi saya akan mengatakan bahwa throughput Anda memenuhi harapan (saya).

avgrq-szUkuran Anda adalah 15,35, yang berarti permintaan rata-rata Anda adalah 15,35 x ukuran sektor disk SATA Anda (paling umum 512 byte, tetapi mungkin 4.096 byte pada disk SATA yang sangat baru), jadi Anda menulis 15,35 x 512 byte = 7,859,2 byte (rata-rata) per permintaan, kali 383 menulis / detik iostatmelaporkan memberi Anda 3.010.073,6 byte (kami mengalikan dengan rata-rata, jadi dari sanalah 0,6 byte berasal). Dan 3.010.073,6 byte / detik adalah 2,87MB / s.

Berapa banyak penulisan yang dapat Anda lakukan per detik akan tergantung pada seberapa banyak cakram yang diperlukan untuk memindahkan kepala, tetapi secara kasar Anda mendekati jumlah penulisan maksimum yang dapat dibuat perangkat Anda dalam satu detik.

Kecepatan tulis yang lebih tinggi pada disk pemintalan terjadi ketika Anda menggabungkan sejumlah kecil penulisan per detik dengan yang besar avgrq-sz.

Jika ini adalah masalah kinerja yang kritis bagi Anda, saya sarankan menyelidiki berbagai opsi SSD yang umumnya akan memberikan kinerja yang jauh lebih baik pada beban kerja seperti ini.

pdo
sumber
4

Anda perlu menjalankan iostatbeberapa kali sambil memantau ini untuk membangun gambaran nyata tentang apa yang terjadi. Itu, atau gunakan alat seperti Cacti untuk menyimpan statistik seperti itu untuk Anda dari waktu ke waktu sehingga Anda dapat melihat grafik historis.

Apa yang paling mungkin terjadi adalah bahwa disk juga melakukan banyak pembacaan, karena pemindaian tabel DB, dan proses yang iostatAnda posting kebetulan dilakukan pada saat ketika DBMS menulis daripada membaca. Menulis diselingi dengan membaca sangat lambat pada hard disk karena melibatkan pencarian, yang merupakan hal paling lambat yang dilakukan oleh hard drive. Jika Anda mendengarkan hard drive, Anda mungkin dapat mendengarnya berderak-derak dengan cepat karena berganti-ganti antara menulis dan membaca ke berbagai bagian hard disk.

Untuk membuat proses ini berjalan pada tingkat MByte / s dua digit yang Anda harapkan, Anda harus membagi proses menjadi dua, membangun indeks dalam RAM saat melakukan pemindaian tabel, kemudian menulis indeks lengkap keluar. MySQL adalah perangkat lunak yang sangat dioptimalkan, jadi jika bisa melakukan ini, saya berharap akan melakukannya, dan karena tidak, maka tidak bisa. Dengan kata lain, itu mungkin tidak memiliki cukup RAM untuk melakukan itu. Itu berarti Anda tidak memiliki RAM fisik yang cukup di mesin untuk bagian MySQL untuk memuat indeks lengkap, atau bahwa Anda belum memberikannya bagian yang cukup tinggi dari RAM sistem dalam file konfigurasi MySQL. Tuning MySQL adalah topik untuk forum yang berbeda.

Warren Young
sumber