Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 15232|Ответ: 3

[Источник] Решение с 100% высоким уровнем процессора MySQL

[Скопировать ссылку]
Опубликовано 11.10.2018 11:20:31 | | | |
Откройте диспетчер задач сервера и увидим, что процесс CPU всегда был на 99%, а вид занят процессом mysql, который был высоким.


Выход команды processlist показывает, какие потоки работают, и вы можете проверить текущее состояние базы данных.

1. Зайдите в каталог mysql/bin и введите mysqladmin processlist;
2. Запустите mySQL и введите список процессов показа.
Если у вас есть разрешение SUPER, вы можете видеть все темы, в противном случае — только темы вашего аккаунта.





Значение и назначение каждого столбца

id: идентификатор
user: отображает текущего пользователя, если он не root, эта команда будет отображать только SQL-операторы в пределах ваших прав.
host: показывает, с какого IP это сообщение исходит с какого порта
база данных: отображает базу данных, к которой сейчас подключён процесс.
Command: Отображает команды, выполняемые текущим соединением, обычно спящий, запрос и подключение.
время: Время, которое длится это состояние, в секундах.
Состояние: Отображает статус SQL-оператора, использующего текущее соединение, но запрашивалось только определённое состояние при выполнении — sql-оператор, например, может потребоваться копирование в таблицу tmp, сортировка результатов, отправка данных и т.д.
info: Отображает этот SQL-оператор, потому что длина ограничена, поэтому длинный SQL-оператор не отображается полностью, но он является важной основой для оценки задачи.


Выяснилось, что существует два SQL-запроса, которые занимают больше всего времени и не выполнялись более 1000 секунд, а SQL-операторы, скопированные из информационного поля, являются совместным запросом, следующим образом:

выберите cast(count(*) as SIGNED) как col_0_0_ из 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ где baseinfoco1_. CompanyId=ratedpasse0_. CompanyId и ordermatch2_. OrderId=ratedpasse0_. OrderId

Мы убиваем процесс этих двух запросных утверждений

После 10 секунд ожидания я обнаружил, что процессор сильно упал, но всё равно был очень высокий, и я продолжу выяснять причину!



Для оператора join joint query добавьте индекс в соответствующее поле или измените код запроса программы.
Создайте индекс SQL-оператора

Конец





Предыдущий:C# войти в WordPress
Следующий:Измените метод отображения портов для docker-контейнеров
 Хозяин| Опубликовано 11.10.2018 13:03:02 |
Самым критичным в этой команде является столбец состояний, и в mysql перечисленные состояния в основном следующие:

Таблица для проверки  
  Проверяю технический лист (это автоматически).  
  Закрытие столов  
  Данные, изменённые в таблице, смываются на диск, а использованная таблица закрывается. Это быстрая операция, если нет — проверьте, заполнено ли место на диске или диск под нагрузкой.  
  Соединяйтесь  
  Подчинённый сервер репликации подключается к основному серверу.  
  Копирование в таблицу tmp на диске  
  Поскольку временный набор результатов превышает tmp_table_size, временная таблица преобразуется из встроенной памяти в дисковое хранилище для сохранения памяти.  
  Создание таблицы tmp  
  Создаётся временная таблица для хранения некоторых результатов запросов.  
  Удаление из основной таблицы  
  Сервер выполняет первую часть многостольного удаления и только что удалил первую таблицу.  
  Удаление из таблиц ссылок  
  Сервер выполняет вторую часть многостольного удаления — удаление записей из других таблиц.  
  Столы для промыва  
  Делаю FLUSH TABLES, жду, пока другие потоки закроют таблицу данных.  
  Убит  
  Если запрос на ликвидацию отправляется в поток, поток проверяет флаг и отклоняет следующий запрос. MySQL проверяет наличие флагов убийства в каждом основном цикле, хотя в некоторых случаях поток может ненадолго прерываться. Если поток заблокирован другим потоком, запрос на закрытие вступит в силу сразу после снятия блокировки.  
  Заперто  
  Заблокировано другими запросами.  
  Передача данных  
  Запись запроса SELECT обрабатывается, пока результаты отправляются клиенту.  
  Сортировка для группы  
  Сортировка для GROUP BY.  
  Сортировка по порядку  
  Сортировка ведётся для ORDER BY.  
  Начальные таблицы  
  Этот процесс должен быть быстрым, если только не мешают другие факторы. Например, таблица данных не может быть открыта другим потоком до выполнения оператора ALTER TABLE или LOCK TABLE. Пытаюсь открыть стол.  
  Удаление дубликатов  
  Выполняется запрос SELECT DISTINCT, но MySQL не может оптимизировать дублирующиеся записи на предыдущем этапе. Поэтому MySQL должен снова удалить дублирующиеся записи перед отправкой результатов клиенту.  
  Откройте стол  
  Фиксация на таблице получается, но его необходимо изменить после изменения структуры таблицы. Уже снял блокировку, закрыл даташит и пытается снова открыть таблицу данных.  
  Ремонт путём сортировки  
  Инструкция fix — сортировать для создания индекса.  
  Ремонт с помощью keycache  
  Директива fix заключается в использовании индексного кэша для создания новых индексов по одному. Сортировка будет медленнее, чем Ремонт.  
  Поиск в строках для обновления  
  Для обновления определяются подходящие записи. Это должно быть сделано до того, как UPDATE изменит соответствующую запись.  
  Сон  
  Жду, когда клиент отправит новый запрос.  
  Системный замок  
  Жду, чтобы получить внешний системный замок. Если одновременно не работают серверы mysqld, запрашивающие одну и ту же таблицу, внешние системные блокировки можно запретить, добавив параметр –skip-external-locking.  
  Модернизация замка  
  INSERT DELAYED пытается заставить таблицу блокировки для вставки новой записи.  
  Обновление  
  Поиск совпадающих записей и их модификация.  
  Пользовательский замок  
  ждёт GET_LOCK().  
  Обслуживая столики  
  Поток был уведомлен, что структура технического листа была изменена и должна быть вновь открыта для получения новой структуры. Затем, чтобы вновь открыть таблицу данных, нужно дождаться, пока все остальные потоки закроют таблицу. Это уведомление происходит в следующих случаях: FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE или OPTIMIZE TABLE.  
  Ожидание вставки обработчика  
  INSERT DELAYED обработал все ожидающие вставки и ждёт нового запроса.  
  Большинство состояний соответствуют быстрым операциям, если поток остаётся в одном и том же состоянии несколько секунд, может возникнуть проблема, которую нужно проверить.
 Хозяин| Опубликовано 01.03.2019 10:26:49 |
Официальная ссылка на документацию:https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html
 Хозяин| Опубликовано 01.03.2019 10:34:13 |


Запрос к данным занимает 10 секунд.
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com