Setting busy_timeout in SQLite SQLiteは書き込み、読み込みの際にデータベース全体をロックするので、read/writeが競合するときは、あとからアクセスした方がロックの解除を待つ必要がある。 デフォルトではbusy_timeoutというパラメータに最大30秒待つように設定してあるが、30秒だとインデックスが効かないようなselectクエリを実行すると超えてしまい、次に書き込もうとしてるプロセスがSQLITE_BUSYを受け取って終了してしまう。 Perlから設定する場合は、DBD::SQLiteのAPIでbusy_timeoutを変更できる。DBIx::Classを使う場合は、 # 最大500秒待つように設定 $schema->storage->dbh->func(500000, 'busy_timeout'); のようにしたらうまくいく。 (DB