¿Tener demasiadas tablas (200 por ejemplo) en una sola instancia de base de datos Mysql puede reducir su rendimiento?
mysql
performance
usuario25704
fuente
fuente
El número de tablas no importa tanto como:
Tener tablas en exceso significa memoria y espacio en el disco duro que podría recuperarse y utilizarse para otras cosas. Tenga en cuenta que desnormalizar sus tablas aumenta el riesgo de datos incorrectos porque se está deshaciendo de la integridad referencial.
fuente
En general, 200 tablas no deberían ser un problema, pero depende de varias cosas.
Servidor MySQL dedicado vs Servidor compartido con otro software, 128Mb vs 128Gb RAM, etc., tablas pequeñas con pocos registros vs tablas con blobs y millones de filas.
MySQL tiene configuraciones múltiples y múltiples motores, cada uno de los cuales afecta el rendimiento de las tablas de diferentes maneras.
MyISAM normalmente tiene tres archivos por tabla .frm, .MYD, .MYI
INNODB en modo normal tiene .frm con todos los datos almacenados en el archivo central
INNODB en un archivo por modo de tabla tiene .frm, .idb
table_open_cache es el número de tablas que se pueden abrir a la vez (Predeterminado 64). Es posible que esto deba ser mayor que la cantidad de tablas en su esquema, ya que está relacionado con cuántas conexiones están consultando la base de datos. 100 conexiones unen 3 tablas podría significar que tiene 300 tablas en caché más cualquier tabla temporal. En general, un esquema o conexiones más complejas cuanto mayor sea el número.
open-files-limit Tiendo a establecer esto en 4x table_open_cache, que debería ser generoso en lugar de molestarse en calcular un valor exacto.
El límite de manejo de archivos del sistema operativo para el usuario de mysql también puede ser un problema (en Linux el valor predeterminado a menudo puede ser 1024, ulimit -n para mostrar los límites del usuario) esto puede causar un problema con un gran número de tablas cuando es menor que el número MySQL requiere. Esto debería ser al menos igual que el límite de archivos abiertos.
Como con cualquier base de datos, hay cientos de parámetros de ajuste que puede ajustar para optimizar la base de datos para su esquema particular. MySQL es peor para esto que la mayoría, ya que puede conectar motores adicionales si lo desea, es decir, motor de clúster NDB.
http://dev.mysql.com/doc/refman/5.1/en/table-cache.html
Espero eso ayude
fuente
Para el índice de cada tabla, MySQL tiene su propio índice. El índice requiere memoria para retener y usar, y hay un límite global para los índices. Cuando hay muchas tablas, los índices no pueden estar todos en la RAM, por lo que van al disco, lo que afecta el rendimiento directamente. Intente plantear esto en
my.cnf
:key_buffer_size=256M
esta es la cantidad de RAM reservada para mantener la información del índice.fuente
¿Puede? Por supuesto. Pero cuánto depende en gran medida de su aplicación y sus patrones de acceso, y si está utilizando myisam o innodb, y si innodb está en modo de archivo por tabla o no, y el tamaño de los registros de innodb. Tendrá que darnos más detalles que eso.
fuente
No, no creo que el número de tablas sea el cuello de botella de rendimiento en su sistema. Después de todo, son solo archivos en su sistema de archivos. No hay nada inusual en tener cientos de tablas en una base de datos.
Mucho más probable es que sus consultas no estén correctamente optimizadas. Aconsejaría activar el
log-slow-queries
ylog-queries-not-using-indexes
. Cuando identifique consultas lentas, use laexplain
opción para ver el plan de consulta de estas consultas para identificar los lugares donde faltan índices.Consulte http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html para obtener más detalles.
fuente