Процес MySQL перевищує 100% використання процесора


11

У мене є проблеми з моїм сервером LAMP. Останнім часом все стало дуже повільним, хоча кількість відвідувачів моїх веб-сайтів не дуже змінилася. Коли я запускаю topкоманду, це говорить про те, що процес MySQL зайняв понад 150-200% процесора. Як це можливо, я завжди вважав, що 100% - це максимум?

Я використовую серверне видання Ubuntu 9.04 з 1,5 ГБ оперативної пам’яті.

my.cnf налаштування:

key_buffer      = 64M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

myisam-recover         = BACKUP
max_connections        = 200
table_cache            = 512
table_definition_cache = 512
thread_concurrency     = 2

read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M

query_cache_limit   = 1M  # the maximum size of individual query results
query_cache_size    = 128M

Ось вихід MySQLTuner :

Вихід MySQLTuner

topкоманда:

верхній вихід

Що може бути причиною цієї проблеми? Чи можу я внести зміни до свого, my.cnfщоб запобігти зависанню сервера?

Відповіді:


15
  1. Збільшити ключовий буфер (ваш зараз 64МБ, але загальний індекс - 116М, тому покладіть принаймні 128МБ). Потрібно допомогти негайно.
  2. Запустіть mysqloptimize та mysqlrepair на своїх столах
  3. Збільшити кеш таблиці / зменшити загальну кількість таблиць, щоб збільшити швидкість звернення кешу таблиці. Можливо, у вас є кілька невикористаних або старих таблиць, які можна видалити.

Інші рекомендовані варіанти конфігурації:

  • log_slow_queries = /var/log/mysql/mysql-slow.log
  • long_query_time = 4
  • log-запити, що не використовують індекси

Через деякий час перевірте файл журналу.


Дякую за рекомендації, я спробую їх і повідомляю, чи допомогло це.
Темновит

скажіть, будь ласка, як ви підрахували, що загальні індекси - 116 млн?
Темновит


5

У вас є процесор, який має більше одного ядра, або у вас є кілька процесорів. Якщо у вас є два ядра і процес використовує 100% обох ядер, він відображатиметься як 200% вгорі.

Так само, ймовірно, це працює за призначенням - у вашій конфігурації нічого поганого. Якщо у вас виникають часті зависання, ви можете прочитати додавання належних індексів до своїх таблиць (або оптимізацію запитів).


5

Запустіть, top -Hщоб побачити всі запущені нитки, а не лише загальний процес. Крім того, якщо ви натискаєте 1клавішу під час зверху, вона покаже вам використання процесора для окремих процесорів / ядер.


Дякую, це мені дуже допомогло - я використовував топ років і не знав, що він має цю здатність. Я виявив, що існує одна "вічна" тема mysql, що споживає 60% CPU користувачів весь час, тоді як потоки запитів надходять і продовжують це. Тепер, щоб дізнатися, чим насправді займається ця тема
науковець

1

У Mysql є кілька процесів (потоків), які працюють незалежно, один, наприклад, відповідає за запис даних з пам'яті на диск. З декількома ядрами в процесорі (та / або декількох процесорах) працює більш ніж один потік, і тому він може запускати більше 100% одного ядра - на спрощеному рівні, можливо, 75% кожного з двох ядер працює , даючи 150%.


1

Я помітив проблему, не пов’язану з процесором. Якщо ви використовуєте apache та MySQL на одному сервері, ви можете досягати поганих умов ( ОЗУ ), коли активність вашої апаші збільшується.

MySQLTunner повідомляє вам, що за допомогою 200 доступних підключень (ваш максимальний параметр з'єднання) ви заповнить ОЗУ. Скажімо, у вас обмежено 150 процесів apache, вам точно не вистачить оперативної пам’яті, коли MySQL і apache будуть намагатися використовувати 150 підключень (як Apache - це також хороший оператор RAM).

Отже, це стосується оперативної пам’яті, і ви, можливо, ще не вдарили :-) Вгорі команд показують лише 15 апаратних процесів (але ви в середньому навантажуємо 3/6/16, тож означає, що шторм був 15 хвилин тому і зараз знаходиться в виїжджаючи).

Про проблему з процесором, щоб доповнити хорошу відповідь shakalandy , це може бути через один єдиний запит. Це може бути на величезній таблиці, або виконувати багато завдань з переіндексації, або використовувати багато тимчасового файлу, індекс відсутній (видалений?) І т. Д. Єдиний спосіб виявити це активація повільного запиту запитів (можливо з високим гуртом, як 8с). Потім за допомогою інструменту mysqlsla проаналізуйте цей журнал повільних запитів та запустіть деякі пояснення щодо виявлених запитів.


Дякую, справді, mysql - не єдиний процес навколо :)
Temnovit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.