SHOW PROCESSLIST
Команда SHOW [FULL] PROCESSLIST показывает, какие потоки запущены в
настоящий момент. Эту информацию также можно получить при помощи команды
mysqladmin processlist. Если у вас привилегия SUPER, можно просматривать
все потоки, в противном случае - только свои потоки. See section 4.5.5 Синтаксис команды KILL. Если не используется параметр FULL, будут показаны только первые
100 символов каждого запроса.
Эта команда очень полезна, если выдается сообщение об ошибке 'too many
connections' (слишком много соединений) и необходимо выяснить, что
происходит. MySQL резервирует одно дополнительное соединение для клиента с
привилегией SUPER, чтобы у вас всегда была возможность войти в систему и
произвести проверку (предполагается, что вы не станете раздавать эту
привилегию всем своим пользователям).
Некоторые состояния обычно можно увидеть в mysqladmin processlist.
- Checking table
Поток осуществляет [автоматическую] проверку таблицы.
- Closing tables
Означает, что поток записывает измененные данные таблиц
на диск и закрывает использующиеся таблицы. Выполнение этой операции
должно произойти быстро. Если на нее уходит значительное время,
убедитесь, что диск не переполнен или что диск не используется слишком
интенсивно.
- Connect Out
Подчиненный компьютер, подсоединенный к головному
компьютеру.
- Copying to tmp table on disk
Набор временных результатов превысил
tmp_table_size, и теперь поток изменяет таблицу временных данных,
расположенную в памяти, на дисковую таблицу, чтобы сохранить память.
- Creating tmp table
Поток создает временную таблицу, чтобы хранить
часть результатов для запроса.
- deleting from main table
При запуске первой части удаления нескольких
таблиц удаление производится только начиная с первой таблицы.
- deleting from reference tables
При запуске второй части удаления
нескольких таблиц удаляются совпадающие строки из других таблиц.
- Flushing tables
Поток запускает команду FLUSH TABLES и ожидает, пока
все потоки закроют свои таблицы.
- Killed
Кто-то направил команду на закрытие потока, и поток будет
закрыт при следующей проверке флага закрытия. Флаг проверяется при
каждом основном цикле в MySQL, но в некоторых случаях закрытие потока
может занять некоторое время. Если поток заблокирован другим потоком,
закрытие будет произведено сразу после того, как другой поток снимет
блокировку.
- Sending data
Поток обрабатывает строки для оператора SELECT, а также
направляет данные клиенту.
- Sorting for group
Поток осуществляет сортировку в соответствии с GROUP BY.
- Sorting for order
Поток осуществляет сортировку в соответствии с ORDER BY.
- Opening tables
Это просто означает, что поток пытается открыть
таблицу. Такая процедура осуществляется довольно быстро, если что-либо
не мешает открытию. Например, команды ALTER TABLE или LOCK TABLE могут
помешать открытию таблицы, пока выполнение команды не будет завершено.
- Removing duplicates
Запрос использовал команду SELECT DISTINCT таким
образом, что MySQL не смог произвести оптимизацию на начальном этапе.
Поэтому MySQL перед отправкой результатов клиенту должен выполнить
дополнительное удаление всех дублирующихся строк.
- Reopen table
Поток заблокировал таблицу, но обнаружил, что после
блокировки структура таблицы изменилась. Он снял блокировку, закрыл
таблицу и теперь пытается повторно ее открыть.
- Repair by sorting
Код восстановления использует сортировку для
создания индексов.
- Repair with keycache
Код восстановления использует создание ключей
один за другим, через кэш ключей. Это намного медленнее, чем Repair by
sorting.
- Searching rows for update
Поток осуществляет первую фазу - производит
поиск всех совпадающих строк, чтобы затем обновить их. Это действие
необходимо выполнить, если команда UPDATE изменяет индекс, который
используется для поиска указанных строк.
- Sleeping
Поток ожидает, когда клиент направит ему новую команду.
- System lock
Поток ожидает получения внешней системной блокировки
таблицы. Если не используется несколько серверов mysqld, которые
получают доступ к одним и тем же таблицам, системную блокировку можно
отключить при помощи параметра --skip-locking.
- Upgrading lock
Обработчик INSERT DELAYED пытается заблокировать
таблицу, чтобы вставить строки.
- Updating
Поток производит поиск строк, которые необходимо обновить, и
обновляет их.
- User Lock
Поток ожидает GET_LOCK().
- Waiting for tables
Поток получил уведомление, что структура таблицы
изменилась, и ему необходимо повторно открыть таблицу, чтобы получить
новую структуру. Чтобы повторно открыть таблицу, он должен подождать,
пока ее не закроют все остальные потоки. Это уведомление выдается,
если другой поток воспользовался командой FLUSH TABLES или к таблице
была применена одна из следующих команд: FLUSH TABLES table_name,
ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE или OPTIMIZE TABLE.
Обработчик INSERT DELAYED завершил работу
со всеми вставками и ожидает новые.
Большинство состояний - это очень быстрые операции. Если потоки остаются в
любом из этих состояний на протяжении большого количества секунд, то,
возможно, возникла какая-то проблема, которую следует устранить.
Существует еще несколько состояний, не упомянутых выше, но большинство из
них полезны только для поиска ошибок в mysqld.
Содержание раздела