MySQL сильно потребляет процессор
Доброго времени суток, уважаемые коллеги. Столкнулся я вот с такой проблемой: хотели увеличить скорость работы сайта, за счёт увеличения кэшей в озу и перехода на SSD переехали c: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz 8 GB RAM 200GB HDD на сервер: AMD Opteron 3280 8 x 2,4 GHz 32 GB RAM 250GB SSD
А получили напротив жёсткие тормоза в часы пик. Сейчас пишу пост, всё летает, а по вечерам — тормоза. MySQL жрёт ЦПУ ядер 5, load average 12-15 иногда даже до 30 доходит. Наши характеристики в часы пик
75 посетителей онлайн, количество запросов в секунду почему-то после переезда выросло с 8 до 30, в то же время посещаемость сильно не изменилась.
Уже так и этак колдую с конфигом, c mysqltuner’ом и руками, немного ситуацию улучшил конечно, но проблема не уходит, скорость в часы пик ниже чем до переезда. Вот какой конфиг получился:
MySQL high CPU usage [closed]
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago .
Recently my server CPU has been going very high.
CPU load averages 13.91 (1 min) 11.72 (5 mins) 8.01 (15 mins) and my site has only had a slight increase in traffic.
After running a top command, I saw MySQL was using 160% CPU!
Recently I’ve been optimizing tables and I’ve switched to persistent connections. Could this be causing MySQL to use high amounts of CPU?
3 Answers 3
First I’d say you probably want to turn off persistent connections as they almost always do more harm than good.
Secondly I’d say you want to double check your MySQL users, just to make sure it’s not possible for anyone to be connecting from a remote server. This is also a major security thing to check.
Thirdly I’d say you want to turn on the MySQL Slow Query Log to keep an eye on any queries that are taking a long time, and use that to make sure you don’t have any queries locking up key tables for too long.
Some other things you can check would be to run the following query while the CPU load is high:
This will show you any queries that are currently running or in the queue to run, what the query is and what it’s doing (this command will truncate the query if it’s too long, you can use SHOW FULL PROCESSLIST to see the full query text).
You’ll also want to keep an eye on things like your buffer sizes, table cache, query cache and innodb_buffer_pool_size (if you’re using innodb tables) as all of these memory allocations can have an affect on query performance which can cause MySQL to eat up CPU.
You’ll also probably want to give the following a read over as they contain some good information.
It’s also a very good idea to use a profiler. Something you can turn on when you want that will show you what queries your application is running, if there’s duplicate queries, how long they’re taking, etc, etc. An example of something like this is one I’ve been working on called PHP Profiler but there are many out there. If you’re using a piece of software like Drupal, Joomla or Wordpress you’ll want to ask around within the community as there’s probably modules available for them that allow you to get this information without needing to manually integrate anything.
mysql нагружает процессор на 100%
Сервер сильно загружен (100%). Основную нагрузку создает процесс mysql (99.9%). Хостинг советует оптимизировать процесс mysql. Как это делается?
Вот как это делается: ищете толкового админа, даете ему бабла и еще на пиво. И радуетесь жизни . )))
Включить мониторинг тяжелых запросов, все что больше 1 секунды, то это плохо.
Включить мониторинг индексирования запросов, после эти данные передать прогеру, что бы он починил.
А что за хостинг( шаред, впс, или реальный сервер)?
Сделайте лог для медленных запросов, смотрите какие запросы медленные и по каким причинам. Возможно проще сменить хостинг, и не париться изучением баз данных.
Если имеется ввиду, что mysql постоянно без остановки грузит на 100% — то обновлять операционку. Имел такое на ubuntu 12, когда через пол года работы и без каких либо обновлений, mysql стал сжирать весь процессор. Локальные обновление не помогали, помогло только полное обновление системы .
что показывает htop?
Может быть нагрузка на диск? iowait какой?
пробуйте рекомендации mysqltuner
есть такая утилита для mysql — mytop
в ней как в top можно посмотреть запросы онлайн и время выполнения запроса. Это дополнение к логу медленных запросов который нужно включить и посмотреть что в нем.
Почему mysqld сильно грузит процессор?
5 интернет магазинов с небольшой посещаемостью. Хороший хостинг. Периодически огромные тормоза на сайте из-за того, что mysql грузит проц под 100%. Регламентных процедур вроде никаких нет. Проблема старая — тянется уже долго. Своей квалификации не хватает, чтобы понять в чем косяк (может вообще не в битриксе, а в настройках сервера).
Подскажите куда копать? Или порекомендуйте специалиста. Спасибо.
- Вопрос задан более трёх лет назад
- 15511 просмотров
Оценить 1 комментарий
- Вконтакте
- Вконтакте
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
query_cache_size=1G
query_cache_limit=2M
innodb_buffer_pool_size=4G
#innodb_buffer_pool_instances=4
innodb_additional_mem_pool_size=200M
innodb_file_io_threads=8
innodb_lock_wait_timeout=50
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=0
# this lines for DB recovery:
#max_allowed_packet=128M
#default-character-set=cp1251
#character-set-server=cp1251
#collation-server=cp1251_bin
#init-connect=«SET NAMES cp1251»
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0


