We are in the process of moving a Django 1.3.1 project from a Mac OS X 10.5 
server to a Red Hat Enterprise Server 6.0 VM. For most things, the new 
server is about 2 times faster than the old one.

For Django queries, the new server is much slower. A single objects.get 
that should take less than a second takes over two seconds. I've tracked it 
down to this line in one of my models.py:

defaultHost = Host.objects.get(name='www.sandiego.edu').id

That line is not part of any model; it is run whenever Django is started up 
for use in one of my fields:

        server = models.ForeignKey(Host, default=defaultHost)

That is the only place defaultHost is used. If I change the defaultHost 
line to:

defaultHost = None

model.objects.get requests drop from 2-4 seconds to less than half a 
second. The change makes no difference on the current (Mac OS X) server.

Any idea what could be causing this or how I can find out? On the front 
end, things that take a second or two to display now take a minute, two 
minutes, or more.

This is the test script I'm using:

#!/usr/bin/python
import datetime
import sys, os

baseDir = '/projects'
sys.path.append(baseDir)
project_name = 'usdpages'
os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name

from usdpages.pages.models import Page

start = datetime.datetime.now()

Page.objects.get(slug='vector-apps')

end = datetime.datetime.now()

print 'Duration:', end - start

With startup query:

$ ./test
Duration: 0:00:02.252040
$ ./test
Duration: 0:00:02.298540
$ ./test
Duration: 0:00:01.851589

Without startup query:

$ ./test
Duration: 0:00:00.140946
$ ./test
Duration: 0:00:00.142173
$ ./test
Duration: 0:00:00.140059

I also tested it with the 1.4c2 release candidate, and it is slow 
regardless of that defaultHost line; it takes 1.8-2.4 seconds for that one 
Page query with a defaultHost=None, and 2.9 seconds consistently with 
defaultHost set to a query result.

One odd thing: in the method _cursor in the class DatabaseWrapper 
in /usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py if I 
change:

if not self._valid_connection():

to:

if True or not self._valid_connection():

the query time drops to the .14 second range as well. (In 1.4c2 it drops to 
.77-.81 seconds.)


-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/haY15OhTGBgJ.
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/django-users?hl=en.

Reply via email to