SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.04.2009 16:02:54

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

MySQL жрёт оперативку

Возникла проблема, хочу испросить совета. Ситуация такова, что при старте MySQL потребляет вполне нормальное количество оперативки. Постепенно, но не очень быстро, потребление памяти растёт. После примерно 2-х или 3-х месяцев работы (в зависимости от нагрузки на объект) объём затрагиваемой памяти достигает гигабайта. Речь идёт о цифре, которая в столбце RES. Ниже пример консоли с результатами команды top.

PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29240 mysql     18   0 1290m 116m 4092 S    1  5.8   0:01.07 mysqld
29260 root      15   0  2188 1016  800 R    0  0.0   0:00.03 top

После этого, сумма VIRT и RES превышает физический объём оперативки и начинаются тормоза. Намного медленнее, реально в десятки раз, идут выборки. По поводу превышения физического объёма - это предположение, возможно причина в другом, но факт остаётся фактом - после того как майка съедает много памяти, она начинает жутко тормозить.

Собственно вопрос, который меня волнует - есть ли возможность остановить этот рост? Может быть у меня криво написаны процедуры или запросы? Может быть надо периодически что-то командовать майке? А может просто немного поиграть настройками? В общем, хочется избавиться от необходимости перезапуска службы.

Неактивен

 

#2 21.04.2009 22:46:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: MySQL жрёт оперативку

Сам по себе MySQL, вроде бы, не течет. Можно покрутить параметры буферов вниз.
Например, innodb_buffer_pool_size выделяется не сразу, а заполняется постепенно.
Возможно, стоит поставить параметр memlock — так MySQL никогда не попадет в swap.

Неактивен

 

#3 22.04.2009 10:12:41

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

Re: MySQL жрёт оперативку

Ну ... "вроде не течёт" в моём случае превращается в "точно течёт" smile. Это не единичный случай, это стабильное поведение на нескольких объектах в течение уже примерно года. innodb_buffer_pool_size выделяется сразу, мы обсуждали это тут несколько месяцев назад, там он выставлен в гиг и сразу же выставляет большую цифру виртуальной памяти. По приведённому выше куску консоли, вы можете увидеть что майка запущена буквально только что и сразу же у неё выделено соответствующее количество виртуалки.
Как бы то ни было, с мемлоком попробую.
Да, и не присутствует ли у майки какая-нибудь настройка, позволяющая ограничить потребление ресурсов? Например, как у MSSQL сервера, когда там можно поставить подобное ограничение на потребление оперативки, которое даже положительно влияет на производительность, потому что сервер как-то где-то более оптимизировано распределяет и очищает свою память.

Неактивен

 

#4 22.04.2009 13:30:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: MySQL жрёт оперативку

Ммм.... возможно, какие-то еще буферы сразу не выделяются. Факт в том, что сервер растет в памяти
в процессе работы, приближаясь к какому-то максимальному значению.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson