Команда SHOW [FULL] PROCESSLIST
показывает, какие потоки запущены в
настоящий момент. Эту информацию также можно получить при помощи команды
mysqladmin processlist
. Если у вас привилегия SUPER
, можно
просматривать все потоки, в противном случае - только свои потоки. See Раздел 4.5.5, «Синтаксис команды KILL
».
Если не используется параметр FULL
, будут показаны только первые 100
символов каждого запроса.
Начиная с 4.0.12, MySQL сообщает имя хоста для TCP/IP соединений как
имя_хоста:клиентский_порт
с тем, чтобы было проще понять, какой клиент
чем занят.
Эта команда очень полезна, если выдается сообщение об ошибке '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-external-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
.