У меня на форуме работает форум VBulletin 4.x. Некоторые таблицы форума были преобразованы в InnoDB по причинам производительности в соответствии с этой инструкцией . Сам Форум вообще не использует транзакции (без START TRANSACTION или BEGIN WORK в исходном коде), а таблицы InnoDB используются только для предотвращения блокировки таблиц в запросах UPDATE. Форум, конечно, работает в режиме автокоммутации.
Правильно ли я понимаю, что я могу изменить уровень изоляции транзакций по умолчанию в READ UNCOMMITED в этом случае и получить некоторую прибыль от производительности таким образом?
TL; DR: Если ваш форум медленный, УРОВЕНЬ ИЗОЛЯЦИИ ОПЕРАЦИЙ, скорее всего, не является причиной этого, и установка его на что-либо еще, чем значение по умолчанию, вряд ли поможет. Настройка innodb_flush_log_on_trx_commit = 2 поможет, но имеет последствия для сбоев.
Длительная версия:
О каком УРОВНЕ ИЗОБРАЖЕНИЯ ОПЕРАЦИИ я написал в http://mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html . Просмотрите все 3 статьи обзора InnoDB в http://mysqldump.azundris.com/categories/32-InnoDB .
В результате, система в любом случае должна иметь возможность ROLLBACK, поэтому даже READ UNCOMMITTED не меняет ничего, что нужно сделать при записи.
Для чтения транзакций чтение происходит медленнее, когда цепочка журналов отмены журнала, ведущих к представлению для транзакции чтения, длиннее, поэтому READ UNCOMMITTED или READ COMMITTED может быть очень немного быстрее, чем по умолчанию REPEATABLE READ. Но вы должны иметь в виду, что мы говорим о доступе к памяти здесь, и это доступ к диску, который замедляет вас.
По вопросу AUTOCOMMIT: это синхронизирует каждую запись с записью на диск. Если вы ранее использовали MyISAM, и это было достаточно хорошо, вы можете настроить
[mysqld] innodb_flush_log_on_trx_commit = 2
в файле my.cnf и перезагрузите сервер.
Это заставит фиксацию записывать из mysqld в кеш-память файловой системы, но задерживает очистку кэша буфера файловой системы на диске, так что это происходит только один раз в секунду. Вы не потеряете какие-либо данные о сбое mysqld, но можете потерять до 1 секунды записи при сбое оборудования. Однако InnoDB автоматически восстановится, даже после аппаратного сбоя, и поведение по-прежнему лучше, чем раньше, с MyISAM, даже если оно не является полным ACID. Это будет намного быстрее, чем AUTOCOMMIT без этой настройки.
Да . Это, безусловно, даст некоторый прирост производительности. Но тогда вы должны вручную совершать коммиты, если вы делаете какие-либо обновления.
То, что я знаю о режиме AutoCommit, это будет делать коммиты автоматически после операций db, что приводит к перестановке индекса на таблицах при каждой фиксации, что снижает производительность.