|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
В пакетном файле создается таблица с типом InnoDB и в нее вставляется шесть тысч строк: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Вставка этих срок занимает около 10 минут. Если делать тоже самое, но у таблицы задать тип MyIsam - то процесс занимает всего секунд пять-шесть... Если делать через транзакцию (BEGIN/COMMIT) - то и в InnoDB эта процедура занимает мало времени - секунд шесть-семь... Так и должно быть? Что можно подкрутить в настройках (кроме autocommit=0), что бы InnoDB без транзакций не тормозили? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2004, 16:53 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Прежде всего innodb чувствителен к первичному ключу, так что его лучше задавать явно. Во вторых: http://www.innodb.com/ibman.php#Insert.buffering Так что лучше увеличить buffer pool для него. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2004, 17:44 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Первичного ключа в создаваемой таблице нету. Установка innodb_buffer_pool_size=180M, innodb_additional_mem_pool_size=45 - тоже не повлияла на результат... Только вставка BEGIN/COMMIT дает нужную скорость... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 11:01 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Установил четверку - там такая-же картина... Вот мазафака - приплыли, называется - хочешь транзакции и ключи - в нагрузку тормоза получи !!! Переписывать теперь что-ли - везде втыкать бегин/комит - запара... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 13:10 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Если первиного ключа нет он будет добавлен неявно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 18:39 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Вот мазафака - приплыли, называется - хочешь транзакции и ключи - в нагрузку тормоза получи !!! Переписывать теперь что-ли - везде втыкать бегин/комит - запара... А помнишь, ты мне доказывал, что MySQL круче всех остальных СУБД ибо быстрее? А я отвечал, что как только там будут реализованы те фичи, что есть в серьезных СУБД, она тут же потеряет это единственное преимущество? А ты не верил, ругался и т.д. Так проблема именно в том, что в нашем мире чудес не бывает: хочешь функциональность -- плати скоростью. Кстати, в порядке мозгового штурма: А не поставить ли Постгрес, где все это (и не только) давно уже есть и заоптимизировано по самое нехочу? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 19:00 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
2 Stellar. Тормоза пропрадают, кады ставишь BEGIN/COMMIT. Просто - для меня это дополнительный гемор - все модули, где идет вставка кучи строк - обрамлять BEGIN/COMMIT. Блин - надо было сразу вставлять - ведь мускуль совершенно спокойно проглатывает эту конструкцию даже на таблах, которые не поддерживают данные операции!!! Если-б раньше это сделал - то мог бы совершенно спокойно счаз поменять тип таблиц... А насчет скорости - я и счаз скажу - муся быстра, как никто другой! Воткну бегин/комит - и получу нужный результат. Причем - часть таблиц я могу совершенно спокойно оставить MyIsam - мускулю не обязательно, что бы в БД таблицы были одного типа - это тоже удобно! По поводу постгря - есть некоторые моменты - во первых - настораживает то, что по дефолту - количество устанавливаемых одновременных подключений у него какое-то маленькое - ресурсы он что-ли жрет, или разработчики в угоду тем, у кого машинки слабые так сделали? Во вторых - с кодировками траблы - виндовая кодировка у него как-то не правильно работает - счаз точно не помню - вроде - большие и малые буквы у него не правильно сортируются, толи какую-то одну букву клинит - в обчем - где-то был облом (а может - руки.sys). Ну и в добавок - под винды - нормальной версии нет, то что есть - какой-то нестабилеж - для изучения и девелопинга - она есчо годиться, но держать рабочую базу на ней мне страшно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 19:58 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
BigHarryТормоза пропрадают, кады ставишь BEGIN/COMMIT. Ты не поверишь, но в Постгресе всё точно так же. Просто почему-то когда гоняют бенчмарки это стараются не учитывать... BigHarryПо поводу постгря - есть некоторые моменты - во первых - настораживает то, что по дефолту - количество устанавливаемых одновременных подключений у него какое-то маленькое - ресурсы он что-ли жрет, или разработчики в угоду тем, у кого машинки слабые так сделали? настройки по умолчанию таковы, чтобы всё могло запускаться даже на самом помоечном железе. но в свежей версии это поменяли, опять же из-за людей, которые любят гонять бенчмарки с настройками по умолчанию... BigHarryВо вторых - с кодировками траблы - виндовая кодировка у него как-то не правильно работает Такое обычно бывает, если кодировки вообще не настраивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 20:27 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
SadSpirit Просто почему-то когда гоняют бенчмарки это стараются не учитывать... Какие бенчмарки вы имеете в виду? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 21:38 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
ХренКакие бенчмарки вы имеете в виду? Никакие конкретно. Но я несколько раз видел именно такой подход, при большом желании можно поискать в Гугле примеры. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 23:20 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Забавно, что создается таблица tov_zena1 а записи добавляются в tov_zena2 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 23:36 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Что - то у вас с настройками накручено, товарищь.. Я попробовал ваш тест - итак 6000 записей в таблицу с вашей структурой на моем компьютере P4 2.4Ghz 512M RAM: MyISAM: time mysql test <g.sql real 0m0.501s user 0m0.050s sys 0m0.060s Innodb с autocommit ( без BEGIN/COMMIT): time mysql test <g.sql real 0m3.116s user 0m0.090s sys 0m0.040s Innodb с BEGIN/COMMIT: time mysql test <g.sql real 0m0.486s user 0m0.060s sys 0m0.050s Другими словами myisam и INNODB с BEGIN/COMMIT заливаются примерно с равной скроростью, INNODB без BEGIN/COMMIT: примерно в 6 раз дольше. То есть на вашей машине должно получаться (в 6 раз дольше чем 5 секунд) - примерно полминуты. Кстати, что за машина такая? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2004, 23:47 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Что-же все-таки с настройками? Снова сделал тест. Заполняется таблица с 6266 строками. Без транзакций: начало - 11:50:33, окончание - 11:59:33, в секунду - 700 записей вставляет. С транзакциями: начало - 12:17:14, окончание - 12:17:17, в секунду - вставил все... Почему такая большая разница? Машина - PIII-800x512RAM, Win-NT4 MySQL - 4.0.18 Вот настройки: ==================================== skip-locking skip-name-resolve skip-grant-tables skip-bdb set-variable = key_buffer=256M set-variable = max_allowed_packet=1M set-variable = table_cache=256 set-variable = sort_buffer=1M set-variable = record_buffer=1M set-variable = myisam_sort_buffer_size=64M set-variable = thread_cache=8 # Try number of CPU's*2 for thread_concurrency set-variable = thread_concurrency=8 server-id = 1 log set-variable = innodb_mirrored_log_groups=1 set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=5M set-variable = innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=1 innodb_log_archive=0 set-variable = innodb_buffer_pool_size=180M set-variable = innodb_additional_mem_pool_size=40M set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 ====================================== ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2004, 12:33 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Xpeн ! Поделись мыслями - что у меня не так? Какие у тебя настройки, что всего в шесть раз медленнее получается... Или - у тебя мускуль на юниксах? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 15:17 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Что не так? А вот например: innodb_flush_log_at_trx_commit=1 Это значит что innodb будет принудительно сбрасывать все логии кэши на диск и делать sync после закрытия каждой транзакции. А вместе с режимом autocommit (когда каждый инсерт неявно оборачивается в свою транзакцию) это приведет к 6000 sync на файловую систему. А это тормоза. Конкретный размер тормозов конечно зависит от ОС, файловой системы и скорости диска, но то что тормоза будут существенными в любом случае - это точно. Есть еще пара соображений по поводу этого конфига. Написать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2004, 19:40 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Конечно - будь добр - напиши !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 00:32 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
ХренЧто не так? А вот например: innodb_flush_log_at_trx_commit=1 Это значит что innodb будет принудительно сбрасывать все логии кэши на диск и делать sync после закрытия каждой транзакции. А вместе с режимом autocommit (когда каждый инсерт неявно оборачивается в свою транзакцию) это приведет к 6000 sync на файловую систему. А это тормоза. Конкретный размер тормозов конечно зависит от ОС, файловой системы и скорости диска, но то что тормоза будут существенными в любом случае - это точно. А если этот параметр отключить, то мы теряем ACID, правильно? То есть по нажатию любимой кнопки Reset можем остаться без результатов успешно законченных транзакций? :) Ну и нахрен тогда этот ваш любимый innodb? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 09:52 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 10:21 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
То есть по нажатию любимой кнопки Reset можем остаться без результатов успешно законченных транзакций? Во первых - при нажатии кнопки Reset данные можно потерять не только в хранилище innoDB - но абсолютно в любой другой системе. Во вторых - если innodb_flush_log_at_trx_commit = 0 - то "InnoDB only writes to the log file and flushes it to disk approximately once per second, or when the log buffer becomes full..." Думаю - что один раз в секунду - вполне секурно, тем более - что УПС стоит... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 10:22 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Вот мы опять вернулись к моему постоу про скорость.... Быть может, все же, поставить Постгрес и получить не только нормальные транзакции, но и CONSTRAINTS, FK, CHECKS и кучу процедурных языков впридачу? Еще раз: в нашем мире чудес не бывает . М за функциональность всегда приходится платить скоростью. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 10:22 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
но не кажется ли вам что пора переходить на что-нибудь более продвинутое Нет, пока не кажется... База данных не очень велика, возможностей Мускуля пока более чем достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 10:25 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Вот мы опять вернулись к моему постоу про скорость.... Да нормально все со скоростью - я же писал, что с begin/commit все прекрасно !!! Быть может, все же, поставить Постгрес... Да уже давно стоит - тока под фрей... С Виндовой кодировкой проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 10:29 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
Big thanks to Хрен !!! Выставил следующие опции: innodb_flush_log_at_trx_commit=0 set-variable = innodb_file_io_threads=9 ЗАЛЕТАЛО !!! Что с транзакциями, что без - все быстро !!! Понятно - sync после каждой вставки - вот где тормоза были ! А база-то лежит на зеркалючем рейде - и запись на винты более медленна... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 10:38 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
BigHarryВо первых - при нажатии кнопки Reset данные можно потерять не только в хранилище innoDB - но абсолютно в любой другой системе. если в логе транзакций есть записи, то по ним восстановятся данные. если записей в логе нету --- привет. я достаточно доходчиво? BigHarryДа уже давно стоит - тока под фрей... С Виндовой кодировкой проблемы... вот это читать пробовал? BigHarryЗАЛЕТАЛО !!! Что с транзакциями, что без - все быстро !!! Угу, а теперь попробуй в PostgreSQL отключить параметр fsync... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 13:03 |
|
InnoDB - тормоза страшнючие - что не так?
|
|||
---|---|---|---|
#18+
если в логе транзакций есть записи, то по ним восстановятся данные. если записей в логе нету --- привет. я достаточно доходчиво? Сброс на винт делается раз в секунду. Раз в секунду!!! Я достаточно доходчиво написал? Если нажать резет в момент записи лога - то на любой БД будет облом, и откат произойдет на предыдущую завершенную транзакцию. Я к тому, что innodb_flush_log_at_trx_commit=0 не отключает лог, а только уменьшает интревал времени флушинга. Ничего страшного в этом нету - ведь никто не отключает кэширование винтов из-за гипотетической возможности потери информации при отказе питания? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 13:15 |
|
|
start [/forum/search_topic.php?author=BigHarry%D1%83&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 737ms |
total: | 899ms |
0 / 0 |