チケット更新時データベースロックのエラーが多発します。
Trac Lightning のバージョンはいくつでしょうか。 また、データベースロック時のスタックトレース (log/trac.log に出力されているはずです) を提供していただくことは可能でしょうか。
返信が遅くなり申し訳ありません。 Trac Lightning のバージョン:3.1.3
database is locked時のスタックとレースは以下となります。
2012-07-31 10:12:11,384 Tracdbhelper ERROR: There was a problem executing sql:UPDATE system SET value=%s WHERE name=%s
Exception:database is locked Traceback (most recent call last):
OperationalError: database is locked 2012-07-31 10:12:11,398 Tracenv ERROR: Exception caught while checking for upgrade: Traceback (most recent call last):
OperationalError: database is locked 2012-07-31 10:12:11,398 Tracenv WARNING: base_url option not set in configuration, generated links may be incorrect 2012-07-31 10:12:11,398 Tracenv WARNING: base_url option not set in configuration, generated links may be incorrect 2012-07-31 10:12:11,414 Tracweb_ui WARNING: EmailVerificationModule can't work because of missing email setup. 2012-07-31 10:12:34,555 Tracmain WARNING: HTTPForbidden: 403 Forbidden (SEARCH_VIEW privileges are required to perform this operation) 2012-07-31 10:12:52,305 Tracmain WARNING: HTTPForbidden: 403 Forbidden (WikiStart の操作を行うには WIKI_VIEW 権限が必要です。) 2012-07-31 10:13:06,634 Tracmain ERROR: Internal Server Error: Traceback (most recent call last):
OperationalError: database is locked 2012-07-31 10:14:08,104 Tracmain WARNING: HTTPForbidden: 403 Forbidden (この操作を行なうには TRAC_ADMIN 権限が必要です。) 2012-07-31 10:14:09,806 Tracchrome WARNING: File css/jquery.ui.all.css not found in any of ['E:\\TracLight\\python\\lib\\site-packages\\tracsubticketsplugin-0.1.1.dev_20111024-py2.6.egg\\tracsubtickets\\htdocs'] 2012-07-31 10:14:10,493 Tracmain WARNING: HTTPNotFound: 404 Not Found (File css/jquery.ui.all.css not found)
ログのご提供、ありがとうございます。
Trac Lightning のデフォルトにしているデータベース SQLite は、トランザクションでのロック待ちが10秒になっています。 あまりよい策ではないのですが、これを長くすることで少しマシな状況になるかも知れません。
conf/trac.ini にある以下の項目を
[trac] database = sqlite:db/trac.db次のように変更するとタイムアウトが20秒になるのでこれで調整して改善するか試してみるのはどうでしょうか。 (項目がなければ書き足してください。また notepad 以外のエディタで行なってください)
[trac] database = sqlite:db/trac.db?timeout=20
これが大した効果がない場合は、
などの方法になります。
回答ありがとうございます。
ご提示いただきました対策では、ユーザアクセス時の応答が低下する可能性が高いため(チケットの更新頻度がかなり高いため)、 以下の方法も教えていただけないでしょうか?
2.データベースを postgresql に変更する
よろしくお願いいたします。
2.データベースを postgresql に変更する
1つ問題があって、プラグインによっては postgresql で動作しないものがあります。 (どのプラグインが動作するしないは試していくしかないです)
手順:
easy_install -Z -U psycopg2-2.4.5.win32-py2.6-pg9.1.3-release.exe
tracmigrate.* = enabled
trac-admin C:\traclight\projects\trac\SampleProject migrate C:\traclight\projects\trac\new-project postgres://pguser:pgpass@pghost/dbname?schema=new_project
設定方法ありがとうございます。 上記方法を試してみようと思います。 試した結果、動作することが確認できたプラグインをまた報告させていただきます。
すみません。
PostgreSQL のバージョンは何でもいいんでしょうか?
Trac 自身は PostgreSQL 8.1 以降をサポートしています。 で、PostgreSQL 8.4 は Trac 自身のテストや実際に使ったりして動作確認してあるので問題ないと思います。
焼け石に水な気がしますが SQLite VACUUM コマンドで trac.db ファイルを再構築すると少し改善が見られるかも知れません。
C:> for /d %i in (C:\TracLight\projects\trac\*) do sqlite3 %i\db\trac.db VACUUMとりあえずこのチケットは close します。
チケット数1600程度で、約20名近くで、日々アクセスしていると、更新時にデータベースロックのエラーが多発します。 Trac Lightningは、Windowsのサービスとして起動させています。 サービスを再起動すると、エラーとなる回数は少し減ります。 Trac Lightningのインストール環境は、仮想OS上のWindowsサーバー上で起動しています。