Команда 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.