Mysql Вопрос по оптимизации запроса insert select. Что быстрее может быть.

beba

Новичок
Здравствуйте.

Недавно столкнулся с одной проблемой. Пару раз в неделю приходит пару писем с ошибкой "Lock wait timeout exceeded; try restarting transaction".
Запрос выглядит следующим образом:

PHP:
insert into queue_desc_status_history
(status_id, queue_desc_id, queue_id, user_id, date_added)
select
status_id, queue_desc_id, queue_id, user_id, last_modified 
from
queue_desc
where
queue_id = ИДОЧЕРЕДИ
В первой таблице (queue_desc_status_history) сейчас записей 18 млн.
Во второй 4.5млн.
В обоих таблица стоит портирование по первичному ключу.
queue_id - ключевое поле.

Сервер: i7 920 (8x2.67), 24Gb DDR3, ЖД обычные SATA III не Enterprise.
Ключи все в оперативке, еще там есть место для них.

Вопроса в принципе два:
1. Оптимален ли такой запрос на вставку? Или лучше сделать отдельно SELECT а уже потом делать отдельные INSERT?
2. Может повлияло портирование таблиц? Не работал до этого, много читал положительного про портирование, и пока не было вопросов.

P.s. сервер тестовой среды пока в не рабочем состоянии (еще может дней 5), а на продакшене проверять не хотелось бы. Может тут кто подскажет по моей ситуации, по вопросам, которые возникли.

Спасибо
 

Gas

может по одной?
beba
похоже запрос не может получить блокировку на таблицу desc_status_history для вставки в течении времени
Код:
show variables like 'innodb_lock_wait_timeout';
смотри в slow_log'е какой запрос выполнялся и "держит" таблицу во время ошибки так долго и с ним что-то придумать

или вот статья на тему gap lock - http://www.mysqlperformanceblog.com/2012/03/27/innodbs-gap-locks/
может как раз твой случай, там пара советов в конце статьи, ну и самый прмитивный - увеличить innodb_lock_wait_timeout

но лучше разобраться в проблеме, а не просто втыкнуть workaround, который ещё может потянуть side-эффекты какие.
 

beba

Новичок
Gas
Спасибо, сейчас повкуриваю статью..
Параметр innodb_lock_wait_timeout я чутка увеличил, как временно решение, потому как найти проблему это для меня сейчас певроочередная задача. После верну на свое место. Про slow query log чет вылетело из головы, надо будет проанализировать.
 
Сверху