2010-05-04 24 views
6

en el siguiente enlaceMySQL InnoDB: innodb_flush_method

http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_method

que dice: Diferentes valores de esta variable puede tener un marcado efecto sobre el rendimiento de InnoDB. Por ejemplo, en algunos sistemas donde los datos y archivos de registro de InnoDB se encuentran en una SAN, , se ha encontrado que establecer innodb_flush_method en O_DIRECT puede degradar el rendimiento de las instrucciones SELECT simples por un factor de tres.

¿Por qué O_DIRECT podría ralentizar la instrucción select?

+0

La página del manual se ha actualizado recientemente. Está un poco más claro ahora. –

Respuesta

6

O_DIRECT omite los sistemas de caché del sistema operativo. Una SAN puede ser un sistema de almacenamiento muy rápido, pero generalmente estará en otro lugar a través de un enlace de red y se ocultará detrás de otras capas. Al usar O_DIRECT, que elimina la caché local, fuerza InnoDB para golpear el sistema de almacenamiento directamente cada vez.

+2

Cuando usamos o_direct, usaremos casi toda la memoria física para que mysql guarde en caché los datos. Entonces parece que el documento mysql supone que desperdiciamos algo de memoria libre sin asignarlos a mysql. Si no reservamos memoria física gratuita, entonces pensé que o_direct no sería más lento para seleccionar. Como si el bloque se pudiera almacenar en caché dentro del sistema de archivos, lo más probable es que también se pueda almacenar en el búfer mysql si dejamos que mysql use toda la memoria libre. – Daniel

+1

MySQL puede y va a almacenar en caché los resultados de la consulta, pero si alguna de las consultas requeriría una exploración de tabla de todos modos, entonces estará en el disco. Con O_DIRECT, no hay memoria caché de disco en la memoria para usar, por lo que está directamente en el medio de almacenamiento. –

+0

vale la pena votar: en las últimas versiones de InnoDB le gustaría dejar la mayor cantidad posible de RAM para asignar a buffer_pool, que obviamente no deja ninguna oportunidad para que la memoria caché del sistema operativo sea útil para InnoDB. – noonex

2

Realmente necesita experimentar con el método de descarga en su hardware para ver qué funciona mejor para usted. Marco:

innodb_flush_method = O_DIRECT

mejorado nuestro rendimiento en un 15% en un servidor Dell 2950 con unidades SAS de 15K RPM configurados en configuración RAID 1 con controlador de caché PERC de Dell. Estamos ejecutando kernel stock de Ubuntu 9.04 y la mayoría del trabajo es mysql usando innodb. Su experiencia puede ser diferente.

Cuestiones relacionadas