mysql INNODB insere muito lento

3

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. Eu não sei porque está demorando tanto para fazer uma inserção de linha única. As leituras são realmente muito rápidas, algo como 0,005 segundo. Com o uso da configuração de exemplo aqui dev mysql innodb ele calcula a média de ~ 0.002 para ~ 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á levando quase 100 vezes mais tempo para um SELECT * FROM items ; vs INSERT INTO items ...; nunca fará qualquer sentido para mim. Ainda é uma pequena mesa com apenas 70 linhas e demorou muito, mesmo quando tinha 0 linhas.

Edit: Também esta tabela tem algumas outras tabelas ligadas a si mesmo através do id. Há alguns deles por aí que estão ligados a ele e fazem uma atualização em cascata; em delete = cascade ;. Eu acredito que esse é o maior problema aqui. Se for então, eu provavelmente posso entrar e alterá-lo e fazer exclusões individuais das várias pequenas coisas quando elas forem removidas. A velocidade de inserção parece ser de ~ 0,2 segundos, quer eu esteja fazendo a inserção em apenas items ou também fazendo isso em outra tabela que tenha um link de chave estrangeira para o principal.

    
por 133794m3r 25.12.2010 / 23:39

1 resposta

0

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

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

A melhor maneira de auditar completamente um banco de dados contra qualquer coisa que cause tais problemas é ler o despejo de esquemas do comando mysqldump.

    
por 25.12.2010 / 23:55

Tags