我已经使用 SQLite 数据库一段时间来存储我的数据,没有任何问题,直到最近我遇到了
disk I/O error
at Finisar.SQLite.sqlite3.Throw()
at Finisar.SQLite.sqlite3.exec(String sql)
at Finisar.SQLite.SQLiteTransaction.CommitOrRollback(Boolean commit)
SQLite 数据库所在的本地驱动器上有足够的空间。我正在事务中运行插入。我怀疑 sqlite 数据库可能已损坏,因为它的大小达到了 45GB,但是我能够在 SQLite DB 查看器中打开该数据库,没有任何问题。此错误发生在客户端计算机上,我无法在开发环境中重现此错误。此时,我不知道为什么会出现此错误。 使用单个“SQLiteConnection”实例插入 45Gb 数据会导致这样的问题吗?
我在开始时仅打开连接一次,并在最后完成所有插入时仅关闭一次。
我非常感谢这里专家的帮助。
提前致谢。
最佳答案
终于找到问题了。操作系统错误 665 表示已达到文件系统限制。如果需要大量 ATTRIBUTE_LIST_ENTRY 来维护 NFTS 中碎片严重的文件,则会出现此问题。 NTFS 卷中碎片严重的文件可能不会增长超过特定大小
我使用/L 选项格式化驱动器以获得大 FRS,这解决了问题。 我需要确保数据库不会碎片太多。 希望这对某人有帮助。
关于SQLite 磁盘 I/O 错误 - 45 Gb 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36659745/