Hi all,

I've got a strange performance issue after changing systems in
January.  I have some very complicated queries that used to work just
fine, taking about 10 seconds.  They now take upwards of 6-8 minutes,
using 100% of the processor the whole way.  When they do eventually
complete, there are no errors.

This usually happens on some rather complicated ticket dashboard
queries we would like to run, and it's 100% repeatable for the queries
on which it happens.  It doesn't seem to be related to the amount of
information on a given page:  removing half of the queries on a given
page doesn't speed things up significantly.

It can also happen in situations that boggle me.  For example:
http://trac/tags/'ui' takes about 150ms
http://trac/tags/'UI' takes several minutes, pegging two processors.

The old system was some sort of debian running sqlite2.  Trac and SVN
were moved to a CentOS 5 VM, running sqlite3.  The trac version stayed
the same.  Python, py-sqlite, mod_python, and the like were all
upgraded as well, to the versions that CentOS uses.  Trac itself is
0.10.4.  During the upgrade process, sqlite2 was upgraded to sqlite3
as instructed at http://trac.edgewall.org/wiki/PySqlite.  Sqlite3 on
centos is compiled threadsdafe, as required on the same page.

When I do an strace on one of the long queries (and there is ample
time to find the offending httpd process), I get pages and pages and
pages of:
futex(0x55555b444900, FUTEX_WAKE, 1)    = 0
There are probably several hundred thousand of these per page load,
maybe millions (a request would never finish with strace going), which
makes me think there's a locking problem, but I'm not sure how to
diagnose and repair it.

When the repeated futexes end and something happens, it's usually with
a sequence about like this:
futex(0x55555b444900, FUTEX_WAKE, 1)    = 0
stat("/var/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) =
0
access("/var/tmp", R_OK|W_OK|X_OK)      = 0
access("/var/tmp/sqlite_Sg3Q5T0lJziLAOJ", F_OK) = -1 ENOENT (No such
file or directory)
open("/var/tmp/sqlite_Sg3Q5T0lJziLAOJ", O_RDWR|O_CREAT|O_EXCL, 0644) =
15
fstat(15, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
unlink("/var/tmp/sqlite_Sg3Q5T0lJziLAOJ") = 0
lseek(15, 0, SEEK_SET)                  = 0
read(15, "", 100)                       = 0
fcntl(15, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741824,
len=1}) = 0
fcntl(15, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741826,
len=510}) = 0
fcntl(15, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=1073741824,
len=1}) = 0
fstat(15, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fcntl(15, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=1073741825,
len=1}) = 0
fcntl(14, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741824,
len=1}) = 0
fcntl(14, F_SETLK, {type=F_RDLCK, whence=SEEK_SET, start=1073741826,
len=510}) = 0
fcntl(14, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=1073741824,
len=1}) = 0
access("/var/www/trac/db/trac.db-journal", F_OK) = -1 ENOENT (No such
file or directory)
fstat(14, {st_mode=S_IFREG|0644, st_size=70977536, ...}) = 0
lseek(14, 0, SEEK_SET)                  = 0
read(14, "SQLite format 3\0\4\0\1\1\0@  \0\0003\241\0\0\0\0"..., 1024)
= 1024

There are no relevant log entries in any log anywhere.

Can anyone help?


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Trac 
Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/trac-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to