Tengo una tabla con alrededor de 1 mil millones de filas, y su lectura intensiva en un 98%.
Intenté ajustar la base de datos, con diferentes motores de almacenamiento (MyISAM e InnoDB)
Luego ejecuté algunas pruebas para ver el rendimiento
En la cláusula where, tenía una ID de clave principal, y parecía que dado que MyISAM Key Cache almacena todo el índice en su búfer, usar MyISAM parecía ser bastante rápido, alrededor de 2 veces más rápido que InnoDB
¡Pero para InnoDB, parecía más lento! ¿Es que InnoDB no utiliza ningún búfer para precargar los índices?
Respuestas:
Antes de decidirse por MyISAM o InnoDB, tendrá que revisar ambos motores de almacenamiento en términos de cómo cada caché
MyISAM
Cuando se lee, los índices de una tabla MyISAM se pueden leer una vez desde el archivo .MYI y cargarse en la caché de claves MyISAM (según el tamaño de key_buffer_size ). ¿Cómo puede hacer que una tabla MyISAM .MYD sea más rápida de leer? Con este:
Escribí sobre esto en mis publicaciones anteriores
Sep 20, 2011
: /dba/5974/best-of-myisam-and-innodb/6008#6008 (Lea este primero)May 10, 2011
: /dba/2640/what-is-the-performance-impact-of-using-char-vs-varchar-on-a-fixed-size-field/2643#2643 (TRADEOFF # 2)Aug 12, 2011
: /dba/4576/which-dbms-is-good-for-super-fast-reads-and-a-simple-data-structure/4589#4589 (Párrafo 3)Jan 03, 2012
: /dba/10069/optimized-my-cnf-for-high-end-and-busy-server/10080#10080 (Bajo el encabezado Replicación )InnoDB
OK, ¿qué hay de InnoDB? ¿InnoDB realiza alguna E / S de disco para consultas? Sorprendentemente, sí lo hace! Probablemente esté pensando que estoy loco por decir eso, pero es absolutamente cierto, incluso para consultas SELECT . En este punto, probablemente se esté preguntando "¿Cómo está InnoDB haciendo E / S de disco para consultas?"
Todo se remonta a que InnoDB es un motor de almacenamiento transaccional de queja ACID . Para que InnoDB sea Transaccional, debe admitir
I
inACID
, que es Aislamiento. La técnica para mantener el aislamiento de las transacciones se realiza a través de MVCC, Control de concurrencia multiversional . En términos simples, InnoDB registra el aspecto de los datos antes de que las transacciones intenten cambiarlos. ¿Dónde se graba eso? En el archivo de espacio de tabla del sistema, mejor conocido como ibdata1. Eso requiere E / S de disco .COMPARACIÓN
Dado que tanto InnoDB como MyISAM hacen E / S de disco, ¿qué factores aleatorios determinan quién es más rápido?
DELETEs
yUPDATEs
EPÍLOGO
Por lo tanto, en un entorno de lectura pesada, es posible que una tabla MyISAM con un formato de fila fija supere las lecturas de InnoDB del InnoDB Buffer Pool si se escriben suficientes datos en los registros de deshacer contenidos en ibdata1 para soportar el comportamiento transaccional impuesta a los datos de InnoDB. Planifique sus tipos de datos, consultas y motor de almacenamiento con mucho cuidado. Una vez que los datos crecen, puede ser muy difícil mover los datos.
Por cierto, escribí algo como esto hace 5 días: ¿Cómo asigno un límite de memoria para mySQL?
fuente
MyISAM siempre se ejecutará mucho más rápido que innodb cuando no haya contención para los datos. Comience a agregar varias sesiones tratando de actualizar el mismo tablse, e innodb obtiene rápidamente la ventaja de rendimiento.
La forma en que ajusta el sistema para los 2 motores es muy diferente.
La razón por la que existen diferentes motores es porque existen diferentes cargas de trabajo / patrones de acceso.
fuente
tienes que 'calentar' innodb. por ejemplo, reproduciendo registros de acceso o ejecutando algunas consultas inteligentes que tocarán cada valor del índice.
Echa un vistazo aquí o aquí .
Espero que no use la configuración predeterminada de mysql para innodb: fueron adecuados para hardware desde ~ 2000.
fuente
Consulte este sitio, tiene información muy útil:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
También puede ajustar su sistema de archivos. Tengo buenos resultados de rendimiento en XFS con valores óptimos de sunit y ancho (por supuesto, si usa RAID)
fuente
Después de ajustar aún más InnoDB en MariaDB,
innodb_buffer_pool_size
aumenté el tamaño de mi base de datos InnoDB, ya que al hacerlo, InnoDB comenzó a buscar filas más rápidoSupongo que ajustar InnoDB es bastante importante de acuerdo con las necesidades de su base de datos
fuente