Kesulitan menafsirkan ukuran tps iostat

4

Pendahuluan: Saya membuang basis data 5,2 GB menggunakan perintah mysqldump. Saya melakukan ini pada server virtual kurang bertenaga dengan hanya 512 MB memori. Butuh sekitar satu jam. Saya sekarang memuat ulang basis data itu pada mesin desktop saya yang memiliki CPU dual core dan memori 2 GB. Muat ulang pada jam ke-9 dan saya tidak tahu apakah itu hampir selesai. Saya telah memuat ulang basis data ini pada mesin yang sama sekitar setahun yang lalu dan hanya butuh dua jam. Perbedaan antara dulu dan sekarang adalah saya mengganti hard disk ATA tunggal saya dengan dua disk SATA dalam mode raid1. Saya tahu bahwa raid1 akan menulis lebih lambat (secara teori) tapi jelas tidak lebih lambat 4,5x! Jadi saya pecah iostat dan saya menjadi lebih bingung.

$ sudo iostat 
Linux 2.6.30-2-amd64 (lukahn)  12/12/2009  _x86_64_ (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.13    0.00    1.94   27.96    0.00   62.97

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             144.02       198.41     11139.44    9322418  523399320
sdb             143.78       165.59     11137.39    7780516  523303000
hda               0.01         0.05         0.00       2492          0
md0               0.66         6.44         0.71     302538      33496
md1               7.32        67.02         7.51    3148938     352960
md2               6.08       240.02        18.95   11277610     890584
md3            1389.80        46.85     11106.55    2201410  521853640
md4               0.41         3.03         0.21     142322       9824

sda dan sdb adalah drive SATA asli yang mendukung perangkat md, seperti yang Anda lihat di / proc / mdstat:

$ cat /proc/mdstat 
Personalities : [raid0] [raid1] 
md4 : active raid0 sda6[0] sdb6[1]
      48821248 blocks 64k chunks

md3 : active raid1 sda5[0] sdb5[1]
      48829440 blocks [2/2] [UU]

md2 : active raid1 sda4[0] sdb4[1]
      1318358080 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
      48829440 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
      9767424 blocks [2/2] [UU]

File .sql yang saya reload dari berada di partisi / home di md2 dan partisi / var ada di md3. Saya berasumsi bahwa blok yang ditulis ke md3 jauh lebih tinggi daripada blok yang dibaca dari md2 karena indeks regenerasi MySql. Namun pertanyaan besar yang saya miliki adalah bagaimana mengukur tps untuk md3 menjadi jauh lebih tinggi daripada ukuran tps untuk sda dan sdb?

Opsi -m untuk iostat menunjukkan jumlah data yang sama (5,55 MB / s) yang ditulis ke disk untuk md3 dan sda / sdb:

$ sudo iostat -m
Linux 2.6.30-2-amd64 (lukahn)   12/12/2009  _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.39    0.00    2.00   28.16    0.00   62.44

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda             145.16         0.10         5.55       4976     267768
sdb             144.90         0.09         5.55       4143     267716
hda               0.01         0.00         0.00          1          0
md0               0.66         0.00         0.00        154         16
md1               7.18         0.03         0.00       1580        172
md2               6.19         0.13         0.01       6153        443
md3            1418.41         0.02         5.53       1146     266994
md4               0.40         0.00         0.00         69          5

Halaman manual iostat mengatakan:

tps

Tunjukkan jumlah transfer per detik yang dikeluarkan ke perangkat. Transfer adalah permintaan I / O ke perangkat. Beberapa permintaan logis dapat digabungkan menjadi satu permintaan I / O ke perangkat. Transfer berukuran tidak pasti.

Saya tidak berharap mereka persis sama, tetapi pasti tidak berbeda 864%! Apakah ini tanda kemacetan karena kesalahan konfigurasi perangkat md saya atau saya hanya khawatir tentang apa-apa?

dvogel
sumber
2
Anda mungkin memiliki lembar sampul yang salah pada laporan TPS Anda.
Paul Tomblin

Jawaban:

9

Itu doa iostat tunggal, yang tidak memberikan data yang bermakna untuk nilai "per detik", hanya penghitung yang berguna - tidak dapat menghitung perubahan per detik dari nilai tunggal, perlu mengetahui dua nilai dan waktu di antara mereka. Untuk melihat nilai nyata, coba sesuatu seperti:

iostat -d 1 2

Output kedua akan menjadi nilai nyata.

Dari halaman iostat:

Laporan pertama yang dihasilkan oleh perintah iostat memberikan statistik mengenai waktu sejak sistem di-boot. Setiap laporan selanjutnya mencakup waktu sejak laporan sebelumnya.

Richlv
sumber
jadi dari mana nilai tps pertama berasal? apakah itu angka yang tidak berarti yang dihasilkan berdasarkan jangka waktu tak terbatas?
Chris
semua nilai di baris pertama adalah sejak sistem dinyalakan. dari iostat manpage: "Laporan pertama yang dihasilkan oleh perintah iostat memberikan statistik mengenai waktu sejak sistem di-boot. Setiap laporan berikutnya mencakup waktu sejak laporan sebelumnya."
Richlv
2

Karena kecepatan transfernya sama, output yang Anda berikan mengatakan kepada saya bahwa layer MD cache transaksi dan kemudian menulisnya ke disk fisik dalam potongan yang lebih besar.

Kelambatan yang Anda lihat saat memuat ulang basis data kemungkinan disebabkan oleh indeks, seperti yang Anda katakan. Anda dapat menghindari ini dengan hanya tidak memiliki pembaruan indeks saat Anda memuat data, kemudian hanya membuat ulang indeks di akhir.

Kamil Kisiel
sumber
0

Nilai transaksi yang didukung oleh disk yang diberikan adalah fungsi dari waktu pencarian lagu. Untuk drive SATA ini biasanya sekitar 5-8ms, jadi saya harapkan sekitar 125-200 transaksi per detik.

Anda melihat ~ 145 tps pada masing-masing drive, sehingga tampaknya cukup masuk akal.

Daniel Lawson
sumber