【问题标题】:SQLite Disk I/O error-45 Gb databaseSQLite 磁盘 I/O 错误-45 Gb 数据库
【发布时间】: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


【解决方案1】:

我终于找到了问题。操作系统错误 665,表示已达到文件系统限制。如果需要大量 ATTRIBUTE_LIST_ENTRY 来维护 NFTS 中严重碎片化的文件,则会发生此问题。 NTFS 卷中碎片严重的文件可能不会超过一定大小

我使用 /L 选项格式化驱动器以获得较大的 FRS 并解决了问题。 我需要确保数据库不会碎片太多。 希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多