Как изоляция на уровне транзакций влияет на производительность в режиме автоматической фиксации в MySQL? - PullRequest
2 голосов
/ 27 апреля 2010

На моем сервере работает форум VBulletin 4.x. Некоторые таблицы форума были преобразованы в InnoDB для повышения производительности в соответствии с этой инструкцией . Сам форум вообще не использует транзакции (без START TRANSACTION или BEGIN WORK в исходном коде), а таблицы InnoDB используются только для предотвращения блокировки таблиц в запросах UPDATE. Конечно, форум работает в режиме автокоммитов.

Правильно ли я понимаю, что в этом случае я могу изменить уровень изоляции транзакции сервера по умолчанию на READ UNCOMMITED и таким образом получить прирост производительности?

Ответы [ 2 ]

1 голос
/ 19 июля 2010

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 могут быть немного быстрее, чем READATABLE READ по умолчанию. Но вы должны иметь в виду, что мы говорим здесь о доступе к памяти, и именно доступ к диску замедляет вас.

По вопросу AUTOCOMMIT: Это будет синхронизировать каждый оператор записи на диск. Если вы уже использовали MyISAM и это было достаточно, вы можете настроить

[mysqld]
innodb_flush_log_on_trx_commit = 2

в вашем файле my.cnf и перезапустите сервер.

Это сделает запись коммита из mysqld в буферный кеш файловой системы, но задержит сброс кеша буферной файловой системы на диск, чтобы это происходило только раз в секунду. Вы не потеряете никакие данные при сбое mysqld, но при сбое оборудования вы можете потерять до 1 с. InnoDB восстановится автоматически, даже после аппаратного сбоя, однако, и поведение все еще лучше, чем было с MyISAM прежде, даже если это не полный ACID. Это будет намного быстрее, чем AUTOCOMMIT без этой настройки.

0 голосов
/ 27 апреля 2010

Да . Это, безусловно, даст некоторый прирост производительности. Но тогда вам придется делать коммиты вручную, если вы делаете какие-либо обновления.

Что я знаю о режиме AutoCommit, так это то, что он будет выполнять коммиты автоматически после операций с БД, что заставляет индекс таблиц перестраиваться при каждом коммите, что снижает производительность.

...