我有一个Django应用程序,其中InnoDB中的默认“REPEATABLE READ”事务隔离级别导致不同的进程拥有不同于数据库中当前数据的数据视图。
e.g。流程1进行了更改,但流程2没有看到它。
我不需要应用程序中的事务完整性;我可以完全关闭事务,以便所有进行SELECT的进程看到相同的数据吗?
这样做有什么缺点吗?
这是“READ UNCOMMITTED”的意思吗?
欢迎任何指示 拉结
答案 0 :(得分:2)
InnoDB默认启用自动提交。事务仍然用于更新(这是必要的),但它们在每个语句之后立即提交。
READ UNCOMMITTED
隔离级别允许事务读取已由其他事务写入但尚未提交的行。然而,如果您没有明确使用事务并且启用了自动提交,则这一点无关紧要。
不幸的是,我对Django并不太熟悉,但是从the documentation我看到了:
如何全局停用交易管理
控制狂可以通过设置完全禁用所有事务管理 Django设置文件中的DISABLE_TRANSACTION_MANAGEMENT为True。
希望有所帮助。
答案 1 :(得分:2)
我建议您只将InnoDB表转换为myISAM。如果您的标准是速度,那么通过使用面向事务的表类型(InnoDB)并且只是禁用事务,您就会浪费很多潜力。如果您刚将表格转换为myISAM,您将获得很多。它的设计缺乏事务,同时仍能锁定更改(即表锁)。
干净
ALTER TABLE table_name ENGINE = MyISAM;
可以为单个表执行操作,转储,更改类型和加载表也可以。