Hola a todos. Hoy queríamos comentar con vosotros un parámetro de Mysql que es poco conocido y que puede tener mucha importancia en el modo en el que se realizan las escrituras a nuestro sistema de discos.
Este parámetro es innodb_flush_neighbors, pero ¿qué es lo que hace este parámetro?.
Este parámetro se utiliza para indicar al Mysql como queremos que se realice la copia de las páginas modificadas que tenemos en memoria a disco. Realmente, nos sirve para indicar que hace con páginas similares que se encuentran en el mismo extent (grupo de páginas) que la que el gestor necesita copiar.
Los valores que permite son:
- 1. Cuando copia una página del buffer Innodb a disco busca páginas que puedan pertenecer a la misma extensión que estén contiguas y las copia juntas. Es el parámetro por defecto hasta 8.0.2.
- 2. No solo copia las páginas contiguas, sino que busca todas las páginas que estén en el mismo extent aunque no estén contiguas y las copia a disco.
- 0 desactiva la funcionalidad.
¿Que ventaja aporta el tener el valor a 1 para que venga por defecto?
Cuando los datos de las tablas se almacenaban en discos HDD la escritura de bloques contiguos reducían de una forma considerable la sobrecarga de entrada/salida ya que era una operativa mucho menos costosa en estos discos que la escritura de bloques individuales en distintos momentos. Como hemos comentado, esta configuración se utilizaba con discos tradicionales, pero una de las mejoras más utilizadas que se suele implementar es la utilización de discos SSD. Sobre estos discos, este modo de escritura no produce beneficios, sino que puede contraproducente en entornos con un gran volumen de operaciones de escritura. Es por este motivo que desde la versión 8.0.3 el parámetro por defecto es 0 y se tenga que cambiar en el caso de utilizar discos HDD.
Para versiones anteriores a 8.0.3 en los que se utilicen discos SSD es conveniente revisar este parámetros y dejarlo a 0.
Esperamos que os sea de utilidad.
Un saludo.
Equipo DBA.