zeitgeist team mailing list archive
-
zeitgeist team
-
Mailing list archive
-
Message #01749
[Merge] lp:~zeitgeist/zeitgeist/explain-logs into lp:zeitgeist
Mikkel Kamstrup Erlandsen has proposed merging lp:~zeitgeist/zeitgeist/explain-logs into lp:zeitgeist.
Requested reviews:
Zeitgeist Framework Team (zeitgeist)
Related bugs:
#632363 Slow queries: SQL indexes not used
https://bugs.launchpad.net/bugs/632363
Part 1) of our profiling quest can be merged now since it quite unintrusive and very useful in its own right
--
https://code.launchpad.net/~zeitgeist/zeitgeist/explain-logs/+merge/35334
Your team Zeitgeist Framework Team is requested to review the proposed merge of lp:~zeitgeist/zeitgeist/explain-logs into lp:zeitgeist.
=== modified file '_zeitgeist/engine/sql.py'
--- _zeitgeist/engine/sql.py 2010-05-28 07:38:51 +0000
+++ _zeitgeist/engine/sql.py 2010-09-13 21:01:49 +0000
@@ -23,6 +23,7 @@
import sqlite3
import logging
import time
+import os
from _zeitgeist.engine import constants
@@ -35,20 +36,28 @@
"subj_uri": "uri",
}
+def explain_query(cursor, statement, arguments=()):
+ log.debug("**********************************************")
+ log.debug("QUERY:\n%s (%s)\nPLAN:" % (statement,arguments))
+ for r in cursor.execute("EXPLAIN QUERY PLAN "+statement, arguments).fetchall():
+ print r
+ log.debug("**********************************************")
+
class UnicodeCursor(sqlite3.Cursor):
+ debug_explain = os.getenv("ZEITGEIST_DEBUG_QUERY_PLANS")
+
@staticmethod
def fix_unicode(obj):
if isinstance(obj, str):
obj = obj.decode("UTF-8")
return unicode(obj)
- def execute(self, statement, parameters=None):
- if parameters is not None:
- parameters = [self.fix_unicode(p) for p in parameters]
- return super(UnicodeCursor, self).execute(statement, parameters)
- else:
- return super(UnicodeCursor, self).execute(statement)
+ def execute(self, statement, parameters=()):
+ parameters = [self.fix_unicode(p) for p in parameters]
+ if UnicodeCursor.debug_explain:
+ explain_query(super(UnicodeCursor, self), statement, parameters)
+ return super(UnicodeCursor, self).execute(statement, parameters)
def _get_schema_version (cursor, schema_name):
"""
Follow ups