当前位置:  开发笔记 > 后端 > 正文

sqlite3的:: BusyException

如何解决《sqlite3的::BusyException》经验,为你挑选了2个好方法。

现在使用SQLite3运行rails站点.

大概每500个请求左右,我得到一个

ActiveRecord :: StatementInvalid(SQLite3 :: BusyException:数据库被锁定:...

解决这个问题的方法是什么,这对我的代码来说是微创的?

我目前正在使用SQLLite,因为您可以将数据库存储在源代码控制中,这使得备份变得自然,您可以非常快速地推出更改.但是,它显然没有真正设置为并发访问.我明天早上会迁移到MySQL.



1> 小智..:

您提到这是一个Rails站点.Rails允许您在database.yml配置文件中设置SQLite重试超时:

production:
  adapter: sqlite3
  database: db/mysite_prod.sqlite3
  timeout: 10000

超时值以毫秒为单位指定.将其增加到10或15秒应该会减少您在日志中看到的BusyExceptions的数量.

不过,这只是一个临时解决方案.如果您的站点需要真正的并发性,那么您将不得不迁移到另一个数据库引擎.



2> ravenspoint..:

默认情况下,如果数据库忙且已锁定,则sqlite会立即返回阻塞的忙碌错误.你可以要求它等待,并在放弃之前继续尝试一段时间.这通常可以解决问题,除非你有1000个线程访问你的数据库,当我同意sqlite是不合适的.

    // set SQLite to wait and retry for up to 100ms if database locked
    sqlite3_busy_timeout( db, 100 );


修改Rifkin Habsburg提到的database.yml配置文件.
你把sqlite3_busy_timeout放在哪里?
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有