[MySQL] Вставки в таблицу InnoDB vs MyISAM

sinet

Подскажите какой движок лучше всего использовать для таблицы с логами?
От таблицы требуется поддерживать десятки параллельный вставок в секунду и доступ по индексу пару раз в минуту.
Я раньше думал, что MyISAM лочит всю таблицу при изменениях, поэтому этот вариант сразу отпадает,
но наткнулся на параметр concurrent_inserts, который вроде бы это лечит.

dgaf

этот параметр выглядит костылём и имеет ограничения
лучше всего взять тестовую базу и проверить тестовыми запросами\вставками
понятно, что для тестов нужно будет соответстно настроить параметры - кэши всякие.
я заранее ставлю на innodb
http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myi...
http://www.mysqlperformanceblog.com/2007/10/12/myisam-scalab...
ЗЫ хм, INSERTs/SELECTs > 10*60/2 это необычно -)

dgaf

http://www.mysqlperformanceblog.com/2006/06/13/myisam-concur...
4. if your database is more write that read - then I again don’t think concurrent is important for you - most time tables are in WRITE lock.
5. But better way - test it - for example you can take mysql with patched query log and analyze execution time of queries with concurrent insert = off and on.

ermsoft

concurrent_inserts позволяет не лочить таблицу *на чтение* во время insert'ов, а десятки параллельных вставок у тебя все равно на myisam'е сделать не получится.
С другой стороны myisam сам по себе быстрее и легче по объему на диске.
В любом случае для быстрой записи намного важнее будут оптимизации в направлении:
во-первых, prepared query,
и главное во-вторых, insert'ы с множеством строк одновременно, если такая возможность есть. Впрочем, тогда и insert'ы лучше бы расположить ну максимум в 4 треда, а не в 10. У innodb тоже масштабируемость не бесконечная.
В целом InnoDB наверное лучше подойдет. Хотя если у тебя всего по 10 строк в секунду, можно сильно не париться.
Еще можно подумать о том, как вычищать старые логи или ротировать таблицы в базе. (двойной атомарный rename table обычно помогает). Ну это начиная с объемов в миллион - 10 миллионов строк.

sinet

Спасибо за ссылки. Жалко про вставки ничего особо нет, только селекты.
Протестировать пока не на чем. :(
Я тоже склоняюсь к InnoDB. Но на соседнем проекте логи в MyISAM хранятся, почему - объяснить затруднились. :confused:
ЗЫ хм, INSERTs/SELECTs > 10*60/2 это необычно -)
Это ж логи. Писаться должны всегда, а предоставляться только при возникновении претензий.

sinet

Хм. Понятно. Значит все таки InnoDB.
Вставок не 10 в секунду, а скорее 30-50. Insert`ы объединять не получится.
С ротированием все просто. Таблицы на каждый день свои. )

ermsoft

Ага. Ну кажется среднее железо должно столько вытянуть (сколько там, 3-4 миллиона к концу дня?)
innodb_flush_log_at_trx_commit=2 не забудь поставить, главное. Сильно поможет :)

sinet

Поменьше, но мы будет стараться. :)
За параметр спасибо. Для логов действительно мгновенная фиксация на диск при коммите не критична.
Оставить комментарий
Имя или ник:
Комментарий: