Beneficios de Barracuda y Compresión

12

He estado leyendo sobre los formatos de archivo de MySQL Antelope y Barracuda hace un tiempo, y me pregunto si podría beneficiarme con Barracuda y Compression.

Mi servidor está utilizando Antelope actualmente, ya que es el valor predeterminado de MySQL.
He tenido muchas veces problemas con la memoria debido a la gran base de datos que tengo. Mi base de datos está aumentando cada día.

Parece que la compresión está dando beneficios a algunas personas, como:
http://www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/

Entiendo que la memoria y el espacio en disco pueden ser menores, pero no estoy seguro si entiendo esto (citado en el artículo):
"~ 5% de carga de CPU según la parte superior (del 80-100% en su mayoría esperando E / S)
0.01 segundos de tiempo de búsqueda promedio por clave principal (de 1 a 20 segundos antes de la conversión) "

Pensé que estas dos cosas NO mejorarían, porque si los datos se comprimen, el servidor tiene que descomprimirse para volver a obtener los datos originales, entonces ¿no tiene sentido que aumente el uso de la CPU?

¿Le beneficia eso en aplicaciones intensivas de lectura / escritura? ¿Me recomendarías cambiar a Barracuda y Compresión?

¿Conoces algún problema de Barracuda?
Parece que la respuesta de la siguiente pregunta señala algunos problemas, pero como es de 2011, diría que ya están solucionados: /server/258022/mysql-innodb-how-to-switch -to-barracuda-format

Nuno
fuente

Respuestas:

14

Con respecto a "Dinámico" , el formato no comprimido de Barracuda, muy poco ha cambiado de compacto, principalmente en cómo se almacenan los blobs (y cualquier campo muy dinámico) . Nunca he tenido ningún problema con compact vs dynamic, por lo que puedo recomendar con seguridad la dinámica de Barracuda. Recuerde que Barracuda también admite viejos formatos de fila redundantes y compactos .

El artículo que está mencionando es probablemente demasiado antiguo (5.1) y, como Peter Z., CEO de Percona, menciona en los comentarios, puede ser un poco engañoso. Eso no significa que la compresión no pueda ser una gran ganancia dependiendo de las cargas de trabajo. Sin embargo, le recomendaría que lo pruebe en versiones> = 5.6, ya que tanto Facebook como Oracle han realizado muchas mejoras al respecto.

Como materiales de referencia más recientes, le recomendaría:

En particular, me gustan los materiales de Facebook, ya que son de terceros (sin necesidad de una agenda) y tienen una de las implementaciones de MySQL más grandes del mundo. Como puede ver, han tenido configuraciones muy exitosas que combinan tecnología SSD con compresión.

¿Te beneficiará? Eso dependerá de su carga de trabajo, conjunto de trabajo y configuración (IOPS, memoria) . Dependiendo de si está vinculado a IO, CPU o memoria, la compresión puede afectar negativamente en algunos casos, al agregar CPU adicional, los requisitos de memoria (las páginas comprimidas y sin comprimir se almacenan en el grupo de búferes InnoDB) o generar demasiados errores de compresión, aumentando la latencia También depende del tipo de datos: la compresión puede ayudar mucho con grandes blobs de texto, pero puede ser inútil con datos ya comprimidos.

En mi experiencia, en la práctica, hay personas para las cuales la compresión fue el santo grial del rendimiento y están muy contentas con ella, pero en otros casos, tuvimos que volver a los datos sin comprimir ya que no se obtuvo ganancia. Si bien una carga de trabajo de escritura muy pesada puede parecer un mal entorno para la compresión, si en su caso particular no está vinculado a la CPU y a la memoria, pero atado a iops, puede ser útil.

En general, es muy difícil predecir los resultados, por lo general, debe configurar un entorno de prueba para la evaluación comparativa y luego descubrir por qué obtiene mejores o peores resultados (y de esa manera puede jugar con diferentes tamaños de bloque, etc.). Barracuda es completamente seguro. La compresión puede o no ser para ti. Y siempre puede experimentar con otros métodos de compresión como la compresión de blobs del lado del cliente (por ejemplo, si termina vinculado a la CPU) u otros motores de terceros como RocksDB y TokuDB , en los que la compresión es una gran prioridad, ya que está enfocada en rendimiento para conjuntos de datos más grandes de lo que InnoDB puede manejar.

En pocas palabras: las principales razones para usar Barracuda son el manejo de BLOB, la innodb_large_prefixcompatibilidad (índices grandes) y la compresión. Dinámico, en MySQL 8.0 ahora es el formato de archivo predeterminado.

jynus
fuente
1
¡Esta es una respuesta realmente INCREÍBLE y clara! Tiene todo el sentido y es exactamente el tipo de respuesta que deseaba. Estás mencionando MySQL 5.6 (que es a lo que me he actualizado recientemente) y me refieres a Facebook como un ejemplo, como me gusta, ya que generalmente tienen que superar los desafíos antes que los demás. Desafortunadamente, no será fácil probar esto primero, ya que un entorno de prueba no tendrá la misma carga de CPU / IO / RAM que la producción, ¡pero de hecho tendré que intentarlo! Muchas gracias por tu tiempo.
Nuno
Como el formato de fila se puede elegir a nivel de tabla, eso puede brindarle cierta flexibilidad para realizar pruebas en producción (después de las pruebas adecuadas en una máquina separada). Sin embargo, este enfoque hará que la depuración y la evaluación comparativa sean más difíciles.
jynus
Sí, probablemente podría intentar convertir algunas tablas primero (tal vez aquellas que no son tan grandes / usadas). Sin embargo, para los grandes, eso requeriría algunos tiempos de inactividad, en lugar de solo 1 tiempo de inactividad, donde los convertiría todos a la vez. Tendré que ver cuál es el mejor enfoque. Sin embargo, no entiendo por qué haría que la depuración sea más difícil. ¿Qué quieres decir exactamente aquí? Muchas gracias.
Nuno
1
Tiene herramientas como pt-online-schema-change percona.com/doc/percona-toolkit/2.2/… para recrear tablas en línea. Acabo de mencionar que mezclar solo algunas tablas puede hacer que sea más difícil medir los cambios de CPU / memoria / iops debido al cambio del motor y diferenciarlos de los cambios de carga normales o debido a los cambios de almacenamiento en caché al recrearlo. También es difícil de ver en una máquina diferente con hardware diferente, así que ¡buena suerte!
jynus
En ZFS, no es absolutamente que no sea bueno cuando se usa LZ4 en el sistema de archivos.
Denis Denisov