Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 15232|Відповідь: 3

[Джерело] Рішення MySQL CPU 100%

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


Вихід команди processlist показує, які потоки запущені, і ви можете перевірити поточний робочий стан бази даних.

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





Значення та призначення кожної колонки

id: Ідентифікатор
user: відображає поточного користувача, якщо це не root, ця команда відображатиме лише SQL-оператори в межах ваших дозволів.
host: показує, з якої IP-адреси надходить ця заява, з якого порту
db: Відображає базу даних, до якої наразі підключений процес.
command: Відображає команди, виконані поточним з'єднанням, зазвичай sleep, request і connect.
час: Час, який триває цей стан, у секундах.
Стан: Відображає статус SQL-оператора, який використовує поточне з'єднання, але лише певний стан виконання оператора — SQL-оператор — був запитаний, наприклад, може знадобитися копіювання в таблицю tmp, сортування результатів, надсилання даних тощо
інфо: Відображає цей SQL-оператор, оскільки довжина обмежена, тому довгий SQL-оператор не відображається повністю, але це важлива основа для оцінки завдання.


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

виберіть cast(count(*) as SIGNED) як col_0_0_ з 'RatedPassenger' ratedpasse0_, 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ де baseinfoco1_. CompanyId=ratedpasse0_. Компанія та ordermatch2_. OrderId=ratedpasse0_. OrderId

Ми зупиняємо процес цих двох запитальних тверджень

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



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

Кінець





Попередній:C# увійти до Wordpress
Наступний:Модифікація методу відображення портів для docker-контейнерів
 Орендодавець| Опубліковано 11.10.2018 13:03:02 |
Найкритичнішим у цій команді є стовпець станів, і стани, перелічені в mysql, переважно такі:

Контрольна таблиця  
  Перевіряю технічний лист (це автоматично).  
  Закриття столів  
  Дані, змінені в таблиці, передаються на диск, а витрачена таблиця закривається. Це швидка операція, якщо ні — перевірте, чи заповнений дисковий простір або чи диск під навантаженням.  
  Зв'язок  
  Сервер реплікації підключається до основного сервера.  
  Копіювання у таблицю tmp на диску  
  Оскільки тимчасовий набір результатів більший за tmp_table_size, тимчасова таблиця конвертується з вбудованої пам'яті на дискове сховище для збереження пам'яті.  
  Створення таблиці tmp  
  Створюється тимчасова таблиця для зберігання деяких результатів запитів.  
  Видалення з головної таблиці  
  Сервер виконує першу частину багатостольного видалення і щойно видалив першу таблицю.  
  Видалення з таблиць посилань  
  Сервер виконує другу частину багатостольного видалення — видалення записів з інших таблиць.  
  Стіл для змивання  
  Роблю ПРОМИВАННЯ ТАБЛИЦЬ, чекаю, поки інші потоки закриють таблицю даних.  
  Вбитий  
  Якщо запит на вибивство надсилається потоку, він перевіряє прапорець і відмовляється від наступного запиту. 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