Beautiful - there's plenty to work with here. Thanks much, Mike!

On Wed, Mar 30, 2011 at 11:51 AM, Michael Bayer <mike...@zzzcomputing.com>wrote:

> For quick hits I usually turn debug logging on, or echo='debug' with
> create_engine(), that shows the rows coming in in the log.
>
> There's no "per row" event interface, you can of course intercept execute
> events at the engine and cursor level with ConnectionProxy.
>
> A blunt approach may be to intercept cursor executes, ensure the statement
> is a SELECT, then run the statement distinctly (i.e. a second time) in the
> handler, count the rows, or at least do a fetchmany() of N number of rows
> and alert if over a certain threshold.    Or wrap the query inside of
> "SELECT COUNT(*) FROM (<query>)" and get a count that way.
>
> Another depends on your DBAPI - if its observed that rows are pre-fetched
> within the execute, then you could just apply timing to a ConnectionProxy
> and look for slow queries (or large jumps in the size of gc.get_objects()
> maybe).
>
> Still another tack, subclass Query, override __iter__, pull out the result
> from super().__iter__(), count it, then return iter(result).  Query by
> default buffers everything anyway.   This would depend though on the fact
> that your query is returning distinct primary keys - if you have a basic
> cartesian product occurring (which is likely), Query's uniquifying of
> results might conceal that.
>
>
> On Mar 30, 2011, at 11:31 AM, Rick Morrison wrote:
>
> > Hi list:
> >
> > I've recently been plagued by a runaway query somewhere in one of my apps
> that mistakenly loads 10s of 1000's of rows, swamping the working set of the
> Python process and eventually invoking the OOM killer.
> >
> > Unfortunately, the database backend I'm using (MSSQL 2005) doesn't
> provide a lot in the way of throttling or detection tools for this, and so
> I'd like to inject some detection code into SQLA to track this thing down.
> Is there an existing listener interface (or an appropriate injection
> location for some code) in the (0.6.6) Engine or ResultProxy where it's
> possible to watch the number of rows retrieved?
> >
> > Thanks,
> > Rick
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> > To post to this group, send email to sqlalchemy@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 sqlalchemy@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 sqlalchemy@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.

Reply via email to