(спрашивали в stackoverflow, но предлагали переехать сюда!)
У меня возникли проблемы с пониманием использования InnoDB - у нас есть база данных на основе drupal (чтение: запись 5: 1), работающая на mysql (версия сервера: 5.1.41-3ubuntu12.10-log (Ubuntu)). Наш текущий размер данных / индекса Innodb:
Текущее пространство индекса InnoDB = 196 M Текущее пространство данных InnoDB = 475 M
Поиск в Интернете и чтение книг, таких как «Высокопроизводительный sql», предлагают увеличить размер данных на 10% - я установил пул буферов на (данные + индекс) + 10% и заметил, что пул буферов был на 100%. ... даже увеличение примерно до 896 Мбайт по-прежнему делает его 100% (хотя данные + индексы составляют всего ~ 671 Мбайт?
Ниже я приложил вывод раздела innodb в mysqlreport. Страницы без 1, похоже, тоже предполагают серьезную проблему. Для innodb_flush_method установлено значение по умолчанию - я исследую установку этого параметра на O_DIRECT, но хочу решить эту проблему раньше.
__ InnoDB Buffer Pool __________________________________________________
Usage 895.98M of 896.00M %Used: 100.00
Read hit 100.00%
Pages
Free 1 %Total: 0.00
Data 55.96k 97.59 %Drty: 0.01
Misc 1383 2.41
Latched 0 0.00
Reads 405.96M 1.2k/s
From file 15.60k 0.0/s 0.00
Ahead Rnd 211 0.0/s
Ahead Sql 1028 0.0/s
Writes 29.10M 87.3/s
Flushes 597.58k 1.8/s
Wait Free 0 0/s
__ InnoDB Lock _________________________________________________________
Waits 66 0.0/s
Current 0
Time acquiring
Total 3890 ms
Average 58 ms
Max 3377 ms
__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads 21.51k 0.1/s
Writes 666.48k 2.0/s
fsync 324.11k 1.0/s
Pending
Reads 0
Writes 0
fsync 0
Pages
Created 84.16k 0.3/s
Read 59.35k 0.2/s
Written 597.58k 1.8/s
Rows
Deleted 19.13k 0.1/s
Inserted 6.13M 18.4/s
Read 196.84M 590.6/s
Updated 139.69k 0.4/s
Любая помощь в этом будет принята с благодарностью.
Спасибо!
Правильно ли размер ваших файлов журнала InnoDB (ib_logfile0 и ib_logfile1)?
Они должны составлять 25% от пула буферов InnoDB.
В вашем случае это будет 224M
Вы можете сделать это следующим образом:
Вы должны оставить значение по умолчанию для innodb_flush_method для обеспечения соответствия ACID. В противном случае вы можете потерять до одной секунды транзакций.
ПРЕДОСТЕРЕЖЕНИЕ: если ваш сервер БД предназначен только для базы данных, вы должны резерв 75-80% или ОЗУ для innodb_buffer_pool.
ОБНОВИТЬ
Вы обязательно захотите изменить макет InnoDB !!!!
Нужно поднять innodb_open_files до 6000
Вам нужно включить innodb_file_per_table
Вам необходимо реструктурировать все данные InnoDB, чтобы они находились в отдельных табличных пространствах.