1


0

InnoDBでフィールドにインデックスを追加できませんか?

ちょっと、インデックスを実行しようとしているinnodbテーブルがあり、次のエラーが表示されます。

Deadlock found when trying to get lock; try restarting transaction

構文は次のとおりです。

ALTER TABLE mytable ADD INDEX (fieldtoindex);

それがデッドロックエラーをスローする理由に関するアイデアはありますか? ありがとう

1 Answer


0


質問に答えるのに十分な情報を提供していません。

InnoDBでは、一般的なルールとして、エラーが発生した場合、SHOW ENGINE INNODB STATUSの出力を確認してください。 これをコマンドラインクライアントで実行し、コマンドを\ G(バックスラッシュ大文字G)で終了して、出力を読みやすくします。

あなたの場合、関連情報はSHOW ENGINE INNODB STATUS出力の上部にあり、次のように表示されます。

------------------------
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」画面(デッドロック表示)をご覧ください。