Назад | Перейти на главную страницу

Оптимизация Mysql InnoDB

(спрашивали в 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

Вы можете сделать это следующим образом:

  1. Добавьте этот параметр в /etc/my.cnf: innodb_log_file_size = 224M
  2. служба mysql stop
  3. rm -f / var / lib / mysql / ib_logfile [01]
  4. сервис mysql start (ib_logfile0 и ib_logfile1 воссоздаются)

Вы должны оставить значение по умолчанию для innodb_flush_method для обеспечения соответствия ACID. В противном случае вы можете потерять до одной секунды транзакций.

ПРЕДОСТЕРЕЖЕНИЕ: если ваш сервер БД предназначен только для базы данных, вы должны резерв 75-80% или ОЗУ для innodb_buffer_pool.

ОБНОВИТЬ

Вы обязательно захотите изменить макет InnoDB !!!!

Нужно поднять innodb_open_files до 6000
Вам нужно включить innodb_file_per_table
Вам необходимо реструктурировать все данные InnoDB, чтобы они находились в отдельных табличных пространствах.