long_query_time = 2
log_slow_queries = /var/log/mysql/mysql-slow.log
Так ловите медленные запросы
Вот такой запрос лидирует по частоте и по времени:
SELECT BE.ID as ID,BE.NAME as NAME,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE
FROM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
WHERE
1=1 AND ( ((((BE.IBLOCK_ID = ’39’)))) AND ((((BE.NAME LIKE ‘5277-9999’)))) ) AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
Такое ощущение, что это какая то битрикс компонента выполняется.

- Вконтакте
- Вконтакте
- Вконтакте

- Вконтакте
- Вконтакте
>> MySQLTuner 1.2.0 — Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at mysqltuner.com/
>> Run with ‘—help’ for additional options and output filtering
[!!] Successfully authenticated with no password — SECURITY RISK!
— General Statistics — [—] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.95
[OK] Operating on 64-bit architecture
— Storage Engine Statistics — [—] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster
[—] Data in MyISAM tables: 6M (Tables: 14)
[—] Data in InnoDB tables: 1G (Tables: 238)
[!!] BDB is enabled but isn’t being used
[!!] Total fragmented tables: 1
— Security Recommendations — [!!] User ‘root@localhost’ has no password set.
— Performance Metrics — [—] Up for: 1d 2h 32m 39s (15M q [159.264 qps], 125K conn, TX: 31B, RX: 9B)
[—] Reads / Writes: 76% / 24%
[—] Total buffers: 5.2G global + 2.7M per thread (100 max threads)
[OK] Maximum possible memory usage: 5.5G (34% of installed RAM)
[OK] Slow queries: 0% (0/15M)
[OK] Highest usage of available connections: 8% (8/100)
[OK] Key buffer size / total MyISAM indexes: 8.0M/8.6M
[OK] Key buffer hit rate: 100.0% (593K cached / 0 reads)
[OK] Query cache efficiency: 66.1% (8M cached / 13M selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 242K sorts)
[!!] Joins performed without indexes: 12488
[!!] Temporary tables created on disk: 28% (143K on disk / 502K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 0% (64 open / 749K opened)
[OK] Open file limit used: 0% (0/1K)
[OK] Table locks acquired immediately: 99% (21M immediate / 21M locks)
[OK] InnoDB data size / buffer pool: 1.4G/4.0G
— Recommendations — General recommendations:
Add skip-bdb to MySQL configuration to disable BDB
Run OPTIMIZE TABLE to defragment tables for better performance
Enable the slow query log to troubleshoot bad queries
Adjust your join queries to always utilize indexes
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries without LIMIT clauses
Set thread_cache_size to 4 as a starting value
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
join_buffer_size (> 128.0K, or always use indexes with joins)
tmp_table_size (> 32M)
max_heap_table_size (> 16M)
thread_cache_size (start at 4)
table_cache (> 64)
Спасибо за утилиту! Уже кое что начало проясняться.
Я так полагаю следует поменять настройки на предлагаемые?