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».
-
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могут происходить следующие операции:Запись события в двоичный журнал
Освобождение буферов памяти, включая для 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, но в некоторых случаях потоку может потребоваться немного времени, чтобы завершиться. Если поток заблокирован другим потоком, прерывание вступит в силу, как только другой поток освободит блокировку. -
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Для операций с таблицей, таких как ремонт или анализ, поток сохраняет новое состояние таблицы в заголовке файла
.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.