タグ

ブックマーク / kibq.blog18.fc2.com (2)

  • きばらしぶろぐ SQLiteでdatabase is lockedが返る場合の対処法

    ぐぐってみると関連記事がちらほら見つかるけど、結構言ってることがばらばら SQLiteではテーブルロックだの書いてるとこもあるけどSQLiteでのロックはデータベース、つまりファイル全体をロックしていると思われ まあそんなことはいいとして、database is lockedについてだけど、オートコミットではこの現象は起きないらしい。内部的にトランザクション開始してるのになんで?wwソース見るのめんどいからとりあえず忘れる事にして、SQLite、変な癖ありすぎ ただオートコミットだとinsertやらの書き込み処理にかなり時間かかる こうなるとタイムアウトを設定することで回避したくなる だけどphpではタイムアウトを設定してもそれぞれのプロセスでトランザクションが重複した場合、即座にdatabase is lockedが返る件www俺の環境だけ?wwこいつは曲者もいいとこだな 結果的に5回ま

  • きばらしぶろぐ SQLiteでdatabase is lockedが返る場合の対処法(その2)

    いろいろ挙動探ってみたけどタイムアウト値に関わらず即座にdatabase is lockedが返るのはどうやらBEGINコマンドの既定値であるDEFERREDのときだけっぽい というかBEGIN DEFERREDはINSERTとかUPDATEとかが実行されるまでロックは開始されないとか癖悪すぎるので絶対使いたくないww ちなみにタイムアウト値に関わらず即座にdatabase is lockedが返るパターンとして 1.プロセスAがトランザクション発行 2.プロセスBがトランザクション発行 3.プロセスBがINSERTなりUPDATEなりを発行(待たされる) 4.プロセスAがコミットする。ここでdatabase is locked とか。プロセスAが先にトランザクション開始してるのに何で?って感じwちなみにプロセスBの更新はエラーなしに完了します。 んで他にはBEGIN IMMEDIATEと

  • 1