Подтвердить что ты не робот

Не может обновить запись, застрять

У меня проблема с моей текущей базой данных с mysql.

У меня есть более 100 ожиданий подключения на выбранной записи. когда я выполняю:

show processlist;

запрос выбора - это большой запрос, а остальные - запросы и вставки, обновления.

У меня есть одна база данных с 100 таблицами, а выбор - 5 соединений.

Есть ли способ временно остановить процесс и запустить другие процессы, как только все процессы будут завершены, тогда выбор может продолжаться?

4b9b3361

Ответ 1

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

BookOfZeus и tfb785 правы, прежде всего, у вас, вероятно, есть ошибки индексов. объяснение скажет вам, что именно представляет собой проблема и что искать. например, если у вас есть 5 объединений, и вы получите количество строк, например 100 000 и 100, а 1 и 1 и 1 - несколько 100 000 * 100, которые могут быть очень медленными.

внимательно прочитайте, что объясняет вам объяснение, и оптимизируйте свой запрос на основе этого.

innodb может быть хорошим вариантом, если вы часто обращаетесь к таблицам, потому что его блокировка строки блокирована для блокировки таблицы для myisam.

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

Ответ 2

Есть ли способ временно остановить процесс и запустить другие процессы, как только все процессы будут завершены, тогда выбор может продолжаться?

Я считаю, что вы используете MyISAM в качестве механизма хранения.

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

Невозможно остановить запрос SELECT так, как вы спрашиваете: записи могут привести к тому, что набор записей не будет отображаться. Хотя это может быть не фактический случай в вашей настройке, и теоретически запись может не повлиять на чтение (скажем, разные записи читаются и записываются), MyISAM не знает об этом и всегда блокирует целые таблицы на всякий случай.

Если вам нужна запись не для чтения блоков, переключитесь на InnoDB (хотя бывают случаи, когда записи также блокируют чтение).

Ответ 3

Вы не можете остановить выполняемый запрос и предоставить время другим запросам. Но есть три способа решить вашу проблему:

Первый путь: Измените уровень изоляции http://dev.mysql.com/doc/refman/5.6/en/mysql-acid.html Это также может означать, что вам нужно изменить механизм хранения, например. к InnoDB.

Второй способ: Постарайтесь ускорить выполнение с помощью индексов. Это так называемая временная память. Вы ускоряете свой запрос с большим объемом памяти для хранения деревьев индексов.

Третий способ: Ускорьте свою длительную работу выберите с перестановкой запроса (присоединяется и выбирает). Проанализируйте стоимость всех частей запроса.