Alto 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 é de apenas 2,87.

Não é 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
Cheng
fonte

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-sztamanho é 15,35, o que significa que sua solicitação média é 15,35 x o tamanho do setor do seu disco SATA (geralmente 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, o tempo que o iostatrelatório de 383 gravações / segundo fornece 3.010.073,6 bytes (estamos multiplicando por uma média, portanto é daí que vêm os .6 bytes). E 3.010.073,6 bytes / segundo são 2,87MB / s.

Quantas gravações você pode fazer por segundo dependerá de quanto o disco precisa 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.

Maiores velocidades de gravação em discos rotativos acontecem quando você combina um pequeno número de gravações por segundo com um grande avgrq-sz.

Se esse é um problema crítico de desempenho para você, sugiro investigar as várias opções de SSD que geralmente oferecem desempenho muito melhor em uma carga de trabalho como esta.

pdo
fonte
4

Você precisa executar iostatvárias vezes enquanto monitora isso para criar uma imagem verdadeira do que está acontecendo. Isso ou use uma ferramenta como o Cacti para manter essas estatísticas para você 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 à verificação da tabela do banco de dados, e a iostatexecução que você publicou foi realizada durante um período em que o DBMS estava gravando e não lendo. A escrita intercalada com a leitura é realmente lenta no disco rígido, pois 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 sacudindo loucamente, pois alterna rapidamente entre gravar e ler em diferentes partes do disco rígido.

Para executar esse processo com a taxa de dois dígitos de MByte / s esperada, é necessário dividir o processo em dois, criando o índice na RAM enquanto faz a varredura da tabela e depois escreve o índice completo. O MySQL é um software altamente otimizado; portanto, se puder fazer isso, espero que sim, e como não é, não pode. Ou seja, provavelmente não tem RAM suficiente para fazer isso. Isso significa que você não possui RAM física suficiente na máquina para que a parte do MySQL contenha o índice completo ou que você não forneceu uma parte suficientemente alta da RAM do sistema no arquivo de configuração do MySQL. Ajustar o MySQL é um tópico para um fórum diferente, no entanto.

Warren Young
fonte