サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
kibq.blog18.fc2.com
いろいろ挙動探ってみたけどタイムアウト値に関わらず即座に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と
ぐぐってみると関連記事がちらほら見つかるけど、結構言ってることがばらばら SQLiteではテーブルロックだの書いてるとこもあるけどSQLiteでのロックはデータベース、つまりファイル全体をロックしていると思われ まあそんなことはいいとして、database is lockedについてだけど、オートコミットではこの現象は起きないらしい。内部的にトランザクション開始してるのになんで?wwソース見るのめんどいからとりあえず忘れる事にして、SQLite、変な癖ありすぎ ただオートコミットだとinsertやらの書き込み処理にかなり時間かかる こうなるとタイムアウトを設定することで回避したくなる だけどphpではタイムアウトを設定してもそれぞれのプロセスでトランザクションが重複した場合、即座にdatabase is lockedが返る件www俺の環境だけ?wwこいつは曲者もいいとこだな 結果的に5回ま
このページを最初にブックマークしてみませんか?
『kibq.blog18.fc2.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く