diff --git a/contrib/test_decoding/t/002_rb_memory.pl b/contrib/test_decoding/t/002_rb_memory.pl
new file mode 100644
index 0000000000..f20c6fb181
--- /dev/null
+++ b/contrib/test_decoding/t/002_rb_memory.pl
@@ -0,0 +1,45 @@
+use strict;
+use warnings;
+use PostgreSQL::Test::Cluster;
+use PostgreSQL::Test::Utils;
+use Test::More;
+
+my $node = PostgreSQL::Test::Cluster->new('test');
+$node->init(allows_streaming => 'logical');
+$node->start;
+
+$node->safe_psql('postgres', 'create table test (a int, b text)');
+$node->safe_psql('postgres',
+		 q[select pg_create_logical_replication_slot('s', 'test_decoding')]);
+my $psql1 = $node->background_psql('postgres', on_error_stop => 0);
+my $psql2 = $node->background_psql('postgres', on_error_stop => 0);
+
+$psql2->query_safe(q[begin]);
+for my $i (1 .. 300)
+{
+    $psql1->query_safe(q[
+begin;
+insert into test select c, repeat(md5(c::text), 10) from generate_series(1, 20000) c;
+commit;
+]);
+
+    $psql2->query_safe(q[insert into test select c, repeat(md5(c::text), 10) from generate_series(1, 150) c;]);
+}
+
+$psql2->query_safe(q[commit]);
+
+$psql1->quit;
+$psql2->quit;
+
+my $ret = $node->safe_psql('postgres',
+		 q[
+set logical_decoding_work_mem to '256MB';
+select count(*) from pg_logical_slot_peek_changes('s', null, null);
+]);
+
+is($ret, 6045602, "test");
+
+$node->stop;
+
+done_testing();
+
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 22bcf171ff..26d03e58da 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -3632,6 +3632,18 @@ static void
 ReorderBufferCheckMemoryLimit(ReorderBuffer *rb)
 {
 	ReorderBufferTXN *txn;
+	static bool report_1gb_mem = true;
+
+	if (report_1gb_mem && MemoryContextMemAllocated(rb->tup_context, true) > (1024L * 1024L * 1024L))
+	{
+		elog(LOG, "reorderbuffer memory: logical_decoding_work_mem=%lu rb->size=%lu rb->tup_context=%lu rb->context=%lu",
+			 logical_decoding_work_mem * 1024L,
+			 rb->size,
+			 MemoryContextMemAllocated(rb->tup_context, true),
+			 MemoryContextMemAllocated(rb->context, true));
+
+		report_1gb_mem = false; /* report only once */
+	}
 
 	/*
 	 * Bail out if debug_logical_replication_streaming is buffered and we
