Prelúdio:
Eu despejei um banco de dados de 5,2 GB usando o comando mysqldump. Eu fiz isso em um servidor virtual pouco potente com apenas 512 MB de memória. Demorou cerca de uma hora. Agora estou recarregando esse banco de dados na minha máquina desktop que tem uma CPU dual core e 2 GB de memória. O recarregamento está em sua 9ª hora e eu não sei se está perto de terminar. Eu recarreguei este banco de dados na mesma máquina há cerca de um ano e levou apenas duas horas. A diferença entre então e agora é que eu substituí meu disco rígido ATA único por dois discos SATA no modo raid1. Eu sei que o raid1 vai escrever mais devagar (em teoria) mas definitivamente não é 4.5x mais lento! Então eu comecei o iostat e fiquei mais confuso.
$ 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 e sdb são as unidades SATA reais que fazem o backup dos dispositivos md, como você pode ver em / 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]
O arquivo .sql do qual estou recarregando está na partição / home no md2 e a partição / var está no md3. Eu suponho que os blocos escritos em md3 são muito mais altos que os blocos lidos em md2 devido aos índices de regeneração do MySql. No entanto, a grande questão que tenho é como a medida tps para md3 pode ser muito maior que a medida tps para sda e sdb?
A opção -m para iostat mostra a mesma quantidade de dados (5,55 MB / s) sendo gravados no disco para md3 e 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
A página man do iostat diz:
tps
Indicate the number of transfers per
second that were issued to the device.
A transfer is an I/O request to the
device. Multiple logical requests can
be combined into a single I/O request
to the device. A transfer is of
indeterminate size.
Eu não espero que eles sejam exatamente iguais, mas certamente não são 864% diferentes! Isso é um sinal de um gargalo devido à minha configuração incorreta do dispositivo md ou estou apenas preocupado com nada?