8.14.3 Общие состояния потоков
В следующем списке описаны значения потоков State, которые связаны с общей обработкой запросов, а не более специализированными операциями, такими как репликация. Многие из них полезны только для поиска ошибок в сервере.
-
After createЭто происходит, когда поток создаёт таблицу (включая внутренние временные таблицы), в конце функции, которая создаёт таблицу. Этот статус используется даже в случае, если таблица не могла быть создана из-за какой-либо ошибки.
-
altering tableСервер выполняет операцию изменения
ALTER TABLEна месте. -
AnalyzingПоток рассчитывает распределение ключей таблицы
MyISAM(например, дляANALYZE TABLE). -
checking permissionsПоток проверяет, обладает ли сервер необходимыми привилегиями для выполнения запроса.
-
Checking tableПоток выполняет операцию проверки таблицы.
-
cleaning upПоток обработав один запрос, готовится освободить память и сбросить некоторые переменные состояния.
-
committing alter table to storage engineСервер завершил операцию изменения
ALTER TABLEна месте и подтверждает результат. -
closing tablesПоток записывает изменённые данные таблицы на диск и закрывает используемые таблицы. Это должно быть быстрая операция. Если нет, проверьте, что у вас не заполнен диск и что диск не сильно загружен.
-
converting HEAP to ondiskПоток конвертирует внутреннюю временную таблицу из таблицы
MEMORYв таблицу на диске. -
copy to tmp tableПоток обрабатывает запрос
ALTER TABLE. Этот статус возникает после того, как таблица с новой структурой была создана, но до того, как строки были скопированы в неё.Для потока в этом состоянии Performance Schema может быть использован для получения информации о ходе операции копирования. См. Раздел 25.12.5, «Таблицы событий этапов Performance Schema».
-
Copying to group tableЕсли у запроса разные критерии
ORDER BYиGROUP BY, строки сортируются по группам и копируются во временную таблицу. -
Copying to tmp tableСервер копирует данные во временную таблицу в памяти.
-
Copying to tmp table on diskСервер копирует данные во временную таблицу на диске. Временный результат стал слишком большим (см. Раздел 8.4.4, «Использование внутренних временных таблиц в MySQL»). Вследствие этого, поток меняет временную таблицу с памяти на формат на диске для экономии памяти.
-
Creating indexПоток обрабатывает
ALTER TABLE ... ENABLE KEYSдля таблицыMyISAM. -
Creating sort indexПоток обрабатывает запрос
SELECT, который решается с помощью внутренней временной таблицы. -
creating tableПоток создаёт таблицу. Это включает создание временных таблиц.
-
Creating tmp tableПоток создаёт временную таблицу в памяти или на диске. Если таблица создана в памяти, но позже конвертируется в таблицу на диске, то состояние во время этой операции —
Copying to tmp table on disk. -
deleting from main tableСервер выполняет первую часть операции удаления из нескольких таблиц. Он удаляет только из первой таблицы и сохраняет столбцы и смещения для удаления из других (ссылочных) таблиц.
-
deleting from reference tablesСервер выполняет вторую часть операции удаления из нескольких таблиц и удаляет соответствующие строки из других таблиц.
-
discard_or_import_tablespaceПоток обрабатывает запрос
ALTER TABLE ... DISCARD TABLESPACEилиALTER TABLE ... IMPORT TABLESPACE. -
endЭто происходит в конце, но до очистки запросов
ALTER TABLE,CREATE VIEW,DELETE,INSERT,SELECTилиUPDATE.В состоянии
endмогут происходить следующие операции:Удаление записей кеша запросов после изменения данных в таблице
Запись события в бинарный лог
Освобождение буферов памяти, включая для BLOB
-
executingПоток начал выполнение запроса.
-
Execution of init_commandПоток выполняет запросы в значении системной переменной
init_command. -
freeing itemsПоток выполнил команду. Некоторые освобождения элементов, выполняемые в этом состоянии, включают кеш запросов. Это состояние обычно следует за состоянием
cleaning up. -
FULLTEXT initializationСервер готовится выполнить полнотекстовый поиск с использованием естественного языка.
-
initЭто происходит перед инициализацией запросов
ALTER TABLE,DELETE,INSERT,SELECTилиUPDATE. Действия сервера в этом состоянии включают сброс бинарного лога, логаInnoDBи некоторые операции очистки кеша запросов. -
KilledКто-то отправил запрос
KILLпотоку, и он должен прервать выполнение в следующий раз, когда проверит флаг прерывания. Флаг проверяется в каждом главном цикле MySQL, но в некоторых случаях потоку может потребоваться немного времени для завершения. Если поток заблокирован другим потоком, прерывание вступит в силу, как только другой поток освободит блокировку. -
logging slow queryПоток записывает запрос в журнал медленных запросов.
-
loginНачальное состояние потока соединения до успешной аутентификации клиента.
-
manage keysСервер включает или отключает индекс таблицы.
-
Opening tablesПоток пытается открыть таблицу. Это должна быть очень быстрая процедура, если не происходит что-то, препятствующее открытию. Например, запрос
ALTER TABLEили запросLOCK TABLEмогут предотвратить открытие таблицы до завершения запроса. Также стоит проверить, что значениеtable_open_cacheдостаточно велико. -
optimizingСервер выполняет начальную оптимизацию запроса.
-
preparingЭтот статус возникает во время оптимизации запроса.
-
preparing for alter tableСервер готовится выполнить операцию изменения
ALTER TABLEна месте. -
Purging old relay logsПоток удаляет не нужные файлы лога ретрансляции.
-
query endЭтот статус возникает после обработки запроса, но до состояния
freeing items. -
Receiving from clientСервер считывает пакет от клиента. Это состояние называется
Reading from netдо MySQL 5.7.8. -
Removing duplicatesЗапрос использовал
SELECT DISTINCTтаким образом, что MySQL не смог оптимизировать операцию distinct на ранней стадии. Из-за этого MySQL требует дополнительной стадии для удаления всех дублирующих строк перед отправкой результата клиенту. -
removing tmp tableПоток удаляет внутреннюю временную таблицу после обработки запроса
SELECT. Это состояние не используется, если временная таблица не была создана. -
renameПоток переименовывает таблицу.
-
rename result tableПоток обрабатывает запрос
ALTER TABLE, создал новую таблицу и переименовывает её для замены исходной таблицы. -
Reopen tablesПоток получил блокировку для таблицы, но после получения блокировки заметил, что структура таблицы изменилась. Он освободил блокировку, закрыл таблицу и пытается её снова открыть.
-
Repair by sortingКод восстановления использует сортировку для создания индексов.
-
Repair doneПоток завершил многопоточное восстановление таблицы
MyISAM. -
Repair with keycacheКод восстановления использует создание ключей по одному через кэш ключей. Это намного медленнее, чем
Repair by sorting. -
Rolling backПоток отменяет транзакцию.
-
Saving stateДля операций с таблицей, таких как ремонт или анализ, поток сохраняет новое состояние таблицы в заголовке файла
.MYI. Состояние включает в себя информацию, такую как количество строк, счётчикAUTO_INCREMENTи распределения ключей. -
Searching rows for updateПоток выполняет первую фазу для поиска всех совпадающих строк перед их обновлением. Это необходимо, если оператор
UPDATEизменяет индекс, используемый для поиска вовлечённых строк. -
Sending dataПоток читает и обрабатывает строки для оператора
SELECTи отправляет данные клиенту. Поскольку операции, происходящие в этом состоянии, часто предполагают большое количество операций с диском (чтение), это часто самое длительное состояние на протяжении всего выполнения запроса. -
Sending to clientСервер отправляет пакет клиенту. Это состояние называлось
Writing to netдо MySQL 5.7.8. -
setupПоток начинает операцию
ALTER TABLE. -
Sorting for groupПоток выполняет сортировку для удовлетворения запроса
GROUP BY. -
Sorting for orderПоток выполняет сортировку для удовлетворения запроса
ORDER BY. -
Sorting indexПоток сортирует страницы индексов для более эффективного доступа во время оптимизации таблицы
MyISAM. -
Sorting resultДля оператора
SELECTэто аналогично состояниюCreating sort index, но для невременных таблиц. -
startingПервый этап в начале выполнения оператора.
-
statisticsСервер вычисляет статистику для разработки плана выполнения запроса. Если поток находится в этом состоянии длительное время, сервер, вероятно, ограничен диском и выполняет другую работу.
-
System lockПоток вызвал
mysql_lock_tables(), и состояние потока не обновлялось с тех пор. Это очень общее состояние, которое может возникать по многим причинам.Например, поток запрашивает или ожидает системный или внешний блокировку таблицы. Это может произойти, когда
InnoDBожидает блокировку таблицы на уровне таблицы во время выполненияLOCK TABLES. Если это состояние вызывается запросами на внешние блокировки и вы не используете несколько серверов mysqld, которые обращаются к одним и тем же таблицамMyISAM, вы можете отключить внешние системные блокировки с помощью параметра--skip-external-locking. Однако внешние блокировки отключены по умолчанию, поэтому, вероятно, этот параметр не окажет никакого эффекта. ДляSHOW PROFILEэто состояние означает, что поток запрашивает блокировку (а не ждёт её). -
updateПоток готовится к началу обновления таблицы.
-
UpdatingПоток ищет строки для обновления и обновляет их.
-
updating main tableСервер выполняет первую часть обновления нескольких таблиц. Он обновляет только первую таблицу и сохраняет столбцы и смещения для использования при обновлении других (ссылочных) таблиц.
-
updating reference tablesСервер выполняет вторую часть обновления нескольких таблиц и обновляет совпадающие строки из других таблиц.
-
User lockПоток собирается запросить или ожидает консультативную блокировку, запрошенную с помощью вызова
GET_LOCK(). ДляSHOW PROFILEэто состояние означает, что поток запрашивает блокировку (а не ждёт её). -
User sleepПоток вызвал функцию
SLEEP(). -
Waiting for commit lockFLUSH TABLES WITH READ LOCKожидает блокировку подтверждения. -
Waiting for global read lockFLUSH TABLES WITH READ LOCKожидает глобальную блокировку чтения или глобальная системная переменнаяread_onlyустанавливается. -
Waiting for tablesПоток получил уведомление о том, что базовая структура таблицы изменилась, и ему необходимо переоткрыть таблицу, чтобы получить новую структуру. Однако для переоткрытия таблицы необходимо подождать, пока все остальные потоки не закроют таблицу.
Это уведомление возникает, если другой поток использовал
FLUSH TABLESили одно из следующих операторов для таблицы:FLUSH TABLES,tbl_nameALTER TABLE,RENAME TABLE,REPAIR TABLE,ANALYZE TABLEилиOPTIMIZE TABLE. -
Waiting for table flushПоток выполняет
FLUSH TABLESи ожидает, пока все потоки закроют свои таблицы, или поток получил уведомление о том, что базовая структура таблицы изменилась, и ему нужно переоткрыть таблицу, чтобы получить новую структуру. Однако для переоткрытия таблицы необходимо подождать, пока все остальные потоки не закроют таблицу.Это уведомление возникает, если другой поток использовал
FLUSH TABLESили одно из следующих операторов для таблицы:FLUSH TABLES,tbl_nameALTER TABLE,RENAME TABLE,REPAIR TABLE,ANALYZE TABLEилиOPTIMIZE TABLE. -
Waiting forlock_typelockСервер ожидает получения блокировки
THR_LOCKили блокировки из подсистемы блокировки метаданных, гдеlock_typeуказывает тип блокировки.Это состояние указывает на ожидание блокировки
THR_LOCK:Waiting for table level lock
Эти состояния указывают на ожидание блокировки метаданных:
Waiting for event metadata lockWaiting for global read lockWaiting for schema metadata lockWaiting for stored function metadata lockWaiting for stored procedure metadata lockWaiting for table metadata lockWaiting for trigger metadata lock
Сведения о показателях блокировки таблиц см. в разделе 8.11.1, «Внутренние методы блокировки». Сведения о блокировке метаданных см. в разделе 8.11.4, «Блокировка метаданных». Чтобы увидеть, какие блокировки препятствуют запросам на блокировку, используйте таблицы блокировки Performance Schema, описанные в разделе 25.12.12, «Таблицы блокировки Performance Schema».
-
Waiting on condОбщее состояние, в котором поток ожидает, пока условие не станет истинным. Конкретная информация о состоянии недоступна.
-
Writing to netСервер отправляет пакет в сеть. Это состояние называлось
Sending to clientначиная с MySQL 5.7.8.
© 2025 Oracle
Licensed under the GPLv2 License.