Está sintonizando el INNODB_BUFFER_POOL_SIZE IMPORTANTE EN SOLARIS ZFS?
Pregunta
Estamos ejecutando una base de datos de tamaño moderado (350 GB) con algunas tablas bastante grandes (unas pocas cientos de filas, 50 GB) en un servidor razonablemente grande (2 x Xeons Xeons, RAM de 24 GB, Discos de 2.5 "10K en RAID10), y están obteniendo algunas inserciones bastante lentas (por ejemplo, un inserto simple de una sola fila que toma 90 segundos).
Nuestro innodb_buffer_pool_size se establece en 400 MB, que normalmente sería demasiado bajo para este tipo de configuración.Sin embargo, nuestro proveedor de alojamiento aconseja que esto es irrelevante cuando se ejecuta en ZFS.¿Está bien?
(Disculpas por el doble publicación en https://dba.stackexchange.com/questions/1975/is-tuning-the-innodb-buffer-pool-size-important-on-saris-zfs , pero no estoy seguro de cuán grande¡La audiencia está por allí!)
Solución
Todavía establecería el InnoDB_Buffer_Pool_Size mucho más alto que 400m. ¿La razón? InnoDB Buffer Pool todavía almacenará en caché los datos y las páginas de índice que necesita para las tablas con acceso con frecuencia.
Ejecute esta consulta para obtener el SNODB_BUFFER_POOL_SIZE recomendado en MB:
Seleccionar concat (redondo (KBS / POWER (1024, IF (PW <0,0, SI (PW> 3,0, PW))) + 0.49999), Substr ('KMG', SI (PW <0, 0, IF (PW> 3,0, PW)) + 1,1)) recomendado_innodb_buffer_pool_size de (seleccione la suma (Data_Length + index_Length) KBS desde la información_schema.tables donde el motor= 'innodb') A, (Seleccione 2 PW) B;
Simplemente use el resultado de esta consulta o el 80% de la RAM instalada (en su caso 19660M), lo que sea más pequeño.
También establecería el InnoDB_LOG_FILE_SIZE al 25% del tamaño del búfer innodb. Desafortunadamente, el valor máximo de INNODB_LOG_FILE_SIZE es de 2047 m. (1M A falta de 2G) Por lo tanto, set Innodb_Log_File_Size a 2047M desde el 25% de Innodb_Buffer_Pool_Size de mi configuración recomendada es de 4915 m.
Otra recomendación es otra opción para Deshabilitar el cumplimiento del ácido . Use 0 o 2 para INNODB_FLUSH_LOG_AT_TRX_COMMIT (el valor predeterminado es 1 que admite el cumplimiento de ácido) Esto producirá una escritura innodb más rápida en el riesgo de perder hasta 1 segundo de transacciones en caso de un choque.
Otros consejos
Puede valer la pena leer Slow-MySQL-Inserts Si aún no lo ha hecho. También este enlace a los documentos mysql sobre el asunto - Especialmente con respecto a considerar una transacción si está realizando múltiples insertos en una tabla grande.
Más relevante es este artículo de MySQL sobre el desempeño de InnoDB y ZFS que considera específicamente el tamaño del grupo de búfer.