Настройка my.cnf для huge сервера

liss

Новичок
Настройка my.cnf для huge сервера

У меня есть сервер: 2x dual Xeon 3, 4GB оперативы.
Этот сервер только под MySQL.
Я хочу настроить, чтобы MYSQL использовал все ресурсы сервера по максимуму.
Нагрузка будет очень большая.
max_connections = 3000

Помогите настроить my.cnf.
Я взял из стандарта my-huge.cnf, но что-то не могу вникнуть во все параметры.
Как настроить правильно параметры работы с памятью, кэшем?
Что нужно, а что нет?

Может кто настраивал, то поделитесь плз!

Хелп!!!

-~{}~ 13.05.06 22:59:

Ну где же MySQL гуру?
Неужели никто не направит на путь истинный?
Дайте хоть статью какую почитать если никто не знает что к чему.
Очень нужно, сервер вроде мощный, но при активных 200 threads
SELECT COUNT(*) FROM table
где у таблицы 1 000 000 записей думает 3 секунды!!!!
ХЕЛП!
 

magic

lancer
Re: Настройка my.cnf для huge сервера

Автор оригинала: liss
Очень нужно, сервер вроде мощный, но при активных 200 threads
SELECT COUNT(*) FROM table
где у таблицы 1 000 000 записей думает 3 секунды!!!!
ХЕЛП!
Чего орешь? Тип таблиц в БД какой?
 

liss

Новичок
Ладно, всё это хорошо.
Как сервер настроить?
Меня больше интересуют переменные памяти и кэша.
Как значения подобрать?

-~{}~ 14.05.06 15:03:

Меня не интересует пока оптимизация запросов. Только работа самого Мускула. Хочу чтобы он все ресурсы по максимуму юзал.
 

Апельсин

Оранжевое создание
> Меня не интересует пока оптимизация запросов. Только работа самого Мускула. Хочу чтобы он все ресурсы по максимуму юзал.

так выделение памяти под определенные буферы напрямую зависит от вида поступающих запросов ..

и зачем вам 3000 одновременных соединений если по вашим словам там около 200 всего ..

непонятно ни что за ОС, ни что вообще за ситуация. находится ли mysql на отдельной машине или там еще что запущено, не сообщается ни версия mysql, ничего.

Если интересует пример как его можно настроить, то с любым дистрибутивом идут примеры файлов конфигурации my-medium.cnf, my-large.cnf и так далее. Открываете и читаете на какие нагрузкти это предлагается и какие значения для чего там установлены.

Откройте документацию, почитайте как mysql сервер использует память, какие у него вообще есть буферы, для чего используются. Посмотрите статусные переменные чему они равны у вас и что они показывают. На основании этого сделайте выводы размеы каких буферов вам следует увеличить.

http://dev.mysql.com/doc/refman/4.1/en/memory-use.html
http://dev.mysql.com/doc/refman/4.1/en/server-parameters.html
http://dev.mysql.com/doc/refman/4.1/en/server-system-variables.html
http://dev.mysql.com/doc/refman/4.1/en/server-status-variables.html
 

liss

Новичок
1) 200 это только сейчас, будет 1000 - 3000
2) Сервер как я писал выше ТОЛЬКО для работы MySQL, больше ничего на нём не стоит
3) OS Fedora Redhat, MySQL 4.1.19, 4GB мозгов
4) Опять же как я писал выше, я взял my-huge.cnf и попытался юзать его, ничего путного не получается пока, нету нужного мне результата
5) Если бы я знал в какую сторону крутить переменные, что увеличивать, а что уменьшать, я бы точно не спрашивал бы.
6) Все Ваши статьи видел неоднократно, ничего по поводу как сделать то или иное там нет, просто голые цифры, а как их подбирать??? Вот в чём вопрос.
Ну скажите если там всё есть, что мне выставить в параметре, например max_binlog_cache_size? Так как написано в мануале? Не покатит, я хочу максимально оптимально подобрать это значение. Как это сделать?
Дайте хоть один толковый пример, типа для моего сервера нужно выставить 2000, а для 2GB мозгов - 1000. Может кто-нибудь?
 

AnToXa

prodigy-одаренный ребенок
1) 200 это только сейчас, будет 1000 - 3000
это вы китайцев рождающихся каждую секунду считаете? :) откуда так много-то?

это 2 dual core или масло масленое? a "Xeon 3" - это что за процессор такой?

4) Опять же как я писал выше, я взял my-huge.cnf и попытался юзать его, ничего путного не получается пока, нету нужного мне результата
знаете, когда люди ведут дискуссии, принято сначала договориться об определениях чтобы не возникало путаницы, определите что такое "нужный результат" для вас, подсказка: "максимально оптимально" не является правильным ответом.

Дайте хоть один толковый пример, типа для моего сервера нужно выставить 2000, а для 2GB мозгов - 1000. Может кто-нибудь?
вот в этом похоже и проблема для вас: поймите, настройка зависит не только от количества памяти у машины, и зависит нелинейно совсем.

