mysql INNODB insere muito lento

mysql INNODB insere muito lento

O esquema do banco de dados é o seguinte.

 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;

Agora, fazer uma inserção nesta tabela leva 0,22 segundos. Não sei por que está demorando tanto para fazer uma inserção de linha única. As leituras são realmente muito rápidas, algo em torno de 0,005 segundos. Usando o exemplo de configuração daquidev mysql innodba média é de ~0,002 a ~0,005 segundos. Por que leva mais de 100 vezes mais tempo para fazer uma única inserção não faz sentido para mim. Meu computador é o seguinte. SO: Debian Sid x86-x64, Mysql 5.1, RAM: 4GB DDR2, CPU 2.0Ghz dual core, HDD 7200RPM 32MB cache 640GB.

Por que está demorando quase 100 vezes mais tempo para um SELECT * FROM items; vs INSERIR EM items...; nunca fará sentido para mim. Ainda é uma tabela pequena com apenas 70 linhas e demorava tanto mesmo quando tinha 0 linhas.

Editar: Além disso, esta tabela possui algumas outras tabelas vinculadas a si mesma por meio do id. Existem alguns deles por aí que estão vinculados a ele e fazem um on update=cascade; em delete=cascata;. Acredito que esse seja o maior problema aqui. Se for, provavelmente poderei alterá-lo e fazer exclusões individuais de várias pequenas coisas quando elas forem removidas. A velocidade de inserção parece ser de aproximadamente 0,2 segundos, quer eu esteja fazendo a inserção apenas itemsou também em outra tabela que tenha um link de chave estrangeira para a principal.

Responder1

Bem, meu primeiro palpite é que seu InnoDB provavelmente está quebrado. Você pode verificar se não há nenhum

  • gatilhos que fariam operação lenta na inserção
  • processos em andamento que bloqueariam a tabela
  • chaves estrangeiras/restrições apontando para esta tabela

A melhor maneira de auditar completamente um banco de dados contra qualquer coisa que possa causar tais problemas é ler o dump dos esquemas do comando mysqldump.

informação relacionada