Не удается добавить индекс к полю с помощью InnoDB?

#mysql #indexing #innodb

#mysql #индексирование #innodb

Вопрос:

всем привет, у меня есть таблица innodb, для которой я пытаюсь запустить индекс, и я получаю следующую ошибку:

 Deadlock found when trying to get lock; try restarting transaction
  

Синтаксис такой:

 ALTER TABLE mytable ADD INDEX (fieldtoindex);
  

есть идеи относительно того, почему это приведет к ошибке взаимоблокировки? Спасибо!

Комментарии:

1. Что-то еще использует базу данных, пока вы пытаетесь добавить индекс?

Ответ №1:

Вы не предоставляете достаточно информации, чтобы ответить на ваш вопрос.

В InnoDB, как правило, при возникновении ошибки, посмотрите на выходные данные SHOW ENGINE INNODB STATUS. Вы хотите запустить это в клиенте командной строки и завершить команду символом G (обратная косая черта в верхнем регистре G), чтобы сделать вывод читаемым.

В вашем случае соответствующая информация будет находиться в верхней части вывода состояния SHOW ENGINE INNODB, где говорится что-то вроде

 ------------------------
LATEST DETECTED DEADLOCK
------------------------
100720 14:27:32
*** (1) TRANSACTION:
TRANSACTION 3 572739397, ACTIVE 2 sec, process no 3057, OS thread id 1362831680 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1216, 3 row lock(s)
MySQL thread id 37496388, query id 1645924019 host 10.147.209.20 db Updating
update t set aid='4921978'  where id in (302885,303582,303907,303911)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 36004 page no 147 n bits 216 index `PRIMARY` of table `db`.`t` trx id 3 572739397 lock_mode X locks rec but not gap waiting
Record lock, heap no 43 PHYSICAL RECORD: n_fields 19; compact format; info bits 0
  

Здесь перечислены соответствующие имена таблиц и индексов, а также задействованные операторы. С этой информацией ваша проблема становится разрешимой.

Смотрите также http://www.mysqlperformanceblog.com/2006/07/17/show-innodb-status-walk-through / для получения дополнительной информации.

Если это случается чаще, взгляните на http://freshmeat.net/projects/innotop, экран «D» (отображение взаимоблокировки).