хинт номер два: попробуйте разбить задачу на несколько поменьше, например выделить различные паттерны использования этого mysql сервера, различные группы запросов и их относительную частоту, какие таблицы там будут, их структуру, количество данных и характер запросов.
 

Апельсин

Оранжевое создание
Все Ваши статьи видел неоднократно, ничего по поводу как сделать то или иное там нет, просто голые цифры, а как их подбирать??? Вот в чём вопрос.
Ну скажите если там всё есть, что мне выставить в параметре, например max_binlog_cache_size? Так как написано в мануале? Не покатит, я хочу максимально оптимально подобрать это значение. Как это сделать?
Вы говорите вы все это читали неоднократно, ну так включите немного мозги и подумайте. Вы спрашиваете здесь о переменной max_binlog_cache_size, а открыть документацию и посмотреть что она используется при " multiple-statement transaction" и подумать что с вашими таблицами MyISAM вам эта переменная до одного места вы не в состоянии.

Далее, по приведенным выше ссылкам указано какие буферы выделяются всегда для каждого соединения, какие глобально, а остальные по необходимости для потока в зависимости от выполняемого запроса. Вот и посчитайте сколько у вас будет выделяться память всегда при 1000 коннектах, проанализируйте свои запросы и прикиньте сколько у вас может выделяться дополнительно памяти.
 

liss

Новичок
1AnToXa: 2проца Xeon, каждый 3 Mhz
Запросы по базе совсем простые, самый сложный типа
SELECT * FROM table WHERE field LIKE '%search%' ORDER BY `added` DESC
этот запрос сейчас выполняется примерно пол секунды на таблице в 300,000 записей при активных 100 threads.
Страшно подумать что будет при активных 500 threads.
Вот что у меня сейчас в my.cnf

join_buffer_size = 1M
key_buffer=384M
max_connections=1000
max_allowed_packet=64M
myisam_sort_buffer_size=64M
read_buffer_size=1M
read_rnd_buffer_size = 512K
record_buffer=2M
skip-locking
sort_buffer_size=2M
table_cache=1800
thread_cache_size = 256
thread_concurrency=8
tmp_table_size = 64M
query_alloc_block_size = 16384
query_cache_limit = 2M
query_cache_size = 64M
query_cache_type = 1
query_prealloc_size = 16384
wait_timeout = 120

2Апельсин: max_binlog_cache_size - это просто был пример от балды. Ваши слова "посчитайте" и "проанализируйте" могут содержать хоть один конкретный пример???
 

MadMike

Новичок
1AnToXa: 2проца Xeon, каждый 3 Mhz
Я тоже такой хочу!!!!!!!1
например max_binlog_cache_size
AnToXa, согласись, 2 поста за день в анналы - слишком :)

liss
Покажи нам 99% типов запросов. Без этого разговор просто несерьезен.
SELECT * FROM table WHERE field LIKE '%search%' ORDER BY `added` DESC
А за такие запросы надо просто убивать.
 

AnToXa

prodigy-одаренный ребенок
Я тоже такой хочу!!!!!!!1
ну дык вот тебе кремний, сделай сам :)



AnToXa, согласись, 2 поста за день в анналы - слишком :)
хех, привыкай :D

SELECT * FROM table WHERE field LIKE '%search%' ORDER BY `added` DESC
Бог в помощь. такие запросы вообще не используют индексы.
вашей единственной надеждой может быть только запихивание всей базы в пямять.
 

MadMike

Новичок
Бог в помощь. такие запросы вообще не используют индексы.
вашей единственной надеждой может быть только запихивание всей базы в пямять.
Все равно ниасилит. Даже если все в память.
В myisam данные не кешируются кроме как в query_cache, а это явно не та ситуация.

-~{}~ 16.05.06 01:35:

Гоню, есть NDB :)

-~{}~ 16.05.06 01:36:

Но это изврат и не myisam.
 

AnToXa

prodigy-одаренный ребенок
а еще есть VFS cache, в принципе его можно как раз попытаться догнать гигов до трех-трех с половиной.
хотя и правда не очень поможет, вернее ненадолго.
 

MadMike

Новичок
поподробнее с этого момента, я услышал незнакомые слова :)
Я уверен, что кеш FS именно в этом случае не поможет.
 

AnToXa

prodigy-одаренный ребенок
ну а чего там, mysql все равно делает read() как только понимает что данных нету в кеше, этот read() буддет скорее всего отдан из VFS block cache, если он достаточно велик.

т.е. syscall есть, копирование в памяти есть, но чтения с диска физически нету.
 

MadMike

Новичок
Это понятно. Но, имхо, неразумно - full scan без вариантов :)
В этом случае я сторонник выделения кивордов и нормализации.
 

AnToXa

prodigy-одаренный ребенок
для начала надо понять что вообще человек хочет :)
full scan + сортировка еще =)))))
 

MadMike

Новичок
Так человек молчит :(
Я уже задал главный вопрос -
Покажи нам 99% типов запросов.
:)

-~{}~ 16.05.06 02:07:

И вообще, я уверен, что там можно обойтись без такого жуткого запроса :)
 
Сверху