Prometheus
Prometheus

Reputation: 33655

How can I stop TastyPie doing UPDATE queries for no reason?

I'm seeing some usual goings on in my application. For no reason my server slows down when I have little or no traffic. After lots of trial and error I found my problems disappeared when I removed the ToOneField on my TastyPie resource!

What I found was for some unknown reason TastyPie is doing DB UPDATES on these ToOneFields for no good reason! What the... moment!

enter image description here

I found a possible bug filed here which claims to have fixed the update issue. I have installed the latest version from pip but still see this problem.

Can anyone help?

class IncentiveResource(ModelResource):
    product_introducer = fields.ToOneField(ProductResource, 'referrer_product', full=True)
    product_friend = fields.ToOneField(ProductResource, 'referee_product', full=True)

    class Meta:
        queryset = Incentive.objects.all().order_by('-date_created')
        resource_name = 'incentive'
        allowed_methods = ['get']
        authentication = MultiAuthentication(ClientAuthentication(), ApiKeyAuthentication())
        authorization = Authorization()
        filtering = {
            "active": ALL,
        }
        always_return_data = True
        cache = SimpleCache(cache_name='resources', timeout=10)

So little traffic here but becomes unusable. enter image description here enter image description here

Upvotes: 9

Views: 247

Answers (2)

guettli
guettli

Reputation: 28003

Can you reproduce the sql UPDATEs in a testing environment?

If yes, here is how I would debug it:

Modify the source where the sql command gets executed: insert an assert statement that no update gets done.

If the assert fails, you have the stacktrace of the strange UPDATE.

If this stacktrace does not help you, post it here.

Upvotes: 0

Farhan Khan
Farhan Khan

Reputation: 590

I don't know if this will help you, but I've seen a slight performance increase in an app I worked on while using select_related in the queryset and full=True in the resource field.

Try queryset = Incentive.objects.select_related('product_introducer', 'product_friend').all().order_by('-date_created')

Upvotes: 2

Related Questions