2017-02-15 9 views
0

アトミックトランザクション(django)を使用して0.3秒、トランザクションで0.004秒をラップするとsqlite dbの書き込みが大幅に高速になりました。したがって、私はプロジェクトを通してトランザクションを適用しました。不思議なことに、「データベースがロックされています」というエラーが発生し始めたため、デバッグしてトランザクションがトランザクションを実行しているときに(更新Aと呼ぶことができる)、別の更新を同時に実行しようとしたとき(B)トランザクションでは、タイムアウト(デフォルトは5秒)を待たずに即座に失敗します。しかし、トランザクションなしでアップデートBを実行しようとすると、Aが終了するのを待ってからアップデートを完了しました。誰も私に、トランザクションの削除を含まないこの可能性のある説明を提供できますか?アトミックトランザクションでsqlite3を使用しているときに 'データベースがロックされています'というエラーが発生しました

答えて

0

SQLiteのタイムアウトは、PRAGMA busy_timeoutで設定できます。

デフォルト値は0です。この設定は(データベースではなく)接続にのみ適用されるため、すべての接続で5秒かかると見なされます。

そのPRAGMAを実行して、すべての接続に適切なタイムアウトが設定されていることを確認します。 (5秒間は危険で、30秒間使用してください)

関連する問題