mysql INNODB se inserta muy lento

mysql INNODB se inserta muy lento

El esquema de la base de datos es el siguiente.

 CREATE  TABLE  `items` (  
 `id` mediumint( 8  )  unsigned NOT  NULL  AUTO_INCREMENT ,
 `name` varchar( 45  )  NOT  NULL ,
 `main_type` tinyint( 4  )  NOT  NULL ,
 `rarity` tinyint( 4  )  NOT  NULL ,
 `stack_size` smallint( 6  )  NOT  NULL ,
 `sub_type` tinyint( 4  )  NOT  NULL ,
 `cost` mediumint( 8  )  unsigned NOT  NULL ,
 `ilvl` smallint( 6  )  unsigned NOT  NULL DEFAULT  '0',
 `flavor_text` varchar( 250  )  NOT  NULL ,
 `rlvl` tinyint( 3  )  unsigned NOT  NULL ,
 `final` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 PRIMARY  KEY (  `id`  )  ) ENGINE  = InnoDB  DEFAULT CHARSET  = ascii;

Ahora, hacer una inserción en esta tabla toma 0,22 segundos. No sé por qué se tarda tanto en insertar una sola fila. Las lecturas son realmente rápidas, algo así como 0,005 segundos. Con el uso de la configuración de ejemplo desde aquídesarrollador mysql innodbtiene un promedio de ~0,002 a ~0,005 segundos. No tiene sentido para mí por qué se necesita más de 100 veces más tiempo para hacer una sola inserción. Mi computadora es la siguiente. Sistema operativo: Debian Sid x86-x64, Mysql 5.1, RAM: 4 GB ddr2, CPU de doble núcleo a 2,0 Ghz, disco duro de 7200 RPM, caché de 32 MB y 640 GB.

¿Por qué se necesita casi 100 veces más tiempo para un SELECT * FROM items; frente a INSERTAR EN items...; Nunca tendrá ningún sentido para mí. Sigue siendo una tabla pequeña con solo 70 filas y tomó ese tiempo incluso cuando tenía 0 filas.

Editar: Además, esta tabla tiene bastantes otras tablas vinculadas a sí misma a través de la identificación. Hay algunos de ellos que están vinculados a él y realizan una actualización = cascada; en eliminar = cascada;. Creo que ese es el mayor problema aquí. Si es así, probablemente pueda entrar, cambiarlo y realizar eliminaciones individuales de las diversas pequeñas cosas cuando se eliminen. La velocidad de inserción parece ser de ~0,2 segundos, ya sea que esté insertando solo itemso también en otra tabla que tenga un enlace de clave externa a la principal.

Respuesta1

Bueno, mi primera suposición es que tu InnoDB probablemente esté roto. Puedes comprobar si no hay ninguno.

  • disparadores que harían una operación lenta al insertar
  • procesos en curso que bloquearían la mesa
  • claves externas/restricciones que apuntan a esta tabla

La mejor manera de auditar completamente una base de datos contra cualquier cosa que pueda causar tales problemas es leer el volcado de esquemas desde el comando mysqldump.

información relacionada