PHPのSQLite3で”database is locked”エラーが頻繁にでる

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

PHPのSQLite3で同時アクセスが多いとDBがロックされワーニングが出る

Warning: SQLite3::exec() [sqlite3.exec]: database is locked in /home/users/hogehoge.php on line xxx

自前のDB管理用のクラスを作ってSQLite3を使っている際に、スクレイピングのような反応が重い処理をしていると、たった2件の同時アクセスでも上記ワーニング(エラー)が出ることがあります。

SQLiteは単一ファイルを使ってのDBなので、何かの処理でファイルがオープンされていると、当然他の処理は受け付けられなくなります。

この際のよくやるミスは、クラスのオブジェクトを作成する際にDBをオープンして、デストラクターでクローズさせる方法を取ることです。

この方法であればリソースを使いまわせるのでメソッドで利用するなど便利ではあるのですが、意図しないロックが発生します。

面倒ではありますが、やはり必要な時に都度都度オープンして、処理が終わったら即クローズする急がば回れの方法が一番なようです。


スポンサーリンク
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク
レクタングル(大)広告