[solved] Система не выделяет для mysqld более 2 Гб ОЗУ
Гость 27 июля, 2011 - 20:28
Привет всем, собственно такой вот сабж, хз че делать...
О компе:
~ # uname -a Linux sql 2.6.38-gentoo-r6 #1 SMP Sun Jun 26 22:26:32 MSD 2011 x86_64 Intel(R) Core(TM)2 Quad CPU Q9300 @ 2.50GHz GenuineIntel GNU/Linux ~ # free total used free shared buffers cached Mem: 8186520 8132192 54328 0 51412 5845260 -/+ buffers/cache: 2235520 5951000 Swap: 2000088 49296 1950792 ~ # pmap -x 27024 27024: /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --character-set-server=utf8 --key_buffer=2G --max_allowed_packet=2M --table_cache=800 --sort_buffer_size=2M --join_buffer_size=8200 --net_buffer_length=16K --read_buffer_size=8200 --read_rnd_buffer_size=2M --myisam_sort_buffer_size=128M --language=/usr/share/mysql/english --tmp_table_size=536870912 --max_heap_table_size=512M --thread_cache_size=80 --thread_concurrency=8 --query_cache_size=16M --query_cache_limit=5G --thread_stack=192K -- Address Kbytes RSS Anon Locked Mode Mapping 0000000000400000 6668 - - - r-x-- mysqld ..................(вырезал большой кусок текста).................... ffffffffff600000 4 - - - r-x-- [ anon ] ---------------- ------ ------ ------ ------ total kB 2246096
my.cnf
key_buffer = 2G max_allowed_packet = 2M table_cache = 800 sort_buffer_size = 2M join_buffer_size = 8200 net_buffer_length = 16K read_buffer_size = 8200 read_rnd_buffer_size = 2M myisam_sort_buffer_size = 128M language = /usr/share/mysql/english tmp_table_size = 536870912 max_heap_table_size = 512M thread_cache_size = 80 thread_concurrency = 8 query_cache_size = 16M query_cache_limit = 5G thread_stack = 192K bulk_insert_buffer_size = 16K #max_connections = 200 wait_timeout = 5000 concurrent_insert = 2
»
- Для комментирования войдите или зарегистрируйтесь
А в чем проблема? Выделенной
А в чем проблема? Выделенной памяти мало?
ulimit -a
sysctl -a | grep vm
taho написал(а): А в чем
Ага... 2 Гб мало. База большая, юз активный, кэша недостаточно. ulimit я уже смотрел, там того что нужно нет. О sysctl
тоже не вижу ничего подходящего... Если решение там, подскажите точнее плиз, какой ключ дергать?
_Andrey написал(а):Ага... 2
То есть тебе надо увиличить кеш мускула а не засрать максимально память программой?
Попробуй последовательно (не рывками) увеличить эти параметры:
key_buffer_size
query_cache_size
sort_buffer_size
read_buffer_size
taho написал(а): _Andrey
Благодарю за совет но я это уже делал и, к сожалению, безрезультатно... mysqld потребляет ровно 2 Гб и ни мегабайтом больше, какой бы размер кэша я не ставил. Ставлю меньше - все регулируется на ура, а вот больше не растет.
Я сильно подозреваю, что на самом деле система не выделяет программе более 2 Гб.
Посмотри внимательно на твою
Посмотри внимательно на твою конфигурацию mysql:
ты сделал key_buffer 2G, все остальные параметры просто "утонули" в виртуальном пространстве памяти выделенной для процесса, если ты сделаешь его 3G то и процесс увеличится на 3G ... но вот вопрос - зачем? То, что процесс занимает много памяти вовсе не означает что он будет работать лучше. Тюнинг обычно делают с умом на ходой конец как я - методом тыка (в научных кругах метода называется эмперической :)
А вы внимательно читали, что
А вы внимательно читали, что я писал выше? Мне неважно, сколько памяти занимает процесс, мне важно максимальное количество памяти, которое процесс сможет использовать под свои нужды. А процесс не может использовать более 2 Гб. И в том, что процесс перегружает жесткий диск, читая индексы и разбирая однотипные запросы (а и тех и других ооочень много), когда 5 Гб оперативы простаивают - в этом я определенно не вижу ничего хорошего. Так что не надо мне говорить "с умом", если не приводите реальные аргументы в эту пользу. Но спасибо, что еще раз обратили мое внимание на конфиг - именно там и крылась ошибка. query_cache_limit то я увеличил, а про query_cache_size - забыл :)
Так что проблема решена, всем спасибо.
>>в том, что процесс
>>в том, что процесс перегружает жесткий диск, читая индексы и разбирая однотипные запросы я определенно не вижу ничего хорошего
можно ssd прикупить, это как вариант
Ага хоть HBA+SAN связку
Ага хоть HBA+SAN связку только данные запросы лучше действительно кэшировать в памяти что и добивается афтар
_Andrey написал(а): А вы
Ага внимательно: "Система не выделяет для mysqld более 2 Гб ОЗУ" - и это вся информация. А проблема в том что вы неправильно интерпретируете выхлоп pmap. pmap составляет карту виртуального пространства процесса и никоим образом она тождественно НЕ связана с оперативной памятью. Связь только через Memory Management Unit. Поэтому у вас за бортом вполне может остаться больше свободной памяти хотя pmap может указать выделенную виртуальную память более чем вся оператива.