From 19f9227643b5099666878de33453bbe361f216fc Mon Sep 17 00:00:00 2001
From: Matthew Hodgson <matthew@matrix.org>
Date: Tue, 9 Jan 2018 16:25:04 +0000
Subject: [PATCH] avoid 80s GIN inserts by tweaking work_mem

see https://github.com/matrix-org/synapse/issues/2753 for details
---
 synapse/storage/search.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/synapse/storage/search.py b/synapse/storage/search.py
index 479b04c636..7b1166f417 100644
--- a/synapse/storage/search.py
+++ b/synapse/storage/search.py
@@ -106,6 +106,7 @@ class SearchStore(BackgroundUpdateStore):
                 event_search_rows.append((event_id, room_id, key, value))
 
             if isinstance(self.database_engine, PostgresEngine):
+                txn.execute("SET work_mem='256KB'")
                 sql = (
                     "INSERT INTO event_search (event_id, room_id, key, vector)"
                     " VALUES (?,?,?,to_tsvector('english', ?))"
@@ -123,6 +124,9 @@ class SearchStore(BackgroundUpdateStore):
                 clump = event_search_rows[index:index + INSERT_CLUMP_SIZE]
                 txn.executemany(sql, clump)
 
+            if isinstance(self.database_engine, PostgresEngine):
+                txn.execute("RESET work_mem")
+
             progress = {
                 "target_min_stream_id_inclusive": target_min_stream_id,
                 "max_stream_id_exclusive": min_stream_id,
-- 
GitLab