Bloqueia o tempo limite ao criar o índice

1

Eu estou tentando criar um novo índice em uma tabela existente com 44.485 registros nele.

Estou usando essa consulta para criar meu novo índice

CREATE INDEX index_name ON table_name (field_name);

Sempre que eu executo isso, recebo esse erro de tempo limite:

1205 - Lock wait timeout exceeded; try restarting transaction

Isso é apenas na minha máquina local de desenvolvimento, de modo que não haja nenhum outro processo ocupando o banco de dados.

Existe um método preferido de adicionar novos índices a tabelas existentes?

Obrigado

    
por Neil Aitken 15.12.2009 / 17:32

1 resposta

3

Você pode aumentar o tempo limite de bloqueio com um InnoDB:

Edite /etc/my.cnf ou /etc/mysql/my.cnf (supondo que sua máquina dev seja Linux / Unix)

Descomente (ou adicione) a linha:

innodb_lock_wait_timeout = 50

E altere a configuração para um número maior, digamos 300. É em segundos.

Reinicie o mysql e execute novamente a sua consulta.

Como alternativa, você pode despejar os dados, descartar a tabela, recriá-la com o índice e trazer os dados de volta. Ou pode criar uma nova tabela com o índice e selecionar os dados da tabela antiga na nova tabela. Em ambos os casos, você pode dividir a importação / cópia de dados em partes menores (leia-se: transações), que não excederão o tempo limite.

    
por 15.12.2009 / 17:43