Alto iowait mientras el wMB / s es bajo

8

Estaba indexando una tabla MySQL. Hace una gran carga en esa computadora.

Parece debido a un alto iowait. Pero también muestra que el wMB / s es solo 2.87.

¿Ni siquiera un HDD SATA común puede manejar más de 2.87MB / s? ¿Por qué el proceso es tan lento entonces?

iostat -x informes:

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
fuente

Respuestas:

12

Estás haciendo pequeñas escrituras aleatorias, que es lo más lento que puedes hacer en un disco giratorio, por lo que diría que tu rendimiento cumple con mis expectativas.

Su avgrq-sztamaño es 15.35, lo que significa que su solicitud promedio es 15.35 x el tamaño del sector de su disco SATA (más comúnmente 512 bytes, pero posiblemente 4096 bytes en un disco SATA muy nuevo), por lo que está escribiendo 15.35 x 512 bytes = 7,859.2 bytes (en promedio) por solicitud, las 383 escrituras / segundo iostatque informa le dan 3,010,073.6 bytes (estamos multiplicando por un promedio, así que de ahí provienen los .6 bytes). Y 3,010,073.6 bytes / segundo es 2.87MB / s.

La cantidad de escrituras que puede hacer por segundo dependerá de cuánto necesite mover los cabezales el disco, pero en términos generales, se acerca al número máximo de escrituras que su dispositivo puede hacer en un segundo.

Las velocidades de escritura más altas en los discos giratorios ocurren cuando combina una pequeña cantidad de escrituras por segundo con una grande avgrq-sz.

Si este es un problema crítico de rendimiento para usted, le sugiero que investigue las diversas opciones de SSD que generalmente brindarán un rendimiento mucho mejor en una carga de trabajo como esta.

pdo
fuente
4

Debe ejecutar iostatvarias veces mientras monitorea esto para generar una imagen real de lo que está sucediendo. Eso, o use una herramienta como Cacti para mantener tales estadísticas para usted a lo largo del tiempo para que pueda ver el gráfico histórico.

Lo que es más probable que suceda es que el disco también está haciendo muchas lecturas, debido al escaneo de la tabla DB, y la iostatejecución que publicó simplemente se realizó durante un momento en que el DBMS estaba escribiendo en lugar de leer. La escritura entrelazada con la lectura es realmente lenta en un disco duro porque implica buscar, que es lo más lento que hace un disco duro. Si escucha el disco duro, es probable que lo escuche repiquetear locamente, ya que alterna rápidamente entre escribir y leer en diferentes partes del disco duro.

Para hacer que este proceso se ejecute a la velocidad de MByte / s de dos dígitos que espera, tendría que dividir el proceso en dos, construir el índice en la RAM mientras realiza el escaneo de la tabla y luego escribir el índice completo. MySQL es un software altamente optimizado, por lo que si pudiera hacer esto, espero que lo haga, y como no lo es, no puede. Es decir, probablemente no tiene suficiente RAM para hacer eso. Eso significa que no tiene suficiente RAM física en la máquina para que la porción de MySQL contenga el índice completo, o que no le ha dado una porción lo suficientemente alta de la RAM del sistema en el archivo de configuración de MySQL. Sin embargo, ajustar MySQL es un tema para un foro diferente.

Warren Young
fuente