SQLite为journal_mode提供了一个实用程序,我认为它可以在其他sql数据库程序(MySQL、PostgreSQL、MS-SQL等)中使用。因此,这个问题也适用于所有像SQLite一样提供日志记录模式的数据库程序。
大多数现代文件系统(BtrFS、Ext4、NTFS等)都使用日志记录。由于数据库通常存储在日志文件系统上,所以数据库程序是否也要进行日志记录?
当启用SQLite journal_mode时,与禁用journal_mode相比,大量的更新和/或插入需要非常长的时间才能完成。
发布于 2017-02-22 12:32:26
SQLite的实用程序是特定于SQLite的;您不会在其他引擎中找到它们(或者实际上是PRAGMA
语句)。
至于数据库“日志记录”,这只是SQLite对其事务日志的名称(参见SQLite引用中的journal_mode
条目)。事务日志与文件系统日志完全不同,通常不需要禁用。如果没有事务日志,您将无法回滚事务并(如链接的文档注释所示):“如果在设置OFF日志模式时,应用程序在事务中间崩溃,那么数据库文件很可能会损坏。”
文件系统日志有助于确保崩溃后文件系统的一致性;但从应用程序(例如SQLite)的角度看,这并没有说明文件系统中的文件内部结构是否一致。
换句话说:不,它不是多余的,而且大多数其他数据库都没有提供任何禁用事务日志的选项。我建议,如果您的插入和更新进展缓慢,可能还有其他原因(每个事务进行了多少更改,等等)。
日志记录对于使数据库能够提供它们承诺的ACID (原子的、一致的、隔离的、持久的)保证至关重要。SQL-ite支持模式:DELETE
、TRUNCATE
、PERSIST
、MEMORY
、WAL
、OFF
DELETE
、TRUNCATE
、PERSIST
在每次事务提交后指定不同的处理日志文件的方法。WAL
-预写日志允许就地更新数据库文件。.MEMORY
,OFF
-允许崩溃时出现不一致状态,尽管OFF
“允许数据库文件使用普通SQL损坏”。为了提高性能,写前日志记录(WAL)有时会有所帮助,或者使用为多个并发写入器设计的数据库。
https://dba.stackexchange.com/questions/165123
复制相似问题