|
|
|
@ -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 |
|
|
|
|