On Dec 16, 2010, at 10:31 AM, Michael Bayer wrote: > > On Dec 16, 2010, at 12:39 AM, Julian Scheid wrote: > >> In an application that is heavy on inserts and updates, cProfile >> output is dominated by Session.add in which about 45% of time is >> spent. Most of that time, in turn, is spent in cascade_iterator (43%). >> I can provide more detailed information if needed. >> >> The application does aggressive caching of data and has set >> expire_on_commit=False, in order to keep database load down. Is that >> the reason for Session.add slowness? >> >> Is there a way I can speed this up while keeping a similar level of >> cache aggressiveness? >> >> For example, in one test run Session.__contains__ was invoked 25m >> times over the course of only a few minutes, accounting for 27% of >> total time spent. Could it be a good idea to try and override this >> function with one that's optimized for this specific use case? >> >> Also, so far I haven't spent any effort expunging objects from the >> session as soon as possible. Some objects might linger for longer >> than necessary. Would they contribute to Session.add's overhead? > > A major part of development resources as of late have been focused on add() > and cascade_iterator(). I would advise trying out the 0.7 tip from > mercurial where we've cut out a lot of overhead out of many areas of the > flush including add() + cascade_iterator (see > http://techspot.zzzeek.org/2010/12/12/a-tale-of-three-profiles/ for some > profiling output). > > Things like inlining Session.__contains__ are good ideas if they are shown to > be prominent in a slow profile, so if you want to send along a test script to > me that illustrates your bottlenecks I can work on its pain points and add it > to our suite.
I uploaded runsnakerun details from add() + cascade_iterator for current 0.6.6 and 0.7 tips, which is against the test program run in that post. Its a total of 11,000 add() calls. 0.7 is on the top. 0.7's larger percentage overall is due to performance increases elsewhere. The fact that its a lower percentage than your case is probably due to the lower number of relationships() in the test script, since cascade_iterator() increases in time for each relationship. http://imgur.com/a/SNkhq > > > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To post to this group, send email to sqlalch...@googlegroups.com. >> To unsubscribe from this group, send email to >> sqlalchemy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sqlalchemy?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.