2009-04-06 2 views
7

У меня долгий процесс в MySQL. Он работает в течение недели. Есть еще одно соединение с мастером репликации, но я остановил рабочую обработку, поэтому фактически ничего не происходит.Как узнать, застрял ли процесс MySQL?

Как узнать, работает ли этот процесс? Я знал, что это займет много времени, поэтому я помещаю его в свой собственный экземпляр базы данных, но это длиннее, чем я ожидал. Очевидно, что если он все еще работает, я не хочу его убивать. Если он зомбирован, я не знаю, как выполнить проделанную работу, которую он должен делать.

Это состояние «Отправка данных». Таблица является InnoDB, но без ссылок FK, которые используются в запросе. Статус InnoDB не показывает ошибок или блокировок с момента запуска запроса.

Любые мысли приветствуются.

ответ

3

Вам нужно убить его и получить лучшие показатели.

Я проделал работу для парня. Имел таблицу с примерно 35 миллионами строк. Его серийный процесс, как и ваш, выполнял в неделю, без конца. Я добавил некоторые индексы, внес некоторые изменения в порядок и методы его пакетного процесса, и получил все это примерно до двух с половиной часов. На более медленной машине.

+0

Вы правы, что это не индексируется так хорошо, как могло бы быть. Но, конечно, если улучшение индексов приведет к запуску процесса, позволяя ему работать, как это произойдет, сразу после более длительного времени. То, что я не могу сказать, это то, что он вообще что-то делает, на данный момент. – user87843

5

Попробуйте «SHOW PROCESSLIST», чтобы узнать, что активно.

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

+0

Он активен в списке процессов в состоянии «Передача данных». Количество секунд, в течение которых оно было активным, продолжает увеличиваться. Я просто не знаю, как сказать, действительно ли это что-то делает или нет. – user87843

+0

Меняются ли размеры файлов? Кроме того, вы должны увидеть некоторый эффект в SHOW STATUS (в разных правилах и кешах). – dkretz

0

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

1

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

Смежные вопросы