【发布时间】:2016-04-16 03:20:04
【问题描述】:
我一直在使用 SQLite db 来存储我的数据,直到最近我遇到了任何问题
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 的数据会导致这样的问题吗?
我只在开始时打开连接一次,并且只在最后完成所有插入时关闭一次。
非常感谢这里的专家提供的任何帮助。
提前致谢。
【问题讨论】:
-
45 GB 确实超出了 SQLite 的极限。为什么不迁移到 MySQL 或其他旨在处理这种规模的选项?
-
此外,磁盘 I/O 错误可能表示硬件问题。你检查过磁盘本身吗?
-
另外,如果您一次插入 45 GB,听起来好像是这样,您可能会遇到其他问题,包括操作系统级别的问题,例如分页问题.
-
我在事务中批量插入 100 条记录,数据库的大小已达到 45 Gb。我看到在此阶段使用一些数据创建并删除了日志文件,但是数据库的大小不再增加。我在日志文件中看到的所有磁盘 i/o 错误日志。
-
@EdCottrell 即使页面尺寸尽可能小,SQLite 数据库文件也可以达到 1 TB。
标签: sqlite sqlite.net