#mysql #performance #database-performance
#mysql #Производительность #база данных-производительность
Вопрос:
У меня довольно ванильная настройка mysql 5.1, и я пытаюсь ее настроить. Я нашел этот удобный скрипт
Он сделал следующие предложения:
query_cache_limit (> 1M, or use smaller result sets)
query_cache_size (> 16M)
join_buffer_size (> 128.0K, or always use indexes with joins)
table_cache (> 64)
innodb_buffer_pool_size (>= 14G)
Прочитав, что они означают и на что они в настоящее время настроены, я обнаружил, что могу запускать «переменные mysqladmin»
Мои текущие значения:
query_cache_limit | 1048576
query_cache_size | 16777216
join_buffer_size | 131072
innodb_buffer_pool_size | 8388608
Как мне их прочитать, это Кбайт? итак, это 1M, 16M, 13M и 8M?
В моем ящике всего 4 Г оперативной памяти, и в обычный день было всего несколько сотен мегабайт свободной памяти. Должен ли я следовать этим предложениям и делать:
#innodb_buffer_pool_size = 15G
#table_cache = 128
#join_buffer_size = 32M
#query_cache_size = 64M
#query_cache_limit = 2M
Меня смущает 15G, это проблема с дисковым пространством, а не с памятью? Если это так, то рекомендации не очень хороши, верно?
Должен ли я получить больше памяти для своего ящика?
Дополнительная информация: — Размер моей базы данных составляет 34 гигабайта, я использую все innodb, у меня 71 таблица, 4 из них огромные, остальные маленькие. Я думал о переносе больших переменных в SOLR и выполнении всех запросов оттуда, но хотел посмотреть, что я могу сделать с базовой настройкой.
спасибо, Джоэл
Комментарии:
1. Я нашел это полезным для чтения mysqlperformanceblog.com/2007/11/03 /…
2. Это может быть лучше спросить на serverfault.com
3. Я прочитал perfblog, но все еще был в замешательстве, я думаю, это предполагает, что вы уже знаете, что это за переменная и что она делает.
4. Что касается
innodb_buffer_pool_size
, если вы используете InnoDB для своих таблиц, это, как правило, самый большой фактор производительности. Вы хотите сделать его настолько большим, насколько это возможно. Однако, если вы используете MyISAM, это не имеет никакого значения.5. Я полностью innodb, спасибо.
Ответ №1:
Вы не должны устанавливать пул буферов innodb выше, чем доступная память. Вероятно, сценарий рекомендовал это на основе количества записей в вашей таблице и их физического размера. Производительность Innodb в значительной степени зависит от памяти, если она может уместить индексы в памяти, производительность быстро и заметно упадет. Поэтому установка innodb_buffer_pool_size high почти всегда является хорошим советом.
Innodb — не лучший тип таблицы для всего, что касается mysql. Очень большие таблицы, которые обычно содержат много вставок, но мало операций чтения и обновлений (т. Е. Ведения журнала), лучше использовать в качестве таблиц MyISAM. Ваши очень активные таблицы (вставки, обновления, удаления, выбор) лучше использовать в Innodb. Может возникнуть пламенная война с этим советом, и это общий совет.
Но, тем не менее, ни один скрипт не будет указывать вам, какими должны быть ваши настройки. Это может быть только лучшим гостем. Наилучшие настройки основаны на ваших шаблонах доступа к данным. Вам действительно нужно прочитать, что представляют собой все переменные. mysqlperformanceblog.com это отличное место для изучения mysql в дополнение к руководству.
Когда вы работаете в mysql, используйте «показать переменные» и «показать статус», чтобы увидеть, что происходит. Вы также можете запустить «показать состояние innodb», но вы можете не понять этот вывод, если не знаете, что это за переменные.
Комментарии:
1. Спасибо, это кажется хорошим советом, я обновил свою виртуальную машину и добавил больше памяти, при запуске у меня было около 8 гигабайт свободного времени, поэтому я установил для innodb_buffer_pool_size значение 4G. Когда я запускал mysql, я ожидал, что он будет использовать эту память 4G, но я этого не вижу. Прямо сейчас, после выполнения большого пакетного задания всю ночь, он использует 68m resident и 331m swap. Я сделал что-то не так?
2. Я прочитал ваши «показать переменные» и попробовал это, и mysql все еще показывает старое число для innodb_buffer_pool_size… не уверен, что я сделал не так, я добавил переменные в свой файл.cnf и перезапустил mysql..
3. Хорошо, я понял это, потому что я поместил переменные не в тот раздел my.cnf, спасибо за идею проверить переменные отображения.
4. Когда вы запускаете «показать статус innodb», появляется раздел «пул буферов и память», который будет полезен для определения того, что используется.
5. Вот что пока говорится: ———————- ПУЛ БУФЕРОВ И ПАМЯТЬ ———————- Всего выделено памяти 4748342496; в дополнительном пуле выделено 1048576 словаря выделено памяти 388080 Размер буферного пула 262144 Свободных буферов 47623 Страниц базы данных 202766 Измененных страниц БД 1 Ожидающих чтения 0 Ожидающих записи: LRU 0, полный список 0, одна страница 0 Страниц прочитано 202766, создано 0, записано 680 10,82 чтения / с, 0,00 создания / с, 0,09 записи / с Частота попадания в буферный пул 999/1000