Блокировка колонки в innodb? - PullRequest
1 голос
/ 17 мая 2010

Я знаю, это звучит странно, но, очевидно, одна из моих колонок заблокирована.

select * from table where type_id = 1 and updated_at < '2010-03-14' limit 1;

select * from table where type_id = 3 and updated_at < '2010-03-14' limit 10;

первый не завершит работу даже через несколько часов, а второй завершится гладко. единственная разница - это type_id между двумя запросами.

немного предыстории, первое утверждение облажалось, перед которым мне пришлось убивать вручную.

Заранее спасибо за вашу помощь - мне нужно срочно закончить работу с данными, и эта проблема сводит меня с ума

Ответы [ 3 ]

0 голосов
/ 17 мая 2010

Столбец не может быть заблокирован, но диапазон индекса может. Show innodb status обычно сообщит вам, после какой активной транзакции ваша транзакция ожидает.

0 голосов
/ 17 мая 2010

Похоже, у вас нет индекса (type_id, updated_at) и ваша таблица довольно большая.

Создание индекса должно решить проблему:

CREATE INDEX type_updated_idx ON table (type_id, updated_at);

Предполагается, что у вас достаточно разрешений для создания определений данных.

0 голосов
/ 17 мая 2010

Вы пробовали запустить ANALYZE TABLE на уязвимом столе?

Вы можете рассмотреть возможность преобразования в таблицы MyISAM, поскольку таблицы InnoDB имеют проблемы и ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...