* Allura/allura/model/discuss.py:find_posts:
short circuit if self.posts is already present and avoid requerying

* artifactreference bulk preload and cache
this was the biggest; each post has to check for backreferenced artifacts 
before checking for related artifacts. bulk querying for all these and caching 
them as instance attrs allows
us to skip all the individual checks

* ForgeDiscussion/forgediscussion/model/forum.py:ForumThread.subscribed
it's super() call was memoized, but this invocation wasn't

* memoize Allura/allura/model/notification.py:Mailbox.subscribed
i believe this shaved one ming call off; not much but can't hurt

* edit post HTML isn't present when not logged in, so nothing to be done there

* there still seem to be more Project fetches than should be needed, but didn't 
really find a good way to identify truly unnecessary ones or reduce those

* final counts - 6 total posts, 2 top level, 1 related artifact and one backrefd
before: mongo": 172, "ming": 104,       
after:  mongo": 135, "ming": 84,





---

** [tickets:#4359] Reduce duplicate queries in threaded discussion display**

**Status:** open
**Milestone:** unreleased
**Labels:** performance 
**Created:** Tue Jun 12, 2012 08:37 PM UTC by Dave Brondsema
**Last Updated:** Sat Feb 07, 2015 06:12 PM UTC
**Owner:** nobody


There are lot of duplicate ming queries for a threaded discussion.  The 
following is logged by timermiddleware, when viewing a ticket page that had 2 
comments by admin1, when logged in as admin1.

~~~~
get args=(<class 'allura.model.auth.User'>, 
ObjectId('4fbc01a69c104009d2000407')) kwargs={}
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.ProjectFile'>, {'category': 'icon', 
'project_id': ObjectId('4fbc01a69c104009d2000408')}) kwargs={}...
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.ProjectFile'>, {'category': 'icon', 
'project_id': ObjectId('4fbc01a69c104009d2000408')}) kwargs={}...
get args=(<class 'allura.model.auth.User'>, 
ObjectId('4fbc01a69c104009d2000407')) kwargs={}
get args=(<class 'allura.model.auth.User'>, 
ObjectId('4fbc01a69c104009d2000407')) kwargs={}
get args=(<class 'allura.model.index.ArtifactReference'>, 
u'allura/model/discuss/Post#6f62e5c2eec5ff46a51fb65a4d91efcba41b1aaf/tickets@testall/p/sourceforge/net')
 kwargs={}...
find args=(<class 'allura.model.index.ArtifactReference'>, {'references': 
u'allura/model/discuss/Post#6f62e5c2eec5ff46a51fb65a4d91efcba41b1aaf/tickets@testall/p/sourceforge/net'})
 kwargs={}...
get args=(<class 'allura.model.discuss.Thread'>, u'f0cd42a4') kwargs={}
get args=(<class 'allura.model.discuss.Discussion'>, 
ObjectId('4fbc059b9c104012b2000030')) kwargs={}
get args=(<class 'allura.model.project.AppConfig'>, 
ObjectId('4fbc059b9c104012b200002e')) kwargs={}
get args=(<class 'allura.model.project.AppConfig'>, 
ObjectId('4fbc059b9c104012b200002e')) kwargs={}
find args=(<class 'allura.model.discuss.DiscussionAttachment'>, {'post_id': 
u'6f62e5c2eec5ff46a51fb65a4d91efcba41b1aaf.tick...@testall.p.sourceforge.net', 
'type': 'attachment'}) kwargs={}...
get args=(<class 'allura.model.auth.User'>, None) kwargs={}
get args=(<class 'allura.model.index.ArtifactReference'>, 
u'forgetracker/model/ticket/Ticket#4fbd3f079c1040225a000002') kwargs={}...
get args=(<class 'allura.model.project.Project'>, 
ObjectId('4fbc059b9c104012b2000000')) kwargs={}
find args=(<class 'allura.model.project.AppConfig'>, {'options.mount_point': 
None, 'project_id': ObjectId('4fbc059b9c104012b2000000')}) kwargs={}...
get args=(<class 'forgetracker.model.ticket.Ticket'>, 
ObjectId('4fbd3f079c1040225a000002')) kwargs={}
get args=(<class 'allura.model.discuss.Post'>, None) kwargs={}
get args=(<class 'allura.model.auth.User'>, 
ObjectId('4fbc01a69c104009d2000407')) kwargs={}
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.ProjectFile'>, {'category': 'icon', 
'project_id': ObjectId('4fbc01a69c104009d2000408')}) kwargs={}...
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
find args=(<class 'allura.model.project.Project'>, {'deleted': False, 
'shortname': u'u/admin1'}) kwargs={}...
~~~~



---

Sent from forge-allura.apache.org because dev@allura.apache.org is subscribed 
to https://forge-allura.apache.org/p/allura/tickets/

To unsubscribe from further messages, a project admin can change settings at 
https://forge-allura.apache.org/p/allura/admin/tickets/options.  Or, if this is 
a mailing list, you can unsubscribe from the mailing list.

Reply via email to