Разница, скорее всего, связана с настройкой innoDB, которая требует немного большей настройки, чем myISAM. Идея innoDB состоит в том, чтобы хранить большую часть ваших данных в памяти и сбрасывать / читать на диск только тогда, когда у вас есть несколько свободных циклов процессора.
стоит ли вообще возиться с InnoDB - действительно хороший вопрос. Если вы собираетесь продолжать использовать MySQL, настоятельно рекомендуется получить некоторый опыт работы с InnoDB. Но если вы быстро делаете грязную работу для базы данных, которая не будет видеть большой трафик и не беспокоиться о масштабировании, тогда простота MyISAM может быть для вас просто победой. InnoDB может быть излишним во многих случаях, когда кому-то просто нужна простая база данных.
но многие из моих таблиц не будут обновляться
Вы все еще можете получить повышение производительности от InnoDB, если вы читаете на 99%. Если вы сконфигурируете размер пула буферов для хранения всей базы данных в памяти, InnoDB НИКОГДА не придется обращаться к диску для получения ваших данных, даже если он пропускает кеш запросов mysql. В MyISAM есть большая вероятность, что вам нужно прочитать строку с диска, и вы оставляете операционную систему для кэширования и оптимизации за вас.
innodb-buffer-pool-size
Мое первое предположение - проверить innodb_buffer_pool_size, который поставляется из коробки с установленным значением 8M. Рекомендуется, чтобы это было около 80% вашей общей памяти. Как только вы достигнете этого предела, производительность innodb значительно упадет, потому что ему нужно очистить что-то из буфера, чтобы освободить место для новых данных, что может быть дорогостоящим.
autocommit = 0
Кроме того, убедитесь, что автоматическая фиксация отключена при загрузке таблицы, иначе сброс будет происходить при каждой вставке. Вы можете снова включить его после того, как закончите, и это настройка на стороне клиента. очень безопасно.
Загрузка таблиц обычно происходит один раз
Подумайте, действительно ли вы хотите настроить свою базу данных для «вставки 17 миллионов строк». Как часто вы это делаете? MyISAM может быть быстрее в этом случае, но когда у вас есть 100 одновременных подключений, которые читают и изменяют эту таблицу одновременно, вы обнаружите, что хорошо настроенный innoDB победит, а MyISAM задохнется от блокировок таблицы.
Как MyISAM видит эту операцию
MyISAM отлично справляется с этой задачей без какой-либо настройки, потому что вы просто добавляете каждую строку в файл (и обновляете индекс). Ваша ОС и дисковое кэширование решат все эти проблемы с производительностью.
Как InnoDB видит эту операцию
Innodb узнает, что таблица нуждается в записи, поэтому бросает строку в буфер вставки. Вы не даете ему времени до следующей вставки, поэтому innoDB не успевает разобраться с буфером, ему не хватает места, и он вынужден «задерживать» вставку, пока он записывает в пул буферов и обновляет индексы. Затем ваш пул буферов заполняется, и innoDB вынужден «задерживать» вставку и сбрасывать некоторую страницу из пула буферов на диск. И продолжаешь как сумасшедший кидать в него вставки. Обратите внимание, что когда вы настраиваете InnoDB так, чтобы он очень быстро выдавал вам приглашение MySQL> после того, как вы это сделаете, InnoDB по-прежнему будет скремблироваться под крышками, чтобы наверстать упущенное в свободное время, но будет готов выполнить новую транзакцию за вас.
ДОЛЖЕН ПРОЧИТАТЬ:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html (см. советы по массовой загрузке данных)
person
FlipMcF
schedule
16.03.2012