任务单 #29123

チケット更新時データベースロックのエラーが多発します。

开放日期: 2012-07-27 02:26 最后更新: 2014-02-17 11:14

报告人:
(匿名)
属主:
(无)
类型:
状态:
关闭
组件:
(无)
里程碑:
(无)
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
文件:

Details

チケット数1600程度で、約20名近くで、日々アクセスしていると、更新時にデータベースロックのエラーが多発します。 Trac Lightningは、Windowsのサービスとして起動させています。 サービスを再起動すると、エラーとなる回数は少し減ります。 Trac Lightningのインストール環境は、仮想OS上のWindowsサーバー上で起動しています。

任务单历史 (3/10 Histories)

2012-07-27 02:26 Updated by: None
  • New Ticket "チケット更新時データベースロックのエラーが多発します。" created
2012-07-27 11:47 Updated by: jun66j5
评论

Trac Lightning のバージョンはいくつでしょうか。 また、データベースロック時のスタックトレース (log/trac.log に出力されているはずです) を提供していただくことは可能でしょうか。

2012-07-31 10:19 Updated by: None
评论

返信が遅くなり申し訳ありません。 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

with parameters:(1, 'custom_report_manager_version')

Exception:database is locked Traceback (most recent call last):

File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\dbhelper.py", line 48, in execute_in_trans
@env.with_transaction()
File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\db\api.py", line 78, in transaction_wrapper
ldb.commit()

OperationalError: database is locked 2012-07-31 10:12:11,398 Tracenv ERROR: Exception caught while checking for upgrade: Traceback (most recent call last):

File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\env.py", line 664, in open_environment
needs_upgrade = env.needs_upgrade()
File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\env.py", line 498, in needs_upgrade
if participant.environment_needs_upgrade(db):
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\api.py", line 249, in environment_needs_upgrade
sysUp or self.reports_need_upgrade(),
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\api.py", line 125, in reports_need_upgrade
mgr = CustomReportManager(self.env, self.log)
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\reportmanager.py", line 22, in init
self.upgrade()
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\reportmanager.py", line 50, in upgrade
dbhelper.set_system_value(self.env, self.name, self.version)
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\dbhelper.py", line 101, in set_system_value
execute_non_query(env, "UPDATE system SET value=%s WHERE name=%s", value, key)
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\dbhelper.py", line 20, in execute_non_query
execute_in_trans(env, (sql, params))
File "E:\TracLight\python\lib\site-packages\timingandestimationplugin-1.0.6-py2.6.egg\timingandestimationplugin\dbhelper.py", line 58, in execute_in_trans
raise e

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):

File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\main.py", line 511, in _dispatch_request
dispatcher.dispatch(req)
File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\main.py", line 237, in dispatch
resp = chosen_handler.process_request(req)
File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\auth.py", line 115, in process_request
self._do_login(req)
File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\auth.py", line 153, in _do_login
@self.env.with_transaction()
File "E:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\db\api.py", line 78, in transaction_wrapper
ldb.commit()

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)

2012-08-02 20:31 Updated by: jun66j5
评论

ログのご提供、ありがとうございます。

Trac Lightning のデフォルトにしているデータベース SQLite は、トランザクションでのロック待ちが10秒になっています。 あまりよい策ではないのですが、これを長くすることで少しマシな状況になるかも知れません。

conf/trac.ini にある以下の項目を

[trac]
database = sqlite:db/trac.db
次のように変更するとタイムアウトが20秒になるのでこれで調整して改善するか試してみるのはどうでしょうか。 (項目がなければ書き足してください。また notepad 以外のエディタで行なってください)
[trac]
database = sqlite:db/trac.db?timeout=20

これが大した効果がない場合は、

  1. すべての静的ファイルを Apache から返すように調整
  2. データベースを postgresql に変更する

などの方法になります。

2012-08-03 17:56 Updated by: None
评论

回答ありがとうございます。

ご提示いただきました対策では、ユーザアクセス時の応答が低下する可能性が高いため(チケットの更新頻度がかなり高いため)、 以下の方法も教えていただけないでしょうか?

2.データベースを postgresql に変更する

よろしくお願いいたします。

2012-08-03 21:34 Updated by: jun66j5
评论

2.データベースを postgresql に変更する

1つ問題があって、プラグインによっては postgresql で動作しないものがあります。 (どのプラグインが動作するしないは試していくしかないです)

手順:

  1. PostgreSQL サーバをインストール。
  2. PostgreSQL サーバに traclightning 用のデータベースとアカウントを作成。
  3. Python から PostgreSQL にアクセスするためのライブラリをインストール
    1. http://www.stickpeople.com/projects/python/win-psycopg/ から For Python 2.6 のものをダウンロード
    2. easy_install を使ってインストール
      easy_install -Z -U psycopg2-2.4.5.win32-py2.6-pg9.1.3-release.exe
      
  4. http://trac-hacks.org/wiki/TracMigratePlugin をインストールして有効にします
    1. easy_install http://trac-hacks.org/svn/tracmigrateplugin/0.12
    2. C:\traclight\python\share\trac\conf\trac.ini の components セクションに以下を足します
      tracmigrate.* = enabled
      
  5. trac-admin migrate コマンドで移行させます。引数には新しい tracenv のディレクトリとそのデータベース接続文字列を指定します。
    trac-admin C:\traclight\projects\trac\SampleProject migrate C:\traclight\projects\trac\new-project postgres://pguser:pgpass@pghost/dbname?schema=new_project
    
2012-08-06 10:50 Updated by: None
评论

設定方法ありがとうございます。 上記方法を試してみようと思います。 試した結果、動作することが確認できたプラグインをまた報告させていただきます。

2012-08-09 09:26 Updated by: None
评论

すみません。

PostgreSQL のバージョンは何でもいいんでしょうか?

2012-08-09 10:57 Updated by: jun66j5
评论

Trac 自身は PostgreSQL 8.1 以降をサポートしています。 で、PostgreSQL 8.4 は Trac 自身のテストや実際に使ったりして動作確認してあるので問題ないと思います。

2014-02-17 11:14 Updated by: jun66j5
  • 状态 Update from 开启 to 关闭
  • Ticket Close date is changed to 2014-02-17 11:14
评论

焼け石に水な気がしますが SQLite VACUUM コマンドで trac.db ファイルを再構築すると少し改善が見られるかも知れません。

C:> for /d %i in (C:\TracLight\projects\trac\*) do sqlite3 %i\db\trac.db VACUUM
とりあえずこのチケットは close します。

Attachment File List

No attachments

编辑

Please login to add comment to this ticket » 登录名