summary refs log tree commit diff
path: root/synapse/storage/_base.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-02-09 14:22:52 +0000
committerErik Johnston <erik@matrix.org>2015-02-09 14:22:52 +0000
commit75656712e34694460ce7b12fc5a467667e04ea21 (patch)
treed9467f8e31d7c5b26b33a062755979ba2748a456 /synapse/storage/_base.py
parentLog when we receive a request, when we send a response and how long it took t... (diff)
downloadsynapse-75656712e34694460ce7b12fc5a467667e04ea21.tar.xz
Time how long we're spending on the database thread
Diffstat (limited to 'synapse/storage/_base.py')
-rw-r--r--synapse/storage/_base.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index b350fd61f1..0849c5f1b4 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -85,6 +85,28 @@ class SQLBaseStore(object):
         self._db_pool = hs.get_db_pool()
         self._clock = hs.get_clock()
 
+        self._previous_txn_total_time = 0
+        self._current_txn_total_time = 0
+        self._previous_loop_ts = 0
+
+    def start_profiling(self):
+        self._previous_loop_ts = self._clock.time_msec()
+
+        def loop():
+            curr = self._current_txn_total_time
+            prev = self._previous_txn_total_time
+            self._previous_txn_total_time = curr
+
+            time_now = self._clock.time_msec()
+            time_then = self._previous_loop_ts
+            self._previous_loop_ts = time_now
+
+            ratio = (curr - prev)/(time_now - time_then)
+
+            logger.info("Total database time: %.3f", ratio)
+
+        self._clock.looping_call(loop, 1000)
+
     @defer.inlineCallbacks
     def runInteraction(self, desc, func, *args, **kwargs):
         """Wraps the .runInteraction() method on the underlying db_pool."""
@@ -114,6 +136,9 @@ class SQLBaseStore(object):
                         "[TXN END] {%s} %f",
                         name, end - start
                     )
+
+                    self._current_txn_total_time += end - start
+
         with PreserveLoggingContext():
             result = yield self._db_pool.runInteraction(
                 inner_func, *args, **kwargs