Добрый день,Есть биллинг, который пишет в mysql информацию о трафике с netflow.
Спустя неделю сервер (Cel600, dimm 128mb, очень старый диск 4гб. ОС FreeBSD, MySQL 4.0.24)
начал сильно притормаживать на отчетах. Тип всех таблиц был InnoDB, объем базы данных 22метра. Решил испытать MyISAM. Создал дамп, поменял тип таблиц и пересоздал базу. Объем базы данных уменьшился до 8.6 метров, скорость возрасла примерно на 70%. И перезаливка дампа с таблицаими типа InnoDB идет в несколько раз дольше. Чем InnoDB лучше MyISAM, почему все советуют именно его?
>Есть биллинг, который пишет в mysql информацию о трафике с netflow.
>Спустя неделю сервер (Cel600, dimm 128mb, очень старый диск 4гб. ОС FreeBSD,
>MySQL 4.0.24) начал сильно притормаживать на отчетах. Тип всех таблиц
>был InnoDB, объем базы данных 22метра.При таких объемах и на таком железе "тормоза" означают кривую структуру базы
данных либо плохо оптимизированные запросы, используемые в отчетах. IMHO.Клычевая разница между MyISAM и InnoDB состоит в поддержке транзакционных
механизмов. В простейших случаях это просто означает, что InnoDB надежнее.
>При таких объемах и на таком железе "тормоза" означают кривую структуру базы
>
>данных либо плохо оптимизированные запросы, используемые в отчетах. IMHO.
>
>Клычевая разница между MyISAM и InnoDB состоит в поддержке транзакционных
>механизмов. В простейших случаях это просто означает, что InnoDB надежнее.Полчитал доку, переписал запросы. Время генерации отчетов уменьшилось с 3сек. до 0.02сек.
Круто, спасибо :)Туманная надежность InnoDB vs очевидной скорости MyISAM... Из 2-х зол решил выбрать быстрейшее :)От rm -rf / не спасет InnoDB :)
>Туманная надежность InnoDB vs очевидной скорости MyISAM... Из 2-х зол решил выбрать
>быстрейшее :)От rm -rf / не спасет InnoDB :)А от слёта по питанию?
>А от слёта по питанию?
От слета по питанию лучше всего спасет ups.:)
По теме: myisam транзакции не поддерживает, что особенно плохо, когда надо одновременно нескольким приложениям писать в таблицу и читать оттуда. Зато работает да, быстрей.
>По теме: myisam транзакции не поддерживает,Что очень порой "радует" (приводит в неописуемый *матерный* восторг, я бы даже сказал) её владельцев [myisam владельцев] при ее crash'е. Который судя по форумам, бывает не так уж и редко.
>Что очень порой "радует" (приводит в неописуемый *матерный* восторг, я бы даже
>сказал) её владельцев [myisam владельцев] при ее crash'е. Который судя по
>форумам, бывает не так уж и редко.Постоянно бывает. И слёт по питанию бывает и облом в софте на середине операции. Не хочешь транзакции - не пользуйся, значит у тебя пока учебная задача и их не требует.
>>Что очень порой "радует" (приводит в неописуемый *матерный* восторг, я бы даже
>>сказал) её владельцев [myisam владельцев] при ее crash'е. Который судя по
>>форумам, бывает не так уж и редко.
>
>Постоянно бывает. И слёт по питанию бывает и облом в софте на
>середине операции. Не хочешь транзакции - не пользуйся, значит у тебя
>пока учебная задача и их не требует.Что-то не вполне понял про учебную задачу?! Это кому?
>Полчитал доку, переписал запросы. Время генерации отчетов уменьшилось с 3сек. до 0.02сек.
>Круто, спасибо :)
>Туманная надежность InnoDB vs очевидной скорости MyISAM... Из 2-х зол решил выбратьтак надо под задачу инструмент выбирать, а не наоборот.
в данном конкретном случае это абсолютно правильный выбор, я бы назвал ослом того, кто InnoDB создал.
myisam не предоствляет возможности использовать foreign-ключи, не контролирует целостность базы.
это бывает очень важно, если много таблиц и база хорошо нормализована.
а быстро писать "на полном скаку" в одну таблицу - лучше myisam нет.
я бы ещё подумал, нет ли смысла прикрутить heap для промежуточных результатов.
http://dev.mysql.com/doc/refman/4.0/ru/heap.html
но это зависит от архитектуры биллинга и алгоритма его работы.
>а быстро писать "на полном скаку" в одну таблицу - лучше myisam
>нет.MyISAM умеет быстро читать, с записью как раз есть большие проблемы, из-за чего и появились отложенные insert, без них на большом объеме обновлений myisam затыкается.
>>а быстро писать "на полном скаку" в одну таблицу - лучше myisam
>>нет.
>
>MyISAM умеет быстро читать, с записью как раз есть большие проблемы, из-за
>чего и появились отложенные insert, без них на большом объеме обновлений
>myisam затыкается.
На моем опыте - MyISAM выигрывает здоровски с простыми запросами и небольшой БД(до 500000 записей).
>>>а быстро писать "на полном скаку" в одну таблицу - лучше myisam
>>>нет.
>>
>>MyISAM умеет быстро читать, с записью как раз есть большие проблемы, из-за
>>чего и появились отложенные insert, без них на большом объеме обновлений
>>myisam затыкается.
>
>
>На моем опыте - MyISAM выигрывает здоровски с простыми запросами и небольшой
>БД(до 500000 записей).Странный у вас опыт...Либо руки неоттуда (=/), либо совсем простые запросы, да и то - по синтетикам InnoDB лучше в 1.5-2 раза, см. тесты....На mysql.com черным по белому пишут о том, что в heavy load production лучше юзать InnoDB, основные причины тут уже описаны....
У меня в небольшой базе поисковика ffsearch(2.5kk индексированных файлов, 250-300Мб сама база) время полного ребилда снизилось с 1.5-2 часов до 10-20 минут ;) Это называется блокировки на уровне записей или что такое MyISAM + concurrent SELECT+UPDATE ;)
>Странный у вас опыт...Либо руки неоттуда (=/), либо совсем простые запросыВот люди привыкли грубить в рассылках =(. Я же отчетливо написал, что в простых запросах. Тест, понимаешли проводил этих двух движков - где какой лучше.
В принципе, если не применять транзакции - то myISAM лучше может оказаться, но проблема в его ненадежности. Но и многое зависит от конфигурации системы. Они по разному хранят индексы. Если првильно организованы(и правильно используются)(или много памяти) индексы - то стоит смотреть в сторону InnoDB. Если сайтик с простой организацией БД, то я думаю myISAM хватит с головой.
а если база очень большая, объем данных порядка 800,000,000 записей в таблице, достаточно критична скорость добавления новых данных, и не очень критична скорость селекта, то что лучше - myisam или innodb?
если myisam не поддерживает transactions, означает ли это, что даже если я в Java открыл транзакцию, потом что-то в ней делал, и потом сделал rollback(), то на myisam этот rollback не подействует?
>если myisam не поддерживает transactions, означает ли это, что даже если я
>в Java открыл транзакцию, потом что-то в ней делал, и потом
>сделал rollback(), то на myisam этот rollback не подействует?да... проверено, rollback неподействует)
В MyISAM блокировки на уровне таблицы, а в InnoDB ну уровне записи. В момент записи/обновления в MyISAM все кто обращается к этой таблице ждут, если писать пытаются несколько одновременно - совcем плохо.