Приостановить и возобновить выполнение запроса MySQL - PullRequest
6 голосов
/ 23 ноября 2011

У меня довольно медленный запрос (на самом деле это загрузка данных из mysql.dump).Теперь я хочу проверить, сколько строк уже загружено.

select count(*) from my_table;

Поскольку данные загружаются, my_table заблокирован, поэтому я не могу выполнить этот sql до загрузки дампа.

Cmd       ID   State               User   Host           DB      Time   Query                           
Query     191  update              root   localhost      rehub   00:09  INSERT INTO `my_table` VALUES ...
Query     189  Waiting for table   root   localhost      rehub   06:25  select count(*) from my_table

Так есть ли способ приостановить запрос 191, выполнить запрос 189, а затем возобновить запрос 191?

Ответы [ 3 ]

4 голосов
/ 23 ноября 2011

Нет, нет способа приостановить запрос.

Если вы выполняете массовую загрузку, вы можете использовать массовый загрузчик, который фиксирует каждые несколько тысяч строк.

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

2 голосов
/ 23 ноября 2011

Цитировать из руководства :

Все опции, которые обозначает --opt, также включены по умолчанию потому что --opt включен по умолчанию.

Поэтому, когда вы добавляете –-extended-insert=FALSE и --add-locks=FALSE к параметрам mysqldump, ваш выбор счетчика (*) должен работать. В зависимости от вашей ситуации остерегайтесь проблем с ссылочной целостностью вашей базы данных. И это замедлит импорт!

0 голосов
/ 23 ноября 2011

Вы все еще можете получить количество вставленных записей, используя show innodb status

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