SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.12.2010 11:43:30

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Выдать демону ресурсы системы

Приветствую знатоков администрирования и оптимизации.

Имеется выделенный сервер под БД - i7 860, 4 Gb ddr3

# uname -a
Linux SERVER 2.6.18-194.17.1.el5 #1 SMP Wed Sep 29 12:50:31 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

На нем mysql

# mysql -V
mysql  Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (x86_64) using readline 5.1

Имеется проблема - в пик нагрузки (~600 запросов в секунду) сильно растет значение LA (до ~5-7), соответственно растет время генерации страницы. Но при этом процессор почти не занят - максимум по 10% на ядро (гипертрейдинг включен, система видит 8 ядер).
По оперативной памяти mysql занимает ~660 Mb, размер базы 620 Mb, все таблицы MyISAM.

my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

user=mysql
concurrent_insert = 2
key_buffer_size = 70M
max_connections = 1000
myisam_sort_buffer_size = 64M
low_priority_updates = 1
old_passwords=1
sort_buffer_size=32M
query_cache_type = 1
query_cache_limit = 20M
query_cache_min_res_unit = 2K
query_cache_size = 80M
table_cache = 10000
thread_cache_size = 500
tmp_table_size=1024M

port=3306
bind-address=192.168.1.18

myisam-recover=QUICK,BACKUP,FORCE

skip-innodb
skip-locking
skip-name-resolve

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Что еще мне нужно подкрутить чтобы научить mysql пользоваться мощностью железки ?
Да, понимаю что вопрос в духе "сделайте мне красиво", но все-таки ...

P.S. Возможности менять код приложения работающего с базой не имею.

Неактивен

 

#2 20.12.2010 17:57:40

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

Re: Выдать демону ресурсы системы

Я бы key_buffer_size увеличил... раз в 10 smile

А вообще — если запросы на запись — можно переключить в InnoDB,
будет работать быстрее.

Неактивен

 

#3 20.12.2010 22:05:38

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Re: Выдать демону ресурсы системы

по данным mysqltuner.pl соотношение

Reads / Writes: 63% / 37%

заметил в выводе интересную вещь

[!!] Maximum possible memory usage: 32.2G (846% of installed RAM)

Где-то я перекрутил с выдачей памяти, да и похоже с указанием 1к коннектов явный перебор.

[OK] Highest usage of available connections: 27% (274/1000)

upd:

key_buffer_size = 700M
max_connections = 500

mysql отожрал 1.2G памяти, LA немного спал, спасибо. Еще рекомендации ? smile

Отредактированно krevedko13 (20.12.2010 22:48:34)

Неактивен

 

#4 21.12.2010 02:32:59

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

Re: Выдать демону ресурсы системы

Еще InnoDB wink

Неактивен

 

#5 21.12.2010 03:03:43

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Re: Выдать демону ресурсы системы

При чтение \ запись = 60% \ 40% уже имеет смысл переключаться на этот движок ?

Про этот древний холивар я прочел довольно много, но некая свойственная мне инерционность не дает взять и одномоментно сменить тип таблиц на боевом сервере (кстати, чем это может быть чревато ?)

Неактивен

 

#6 21.12.2010 03:20:12

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

Re: Выдать демону ресурсы системы

Какой еще холивар? smile

Выбирать хранилище нужно не из соображений «круче», а из соображений
«целесообразно в данной задаче». Когда у Вас 2/3 чтений при одном запросе
в секунду — движок можно выбирать любой. Когда у Вас 1/3 записей при
100 запросах в секунду — это 30 записей в секунду. Ваш диск это выдержит? smile

Чревато может быть многим. Например, InnoDB не поддерживает полнотексто-
вые и пространственные индексы. Например, могут начать происходить deadlockи.
Даже автоинкремент на пустых таблицах работает по разному wink

Неактивен

 

#7 21.12.2010 07:59:39

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Re: Выдать демону ресурсы системы

Холивар в вопросе скорости работы "в вакууме" ...

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

Думается мне тут только пробовать - наблюдать несколько дней с конфигом что есть, бекапится, переключать в Innodb (молясь что не фатально) и снова наблюдать ...

Так сказать по горячим следам - какие параметры специфичные для InnoDB нужно будет сходу увеличить ?

Неактивен

 

#8 21.12.2010 14:52:44

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

Re: Выдать демону ресурсы системы

innodb_buffer_pool_size в 700 мегабайт — и можно все данные конвертить спокойно smile

Неактивен

 

#9 26.12.2010 00:16:22

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Re: Выдать демону ресурсы системы

Спасибо за информацию, переход на InnoDB дал приличный прирост производительности.

Неактивен

 

#10 02.10.2011 13:18:45

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Re: Выдать демону ресурсы системы

По прошествии некоторого времени почувствовал снижение скорости обработки и вновь взялся за конфиг, выкладываю текущие данные (вдруг пригодиться кому).

Добавил 2 Gb памяти (итого 6Gb ddr3)
Подредактировал конфиг

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

user=mysql
key_buffer_size=256M
max_connections=700
low_priority_updates=1
old_passwords=1
read_buffer_size=8M
sort_buffer_size=2048M
query_cache_type=0
query_cache_limit=1M
query_cache_min_res_unit=1K
query_cache_size=10M
table_cache=15000
thread_cache_size=32
tmp_table_size=1024M

#concurrent_insert=2
#myisam_sort_buffer_size=64M
#myisam-recover=QUICK,BACKUP,FORCE
#skip-innodb

innodb_data_home_dir = /var/lib/mysql/innobase
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/innobase
innodb_log_arch_dir = /var/lib/mysql/innobase
innodb_buffer_pool_size=4096M
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_log_buffer_size=4M
innodb_log_file_size=256M
innodb_file_per_table=1
innodb_lock_wait_timeout=50
innodb_force_recovery=0
innodb_thread_concurrency=50

port=3306
bind-address=192.168.1.18

skip-bdb
skip-locking
skip-name-resolve

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Обрабатываем до 700 запросов\сек на почти 2х гигабайтной базе с LA не превышающим 3.

Попутно вопрос: разъясните пожалуйста действие переменных innodb_flush_log_at_trx_commit innodb_flush_method. Спасибо.

p.s. добавьте меточку [решено] в название темы, пожалуйста.

Отредактированно krevedko13 (02.10.2011 16:03:55)

Неактивен

 

Board footer

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