Alta iowait enquanto o wMB / s é baixo

8

Eu estava indexando uma tabela MySQL. Faz uma carga alta nesse computador.

Parece devido a um alto iowait. Mas também mostra que o wMB / s é apenas 2,87.

Nem mesmo um HDD SATA comum é capaz de lidar com mais de 2,87MB / s? Por que o processo é tão lento então?

iostat -x relatórios:

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
    
por Cheng 14.04.2011 / 10:21

2 respostas

12

Você está fazendo pequenas gravações aleatórias, o que é a coisa mais lenta que você pode fazer em um disco giratório, então eu diria que sua taxa de transferência atende às (minhas) expectativas.

Seu avgrq-sz size é 15,35, o que significa que sua solicitação média é 15,35 xo tamanho do setor do seu disco SATA (mais comumente 512 bytes, mas possivelmente 4096 bytes em um disco SATA muito novo), então você está escrevendo 15.35 x 512 bytes = 7.859,2 bytes (em média) por solicitação, vezes o número de 383 gravações / segundo iostat está gerando 3.010.073,6 bytes (estamos multiplicando por uma média, então é de onde vêm os bytes .6). E 3.010.073,6 bytes / segundo é 2.87MB / s.

Quantas gravações você pode fazer por segundo vai depender de quanto o disco precisa para mover as cabeças, mas grosso modo você está se aproximando do número máximo de gravações que seu dispositivo pode fazer em um segundo.

Velocidades de gravação mais altas nos discos giratórios ocorrem quando você combina um pequeno número de gravações por segundo com um grande avgrq-sz .

Se este for um problema de desempenho crítico para você, sugiro investigar as várias opções de SSD que geralmente oferecerão um desempenho muito melhor em uma carga de trabalho como essa.

    
por 14.04.2011 / 14:21
4

Você precisa executar iostat várias vezes enquanto monitora isso para criar uma imagem real do que está acontecendo. Isso, ou use uma ferramenta como Cactos para manter essas estatísticas ao longo do tempo para que você possa ver o gráfico histórico.

O que provavelmente está acontecendo é que o disco também está fazendo muitas leituras, devido à varredura da tabela do banco de dados, e a iostat que você postou acabou de ser feita durante um tempo em que o DBMS estava escrevendo em vez de ler . A escrita intercalada com a leitura é muito lenta em um disco rígido porque envolve a busca, que é a coisa mais lenta que um disco rígido faz. Se você ouvir o disco rígido, provavelmente poderá ouvi-lo chacoalhando enquanto alterna rapidamente entre a gravação e a leitura em diferentes partes do disco rígido.

Para que este processo seja executado na taxa de MByte / s de dois dígitos que você espera, você teria que dividir o processo em dois, construindo o índice na RAM enquanto fazia a varredura da tabela e, em seguida, gravando o índice completo Fora. O MySQL é um software altamente otimizado, então se puder fazer isso, espero que sim, e como não é, ele não pode. Isto é, provavelmente não tem RAM suficiente para fazer isso. Isso quer dizer que você não tem RAM física suficiente na máquina para que a parte do MySQL contenha o índice completo, ou que você não tenha dado uma porção alta o suficiente da RAM do sistema no arquivo de configuração do MySQL. Ajustar o MySQL é um tópico para um fórum diferente, no entanto.

    
por 14.04.2011 / 14:29