Могу ли я отключить транзакции в MySQL / InnoDB? - PullRequest
3 голосов
/ 30 сентября 2011

У меня есть приложение Django, в котором уровень изоляции транзакции «REPEATABLE READ» по умолчанию в InnoDB приводит к тому, что разные процессы имеют разные представления данных, чем текущий в базе данных.

например, процесс 1 сделализменить, но процесс 2 его не видит.

Мне не нужна целостность транзакций в приложении;можно ли вообще отключить транзакции, чтобы все процессы, выполняющие SELECT, видели одни и те же данные?

Есть ли недостатки в этом?

Это то, что подразумевается под "READ UNCOMMITTED"?

Любые указатели приветствуют Рэйчел

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

Я бы посоветовал вам просто преобразовать таблицы InnoDB в myISAM.Если ваш критерий - скорость, вы теряете много потенциала, используя табличный тип транзакций (InnoDB) и просто отключая транзакции.Вы получили бы много, если бы вы просто преобразовали таблицы в myISAM.Он спроектирован с учетом отсутствия транзакций, но при этом может блокировать изменения (например, блокировки таблиц).

Очистка

ALTER TABLE table_name ENGINE = MyISAM;

может выполнить трюк для одной таблицы, создавая дамп,Смена типа и загрузка таблицы тоже делают свое дело.

2 голосов
/ 30 сентября 2011

Autocommit по умолчанию включен в InnoDB. Транзакции по-прежнему используются для обновлений (что необходимо), но они фиксируются сразу после каждого оператора.

Уровень изоляции READ UNCOMMITTED позволяет транзакции читать строки, которые были записаны другими транзакциями, но еще не были зафиксированы. Однако этот пункт не имеет значения, если вы явно не используете транзакции и включена автоматическая фиксация.

К сожалению, я не слишком знаком с Django, но из документации я вижу:

Как глобально деактивировать управление транзакциями

Уроды управления могут полностью отключить все управление транзакциями, установив Значение DISABLE_TRANSACTION_MANAGEMENT для True в файле настроек Django.

Надеюсь, это поможет.

...