Нужен совет по оптимизации mysql

12
ХЗ
На сайте с 31.08.2008
Offline
155
8131

Debian, оперативки 12Гб, в последнее время mysql нагружает CPU до 87%, в my.cnf:

key_buffer = 512M

table_cache = 1024

sort_buffer_size = 128K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 64K

query_cache_type=1

query_cache_size=64M

MySQLTuner дает следующие данные:

-------- Storage Engine Statistics -------------------------------------------

[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster

[--] Data in MyISAM tables: 1G (Tables: 5406)

[--] Data in MEMORY tables: 248K (Tables: 6)

[!!] InnoDB is enabled but isn't being used

-------- Performance Metrics -------------------------------------------------

[--] Up for: 3d 3h 44m 23s (13M q [49.953 qps], 593K conn, TX: 67B, RX: 1B)

[--] Reads / Writes: 90% / 10%

[--] Total buffers: 888.0K per thread and 602.0M global

[OK] Maximum possible memory usage: 688.7M (5% of installed RAM)

[OK] Slow queries: 0% (4/13M)

[OK] Highest usage of available connections: 47% (47/100)

[OK] Key buffer size / total MyISAM indexes: 512.0M/407.9M

[OK] Key buffer hit rate: 99.9%

[OK] Query cache efficiency: 84.2%

[!!] Query cache prunes per day: 265079

[OK] Sorts requiring temporary tables: 4%

[!!] Joins performed without indexes: 82691

[!!] Temporary tables created on disk: 64%

[!!] Thread cache is disabled

[!!] Table cache hit rate: 2%

[!!] Open file limit used: 94%

[OK] Table locks acquired immediately: 99%

-------- Recommendations -----------------------------------------------------

General recommendations:

Add skip-innodb to MySQL configuration to disable InnoDB

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:

query_cache_size (> 64M)

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 (> 1024)

open_files_limit (> 2158)

это: (> 64M) означает что надо выставить больше 64М?

порекомендуйте настройки для уменьшения нагрузки если не сложно.

SB
На сайте с 13.06.2010
Offline
2
#1

Смотрите в PMA "Статус сервера", смотрите циферки которые красным, там всё явно написано какой параметр увеличить. (например если кэша не хватает), так же подскажет если не хватает индексов, в таколм случае необходимо править структуру таблиц и добавлять индексы (для быстрых выборок)

N
На сайте с 06.05.2007
Offline
419
#2

да, если написано >64M значит он предлагает выставить больше.

Начать следует с определения куда же именно упирается mysql. Ставьте мониторинг и смотрите как изменяется iowait. Если iowait низкий, а процессор CPU все равно нагружен, вероятно вам вообще никакие подкрутки в mysql не помогут. Тут только приложение писать оптимальнее.

Вообще, не видя сервер мало шансов угадать правильные настройки, иначе бы в поставке mysql уже был бы правильный конфиг :)

When making adjustments, make tmp_table_size/max_heap_table_size equall - и правда забыли.

thread_cache_size (start at 4) - а это точно сделайте. хуже не будет

[!!] Temporary tables created on disk: 64% - некоторые приложения всегда используют сортировку на диске. tmp_table_size =32M уже достаточно много и это признак именно такого приложения.

Кнопка вызова админа ()
M
На сайте с 16.09.2009
Offline
278
#3
Х.З.:
Debian, оперативки 12Гб, в последнее время mysql нагружает CPU до 87%, в my.cnf:

MySQLTuner дает следующие данные:

-------- Storage Engine Statistics -------------------------------------------
[OK] Maximum possible memory usage: 688.7M (5% of installed RAM)

это: (> 64M) означает что надо выставить больше 64М?

Это - да, значит что советует выставить больше (значитЬ то, что значитЬ). Сколько выставить - нужно приблизительно представлять что значит каждый параметр (для чего есть документация). Выделяется ли память там для сервера в целом или под каждое соединение. В любом случае - пока мускул использует малую толику ресурсов памяти - отчего бы не начать давать ему больше, экспериментируя с измененными значениями...

"По фотографии" лечить сервер довольно бессмысленно. "Общие" советы, которые Вам дадут - не лучше того же mysqltuner'а. Так что либо пригласите кого-то оптимизировать за Вас сервер - либо последуйте совету скрипта.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
N
На сайте с 06.05.2007
Offline
419
#4
myhand:
В любом случае - пока мускул использует малую толику ресурсов памяти - отчего бы не начать давать ему больше, экспериментируя с измененными значениями

логично, но в случае с query_cache это вредно.

Прочистка большого кеша может занять занять секунды и вы не сможете понять от чего запрос вдруг тормозит. Так что оптимально остановиться уже на 256Mb.

( На самом деле отдельные личности высказываются еще более категорично http://mituzas.lt/2009/07/08/query-cache-tuning/. Внимание, юмор! )

ХЗ
На сайте с 31.08.2008
Offline
155
#5

всем спасибо, экспериментирую,

join_buffer_size (> 128.0K, or always use indexes with joins)

join_buffer_size =128M правильно или надо 128К ?

N
На сайте с 06.05.2007
Offline
419
#6

Никто не скажет точно.

Но раз уж памяти у вас в избытке, попробуйте для начала 16M туда вписать.

ХЗ
На сайте с 31.08.2008
Offline
155
#7

выставил:

skip-innodb

key_buffer = 512M

table_cache = 2048

sort_buffer_size = 128K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 128K

thread_cache_size = 8

query_cache_type=1

query_cache_size=128M

open_files_limit = 8192

tmp_table_size = 64M

max_heap_table_size = 32M

join_buffer_size = 32M

вроде шустрее сайты стали работать, но иногда mysql нагружает CPU до 120%

M
На сайте с 16.09.2009
Offline
278
#8
Х.З.:
всем спасибо, экспериментирую,

join_buffer_size =128M правильно или надо 128К ?

Вам написали "> 128К" - что непонятного-то? Вы не знаете, что означает знак ">" ?

Х.З.:
выставил:

И прям так за несколько часов собрали новую статистику для mysqltuner? Там же не зря написано, что подождать имеет смысл... Что он теперь показывает Вам?

Х.З.:

вроде шустрее сайты стали работать, но иногда mysql нагружает CPU до 120%

Где Вы такую цифру углядели, что она означает?

Inet-Ark
На сайте с 19.05.2010
Offline
43
#9
Х.З.:

вроде шустрее сайты стали работать, но иногда mysql нагружает CPU до 120%

Как можно нагрузить CPU на 120 процентов? Он, по логике, должен был сгореть... ☝

MMO-игры и все, что с ними связано (http://gama.su/). Мой сайт с партнерскими программами — мало, но все надежные (http://best-pp.ru/).
N
На сайте с 06.05.2007
Offline
419
#10

Inet-Ark, так top иногда может показать.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий