10.14.3 Состояния потоков
В следующем списке описываются значения потоков State, которые связаны с общей обработкой запросов, а не более специализированными операциями, такими как репликация. Многие из них полезны только для поиска ошибок в сервере.
-
After createЭто происходит, когда поток создаёт таблицу (включая внутренние временные таблицы), в конце функции, которая создаёт таблицу. Это состояние используется даже если таблица не могла быть создана из-за какой-либо ошибки.
-
altering tableСервер выполняет операцию
ALTER TABLEна месте. -
AnalyzingПоток вычисляет распределение ключей таблицы
MyISAM(например, дляANALYZE TABLE). -
checking permissionsПоток проверяет, имеет ли сервер необходимые привилегии для выполнения оператора.
-
Checking tableПоток выполняет операцию проверки таблицы.
-
cleaning upПоток обработает одну команду и готовится освободить память и сбросить некоторые переменные состояния.
-
closing tablesПоток записывает изменённые данные таблицы на диск и закрывает используемые таблицы. Эта операция должна быть быстрой. Если нет, проверьте, что у вас не переполнен диск и что диск не сильно загружен.
-
committing alter table to storage engineСервер завершил операцию
ALTER TABLEна месте и подтверждает результат. -
converting HEAP to ondiskПоток конвертирует внутреннюю временную таблицу из таблицы
MEMORYв таблицу на диске. -
copy to tmp tableПоток обрабатывает оператор
ALTER TABLE. Это состояние происходит после создания таблицы с новой структурой, но перед копированием строк в неё.Для потока в этом состоянии Performance Schema может быть использован для получения информации о прогрессе операции копирования. Смотрите Раздел 29.12.5, «Performance Schema Stage Event Tables».
-
Copying to group tableЕсли у оператора есть разные критерии
ORDER BYиGROUP BY, строки сортируются по группам и копируются во временную таблицу. -
Copying to tmp tableСервер копирует данные во временную таблицу в памяти.
-
Copying to tmp table on diskСервер копирует данные во временную таблицу на диске. Временный результат стал слишком большим (см. Раздел 10.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могут происходить следующие операции:Запись события в двоичный журнал
Освобождение буферов памяти, включая буферы для блобов
-
executingПоток начал выполнение оператора.
-
Execution of init_commandПоток выполняет операторы в значении системной переменной
init_command. -
freeing itemsПоток выполнил команду. Это состояние обычно следует за состоянием
cleaning up. -
FULLTEXT initializationСервер готовится выполнить полнотекстовый поиск по естественному языку.
-
initЭто происходит перед инициализацией операторов
ALTER TABLE,DELETE,INSERT,SELECTилиUPDATE. Действия сервера в этом состоянии включают сброс двоичного журнала и журналаInnoDB. -
KilledКто-то отправил оператор
KILLпотоку, и он должен прерваться при следующей проверке флага прерывания. Флаг проверяется в каждом основном цикле MySQL, но в некоторых случаях потоку может потребоваться немного времени для завершения. Если поток заблокирован другим потоком, прерывание вступит в силу сразу же, как только другой поток освободит блокировку. -
Locking system tablesПоток пытается заблокировать системную таблицу (например, таблицу часовых поясов или журнал).
-
logging slow queryПоток записывает оператор в журнал медленных запросов.
-
loginНачальное состояние потока соединения до успешной аутентификации клиента.
-
manage keysСервер включает или отключает индекс таблицы.
-
Opening system tablesПоток пытается открыть системную таблицу (например, таблицу часовых поясов или журнал).
-
Opening tablesПоток пытается открыть таблицу. Это должно быть очень быстрая процедура, если нет препятствий для открытия. Например, оператор
ALTER TABLEилиLOCK TABLEмогут препятствовать открытию таблицы, пока оператор не завершится. Также стоит проверить, что значениеtable_open_cacheдостаточно велико.Для системных таблиц используется состояние
Opening system tables. -
optimizingСервер выполняет начальную оптимизацию запроса.
-
preparingЭто состояние возникает во время оптимизации запроса.
-
preparing for alter tableСервер готовится выполнить операцию
ALTER TABLEна месте. -
Purging old relay logsПоток удаляет не нужные файлы релейного журнала.
-
query endЭто состояние возникает после обработки запроса, но перед состоянием
freeing items. -
Receiving from clientСервер считывает пакет от клиента.
-
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Для операций с таблицей
MyISAM, таких как ремонт или анализ, поток сохраняет новое состояние таблицы в заголовке файла.MYI. Состояние включает информацию, такую как количество строк, счётчикAUTO_INCREMENTи распределение ключей. -
Searching rows for updateПоток выполняет первую фазу для поиска всех совпадающих строк перед их обновлением. Это необходимо, если оператор
UPDATEизменяет индекс, используемый для поиска вовлечённых строк. -
Sending dataЭто состояние теперь включено в состояние
Executing. -
Sending to clientСервер отправляет пакет клиенту.
-
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это состояние означает, что поток запрашивает блокировку (а не ожидает её).Для системных таблиц вместо состояния
Locking system tablesиспользуется состояние. -
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 handler commitПоток ожидает подтверждения транзакции по сравнению с другими частями обработки запросов.
-
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
Сведения о маркерах блокировки таблиц см. в Разделе 10.11.1, «Методы внутренней блокировки». Сведения о блокировке метаданных см. в Разделе 10.11.4, «Блокировка метаданных». Чтобы увидеть, какие блокировки блокируют запросы блокировки, используйте таблицы блокировки Performance Schema, описанные в Разделе 29.12.13, «Таблицы блокировки Performance Schema».
-
Waiting on condОбщее состояние, в котором поток ожидает, пока условие не станет истинным. Информация о состоянии не доступна.
-
Writing to netСервер отправляет пакет в сеть.
© 2025 Oracle
Licensed under the GPLv2 License.