diff --git a/lbry/wallet/server/session.py b/lbry/wallet/server/session.py
index 595ee56d5..daf8aa9f3 100644
--- a/lbry/wallet/server/session.py
+++ b/lbry/wallet/server/session.py
@@ -1003,9 +1003,20 @@ class LBRYElectrumX(SessionBase):
             self.session_mgr.executor_time_metric.observe(time.perf_counter() - start)
 
     async def run_and_cache_query(self, query_name, kwargs):
+        start = time.perf_counter()
         if isinstance(kwargs, dict):
             kwargs['release_time'] = format_release_time(kwargs.get('release_time'))
-        return await self.db.search_index.session_query(query_name, kwargs)
+        try:
+            self.session_mgr.pending_query_metric.inc()
+            return await self.db.search_index.session_query(query_name, kwargs)
+        except (TimeoutError, asyncio.TimeoutError) as error:
+            metrics = self.get_metrics_or_placeholder_for_api(query_name)
+            metrics.query_interrupt(start, error.metrics)
+            self.session_mgr.interrupt_count_metric.inc()
+            raise RPCError(JSONRPC.QUERY_TIMEOUT, 'query timed out')
+        finally:
+            self.session_mgr.pending_query_metric.dec()
+            self.session_mgr.executor_time_metric.observe(time.perf_counter() - start)
 
     async def mempool_compact_histogram(self):
         return self.mempool.compact_fee_histogram()